Skip to content

Latest commit

 

History

117 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KanColle Game for iOS

一个面向 iPhone、兼容 iPad 的非官方舰队 Collection 浏览器与辅助信息工具。

本项目主要参考并移植以下 Android 开源项目的设计与功能:

  • antest1/GotoBrowser:游戏浏览、登录自动化、全屏适配、资源缓存、字幕、截图与 Mod 机制。
  • antest1/kcanotify:舰队信息、计时器、大破警告、战斗解析、任务追踪与辅助工具。

Important

本项目仍处于开发和真机验证阶段,优先支持 iPhone,其次支持 iPad。目前适合开发者使用 Xcode 自行编译、签名和侧载,不建议作为稳定版本分发。

项目目标

在一个 iOS App 中同时提供:

  1. 可实际登录和运行舰队 Collection 的游戏浏览器。
  2. 不修改游戏请求、不提供自动操作或作弊功能的只读数据辅助。
  3. 原生舰队、战斗、任务、计时器、通知和诊断界面。
  4. 针对 iPhone WKWebView 内存限制的监测和降级方案。

当前完成情况

游戏浏览器

  • DMM、kancolle.moe、OOI 三种连接器。
  • 三种连接器共用一套账号密码。
  • 账号密码使用系统 Keychain 保存。
  • DMM 登录页面自动填充。
  • DMM 地区限制 Cookie 处理。
  • 登录成功后锁定横屏。
  • 隐藏网页导航、页脚等无关区域,仅显示 1200 × 720 游戏画面。
  • OOI 游戏外壳全屏 DOM 注入与延迟 iframe 布局修复。
  • iPhone 全屏等比例缩放和触控坐标适配。
  • 静音启动、游戏内静音切换、保持屏幕常亮。
  • Canvas 兼容模式与 WebGL 模式切换。
  • CreateJS Ticker.RAF 帧率解锁,可在设置中关闭。
  • 游戏画面截图并保存到系统照片。
  • KC3/kcwiki 语音字幕数据、语音匹配和字幕条。

悬浮球与原生页面

登录并识别到游戏画面后,只保留游戏画面和悬浮球。点击悬浮球可以打开:

  • 舰队页面。
  • 战斗页面。
  • 任务页面。
  • 工具与计时器页面。
  • 设置页面。
  • 截图、静音、重新加载和退出操作。
  • 游戏画面上的舰队/战斗/任务简要 HUD。

这些辅助页面使用 SwiftUI 原生实现,不会创建第二个 WKWebView

工具页面

  • 海域血条与独立基地航空队面板;会在 mapinfo / base_air_corps 刷新时更新。
  • 明石改修:持有装备筛选、改修日、秘书舰、资源与改修目标。
  • 舰娘列表:舰种/受损筛选;等级、入手顺序、维修完成时间、士气排序;基础属性和实际装备详情。
  • 装备列表:类型图标与名称、类型筛选、性能、改修与熟练度。
  • 舰娘等级经验计算与远征经验参考。
  • 远征一览:进行状态、时间、报酬;点击查看旗舰、舰船数、等级、编成、火力、对空、对潜、索敌和士气条件。
  • 工具静态资料手动下载、缓存与更新:改修/经验/远征基础资料来自 kcanotify,远征条件来自 poi-plugin-ezexped;远程规则仅按文本解析,不执行下载脚本。

游戏 API 采集

  • 使用 WKUserScript 注入到主页面和游戏 iframe。
  • 包装 XMLHttpRequest/fetch,读取 /kcsapi/ 响应。
  • 默认 HTTPS 盲隧道模式下仍可采集游戏 API。
  • svdata= 解析、endpoint 规范化和事件去重。
  • 在数据进入持久化和诊断前过滤 api_token
  • API 数据同时提供给舰队、战斗、任务和字幕模块。

舰队、计时器与警告

  • api_start2api_port/port 和增量端点状态合并。
  • 舰队、舰娘、装备、编成、补给、入渠、远征和士气状态。
  • Formula 33 索敌计算。
  • 制空值范围与士气状态计算。
  • 大破 25% 边界判断。
  • 普通槽和增设槽损管识别。
  • 大破无损管红色警告、有损管橙色警告。
  • 入渠、未补给、远征和明石修理状态。
  • 远征、入渠、士气和明石四类计时器。
  • SQLite WAL 原子快照、冷启动恢复和损坏数据隔离。

战斗解析

  • 通常舰队、联合舰队和敌联合舰队。
  • 航空基地、航空战、支援、开幕雷击和雷击。
  • 先制反潜、炮击、友军和夜战。
  • 昼战转夜战时继承昼战结束 HP。
  • 损管、女神、退避和返航风险。
  • 战斗评级预测和服务器结果合并。
  • 战斗阶段时间线和舰船 HP 展示。
  • 战斗结束后才自动展示 MVP、经验、掉落摘要,避免战斗开始时破坏结果悬念。
  • 最多 100 场受限战斗日志。
  • API 重复响应不会重复扣血。

任务追踪

  • 任务列表同步与本地任务定义。
  • 基础任务事件路由和精确计数。
  • 出击节点、战斗结果、敌舰种和舰队编成条件。
  • 日本时间每日、每周、每月和季度重置。
  • 未知任务安全降级为 serverOnly,不伪造进度。
  • iPhone 列表界面与 iPad 自适应分栏。

通知与 Widget

  • 远征、入渠、士气和明石修理本地通知。
  • 四类通知独立开关和提前提醒时间。
  • 本地通知 64 条容量规划。
  • WidgetKit Small/Medium 计时器小组件。
  • App Group SQLite 数据共享。
  • App Group 不可用时降级到 Application Support。

网络、缓存与可选证书

  • Apple Network Framework 本地 HTTP CONNECT 代理。
  • 非游戏域名保持普通加密盲隧道。
  • 请求阻断规则和域名安全检查。
  • 游戏资源磁盘缓存、版本记录和 HTTP 304 重校验。
  • 资源大小上限和目录穿越防护。
  • Gadget 缓存端点绕行。
  • 可选的本地根 CA 生成、导出、安装引导和完全信任检测。
  • 可选 MITM 仅面向游戏服务器域名,不解密 DMM 登录域名。
  • 设置页显示游戏本地缓存大小并支持后台统计和清理。

默认不要求启用 MITM。舰队、战斗和任务 API 通过页面内 JavaScript 桥采集;只有 HTTPS 资源缓存、资源替换或 main.js 内容补丁需要可选的解密模式。

资源缓存仅缓存可由本地代理读取的资源响应。HTTPS CONNECT 盲隧道下,仍由 WebKit 的系统缓存负责;启用受信任的可选游戏域名 MITM 后,App 自建磁盘缓存才可命中 HTTPS 游戏资源。

内存与白屏诊断

  • 原生 phys_footprint 内存采样。
  • 当前 App 内存、会话峰值和最近采样历史。
  • 系统内存警告次数和 WebContent 终止次数。
  • SSL/网络错误记录和用户提示。
  • webglcontextlost/webglcontextrestored 监听。
  • 系统内存警告、App 进入后台和页面进程终止时清理易失缓存。
  • Canvas 页面进程终止后提供 WebGL 稳定模式。
  • 稳定模式会关闭 FPS 解锁并重新创建 WKWebView
  • WebContent 终止后不再静默自动刷新,避免无提示地离开当前游戏页面。

WKWebContent 是独立系统进程。iOS 公共 API 无法直接读取它的实际内存,也无法强制回收正在使用的 JavaScript 堆、Canvas 表面或 WebGL 纹理。设置页显示的内存数值仅属于 App 主进程。

架构

flowchart LR
    DMM["DMM / 第三方连接器"] --> WEB["WKWebView 游戏页面"]
    WEB --> BRIDGE["WKUserScript API Bridge"]
    WEB --> PROXY["本地 CONNECT 代理"]
    PROXY --> CACHE["资源缓存 / 可选 MITM"]
    BRIDGE --> PARSER["APIEnvelopeParser"]
    PARSER --> PIPELINE["GameDataPipeline"]
    PIPELINE --> FLEET["舰队与计时器"]
    PIPELINE --> BATTLE["战斗解析"]
    PIPELINE --> QUEST["任务追踪"]
    FLEET --> UI["SwiftUI 悬浮球与原生页面"]
    BATTLE --> UI
    QUEST --> UI
    PIPELINE --> SQLITE["SQLite WAL 快照"]
    SQLITE --> WIDGET["WidgetKit / 本地通知"]
Loading

主要目录:

Game/
├── Browser/       WKWebView、JavaScript Bridge、横屏与恢复
├── Entrance/      连接器、Keychain 和登录自动化
├── Fleet/         舰队信息与警告页面
├── Battle/        战斗覆盖页和日志
├── Quest/         任务追踪页面
├── Tools/         计时器和工具入口
├── Subtitle/      字幕协调与展示
├── Health/        内存、缓存和诊断
└── Settings/      设置、通知和证书引导

Packages/GameCore/
├── 代理、MITM、缓存和脚本补丁
├── P2 舰队/计时器/通知/快照
└── P3 战斗/任务/持久化

系统要求

  • iOS 17.0 或更高版本。
  • 优先支持 iPhone 横屏。
  • iPad 可运行,部分页面已支持自适应分栏。
  • macOS 与可用的 Xcode。
  • Apple Developer 签名;Widget/App Group 需要相应 Capability。

编译

克隆仓库后打开:

Game.xcodeproj

或使用命令行构建:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -project Game.xcodeproj \
  -scheme Game \
  -destination 'generic/platform=iOS Simulator' \
  build

运行 GameCore 测试:

cd Packages/GameCore
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer swift test

构建 Widget:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -project Game.xcodeproj \
  -scheme GameTimersWidget \
  -destination 'generic/platform=iOS Simulator' \
  build

初次使用

  1. 在入口页选择 DMM、kancolle.moe 或 OOI。
  2. 输入共用账号密码,并按需保存到 Keychain。
  3. 点击开始游戏。
  4. 登录成功并识别到游戏画面后,App 会切换横屏并隐藏网页其他部分。
  5. 点击悬浮球打开舰队、战斗、任务、工具或设置。

可选 HTTPS 资源解密

普通游戏和 API 解析不需要安装证书。

仅当需要 HTTPS 资源缓存、资源替换或 main.js 补丁时:

  1. 在设置中打开实验性 HTTPS 资源解密。
  2. 导出并安装 App 在设备本地生成的根证书。
  3. 前往 iOS“设置 → 通用 → 关于本机 → 证书信任设置”启用完全信任。
  4. 返回 App 重新检测。

如果 DMM 出现黑屏、SSL 错误或无法进入游戏,请关闭实验性解密并使用默认盲隧道模式。

隐私与安全

  • 账号密码保存在系统 Keychain,不写入普通偏好设置。
  • 三种连接器共用凭证,但凭证不会写入诊断日志。
  • API 处理前过滤 api_token
  • 战斗日志不保存原始请求、原始响应、昵称或成员 ID。
  • 本地根 CA 私钥保存在设备 Keychain。
  • MITM 仅允许匹配的游戏服务器域名,DMM 登录等域名保持盲隧道。
  • 本项目当前不包含自动点击、宏、脚本操作或作弊功能。

已知限制

  • 真机 DMM 登录、证书、通知和 Widget 仍需针对不同签名环境继续验证。
  • iPhone 的 WebContent 内存限制由系统控制,App 无法读取固定阈值。
  • WebContent 被系统终止后,其 JavaScript/Canvas 运行态已经丢失,无法完整恢复当前游戏场景。
  • 当前只会保留原生侧已经解析的舰队、战斗、任务和计时状态;是否能恢复网页进度取决于游戏服务器。
  • 资源缓存和部分脚本补丁依赖可选 MITM;默认盲隧道下不会修改 HTTPS 响应。
  • OOI 的全屏注入已实现,但 OOI、kancolle.moe 的登录与 iframe 结构仍需要更多真机兼容性验证。
  • iPad 尚未完成“游戏画面 + 工具面板”常驻并排布局。
  • 工具资料需用户在工具页手动下载;若上游数据格式变化,会安全显示“资料未标注”而不猜测条件。
  • 静态资料解析目前只显示远征条件,尚未在发送远征前自动判定所选舰队是否满足每一项条件。

后续计划

  • 远征编成自动验算、大发/闪卡大成功率和收益估算。
  • 掉落、建造、开发与资源日志。
  • 原生图表、备份与恢复。
  • 妖精皮肤、KCCP 翻译补丁和 Kantai3D。
  • iPad 游戏与工具常驻分屏。
  • 多语言 String Catalog。
  • 静态数据完整离线包、签名/版本校验和应用资源更新器。

详细任务见 docs/superpowers/remaining-tasks.md

上游项目与致谢

本项目不是 antest1 的官方 iOS 版本,但大量功能设计、数据结构、算法和实现思路来自:

  • GotoBrowser
    Copyright © 2019–2025 antest1 (IE10)
  • kcanotify
    Copyright © 2016–2026 antest1 (IE10)

两个上游项目均采用 GNU General Public License v3.0。公开发布本项目或其二进制版本时,应保留上游版权与来源说明,并遵守相应开源许可证。

字幕、翻译和游戏资源的权利归各自作者或权利人所有。

免责声明

本项目是非官方、非商业的学习与移植项目,与 DMM、C2、角川或舰队 Collection 官方无关。

使用者应自行确认所在地区法律、DMM 服务条款、游戏运营规则以及证书安装带来的安全影响。项目作者不对账号、数据、网络、设备或游戏进度损失承担责任。

About

一个面向 iPhone、兼容 iPad 的非官方舰队 Collection 浏览器与辅助信息工具。

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages