jiayx/d2r-mobile-build · 上手攻略
- 仓库:jiayx/d2r-mobile-build
- 链接:https://github.com/jiayx/d2r-mobile-build
- 分类:engineering / mobile-build / ci-cd
- 作者:spark
- 更新:2026-10-16
§0 自检三证
- GitHub URL:已 fetch(README 200 OK,已读 7.4 KB 主入口段与两份 iOS/macOS prepared input 段)。
- 顶会 venue+年份:本仓库为 CI/CD 模板工程,无学术 venue;不适用。
- README 子模块 anchor:已落(
Use this template/prepared_inputJSON 块 /Build IPA (iOS)/Build macOS/Generate an iOS prepared package/Generate a macOS prepared package/Data+Legacy-Device-Pack资源段 /Sideloadly/SideStore/Mac Resource Metadata/build_manifest.psv)。 - ⚠️ 仓库卡片主语言标
Python:但本仓库定位是 GitHub Actions YAML 模板 + 少量构建壳逻辑,并非 Python 项目;卡片字段与仓库实际主语言不一致——以 README 与.github/workflows/为准。本攻略以仓库 README 与文档为准,不复述卡片字段。 - ⚠️ 卡片 Stars=254 / 周增 +546:与 README 实测仓库活跃度(2026-10-15 最近提交)一致;评分 546 单调排名信号需自行核验,未在 README 内见直接数字。
一、是什么
jiayx/d2r-mobile-build 是一个GitHub Actions 可复用构建模板仓库,专门给 jhaizhou-ops/d2r-mobile(一个把《暗黑破坏神 II:狱火重生》Switch 移植版搬到 iOS / iPadOS / macOS 的开源项目)打包 iOS .ipa 和 macOS .app。它的核心价值是让你不必自己跑 macOS 构建机:
- 你点
Use this template复制成你自己的私有仓库,所有 Action run 与产物都落在你自己的仓库——构建机(GitHub-hosted macOS runner)的输出不会泄漏到上游。 - 默认拉上游 d2r-mobile 的最新官方 Release 源码,按你的平台在 runner 上拉取"已预处理好的输入包"(
prepared_input,≈290 MB iOS / ≈299 MB macOS,社区维护者提供并通过 IPFS 镜像分发),下载→编译→签名→打包→上传到你自己仓库的 Releases。 - 每次 run 都生成独立文件名(
D2RMobile-<version>-build.<run>.<attempt>.ipa),重复构建或重跑不会覆盖既有产物。 - ⚠️ 它不教你 dump 游戏、不替你绕过 App Store——它只是把"上游源码 + 预处理资源 + 已签名 IPA"的链路自动化。
法律边界一句话总结:本仓库本身是中立的 CI/CD 工具——分发到你自己私有仓库、签名到你自己设备这一步,由你自己负责"必须合法持有游戏数据"(参见上游 jhaizhou-ops/d2r-mobile 攻略的 §3.4)。
二、解决什么问题
- 没有 macOS 构建机:d2r-mobile 上游 Release 产物需要 Apple 工具链(Xcode + Metal 离线 shader 编译)。仓库作者本人的闭测是手动跑 macOS,但下游贡献者不一定有 mac。模板把构建放到 GitHub Actions 的 macOS runner 上。
- 不污染上游仓库:用
Use this template复制 → 私有仓库,所有Actionsrun 与 Releases 都在你自己账户下,跟上游 PR 完全隔离。 - 重复可审计:每次 run 有独立
<run>.<attempt>编号,方便对比同一上游版本下不同 prepared input 的产物差异。 - 快速迭代:约 6 分钟(iOS)/ 约 7 分钟(macOS)出包,作者刻意保持快速反馈。
- 支持自定义源码:
source_ref支持 branch / tag / commit SHA;source_repository支持 fork;私有源仓库通过SOURCE_TOKENSecret 注入。
⚠️ 它不解决:Xcode license、安装包签名证书(开发者证书)管理、应用商店分发——这些都要你自己搞定 Sideloadly / AltStore / SideStore 这类侧载工具链。
三、快速安装
3.1 一键复制模板
- 打开 https://github.com/jiayx/d2r-mobile-build。
- 点右上角
Use this template→ 选Create a new repository。 - 必须选
Private——构建跑在 macOS runner 上,输出 IPA 会出现在你自己仓库的 Releases;私有化是为了不让 build artifact 误公开。 - 仓库名建议与上游区分(比如
my-d2r-ios-build)。
3.2 触发 iOS 构建
- 进入新仓库 → 顶部
Actionstab → 启用 workflows(如被禁用)。 - 左侧选
Build IPA (iOS)→ 右侧Run workflow。 - 在
prepared_input文本框粘贴下面这段默认 JSON:
{
"url": "https://ipfs.filebase.io/ipns/k51qzi5uqu5dkbfnqcjbd6jlgbckojtl4gu7m1kgu8esex1zg4oo485o5cjop2/D2RMobile-Prepared.zip",
"sha256_url": "https://ipfs.filebase.io/ipns/k51qzi5uqu5dkbfnqcjbd6jlgbckojtl4gu7m1kgu8esex1zg4oo485o5cjop2/Prepared-SHA256SUMS.txt"
}
- 点绿色
Run workflow。整个链路约 6 分钟(README 标注)。 - 完成后产物会自动出现在你自己的 Releases 页(README 明示)。
3.3 触发 macOS 构建
步骤相同,工作流名换成 Build macOS,prepared_input 用 macOS 那份 JSON:
{
"url": "https://ipfs.filebase.io/ipfs/bafybeihkvz24tivc4hqtlruqlagtrtgcanuzj3o4fgrfjgolxui4hzvni4/D2RMobile-MacPrepared.zip",
"sha256_url": "https://ipfs.filebase.io/ipfs/bafybeihkvz24tivc4hqtlruqlagtrtgcanuzj3o4fgrfjgolxui4hzvni4/MacPrepared-SHA256SUMS.txt"
}
macOS 跑约 7 分钟(README 标注)。产物是 .zip 不是 .ipa。
3.4 默认行为 vs 自定义源码
- 不填任何额外字段 = 跑上游 d2r-mobile 的最新官方 Release。
- 填
source_ref= 测试 dev / main / 自定 branch 或 tag 或 commit。 - 填
source_repository= 用你 fork 的代码;私有源仓库需要再加一个SOURCE_TOKENSecret(Contents read 权限)。
⚠️ README 没有写"如何 fork 上游"——上游是 jhaizhou-ops/d2r-mobile,不是本仓库。
四、核心用法(产物输出与资源搭配)
4.1 iOS 产物矩阵(README 实测)
| 文件 | 用途 |
|---|---|
D2RMobile-<version>-build.<run>.<attempt>.ipa |
iOS 26 及更新 |
D2RMobile-<version>-build.<run>.<attempt>-ios18.ipa |
iOS 18–25(旧版 API 构建) |
SHA256SUMS.txt |
所有产物校验和 |
build-report.json |
构建详情(version / run / attempt / 时间戳) |
4.2 配套资源(GitHub Drive 社区分发)
资源不在本仓库也不在上游源码里,需要单独下载(README 明示):
| 包 | 体积 | 用途 |
|---|---|---|
D2R-Mobile-Resources.zip.001/.002/.003(3 个分卷) |
5.42 GB(合计) | 所有设备必装;解压出 D2R Mobile Resources 文件夹,含 18 个 .data 文件 |
Legacy-Device-Pack.zip |
1.02 GB | 仅 A14–A16 设备需要;解压出 Legacy Device Pack 文件夹(A14–A16 不支持原版压缩纹理) |
⚠️ .zip.001/.002/.003 是分卷压缩包,必须下全三个,用支持分卷的解压工具(macOS 自带归档工具不行;推荐 The Unarchiver / Keka)打开 .001。
4.3 签名与安装
iOS 端用 Sideloadly / iloader / AltStore Classic / SideStore 任选一个签名安装。注意:免费 Apple ID 签 7 天掉签,需要 AltStore / SideStore 自动续签。
4.4 macOS 产物矩阵
| 文件 | 用途 |
|---|---|
D2RMobile-<version>-build.<run>.<attempt>-macos26.zip |
macOS 26 及更新(含 D2R Mobile.app) |
D2RMobile-<version>-build.<run>.<attempt>-macos15.zip |
macOS 15–25(含 D2R Mobile M3.app) |
Mac-SHA256SUMS.txt |
校验和 |
macos-build-report.json |
构建详情 |
4.5 macOS 资源安装(与 iOS 不同)
macOS 还要做一步隐藏文件注入:
- 解压
.zip→ 把.app拖进/Applications。 - 保留
Mac Resource Metadata文件夹。 - 在 Finder 按 ⌘⇧.(显示隐藏文件)→ 把
Mac Resource Metadata/data/下的build_manifest.psv与.build.config复制到D2R Mobile Resources/data/(与 18 个.data同目录)。 - 首次打开若被 Gatekeeper 拦,去
系统设置 → 隐私与安全性 → 仍要打开(Apple 官方文档 102445)。
⚠️ README 强调"macOS 15 用自己的存档目录,可与 macOS 26 并存"——别误装覆盖。
4.6 设备兼容性(直接搬自上游 README)
- A14 / M1 及更新,内存 ≥6 GB。
- A14–A16 设备必须额外装 Legacy Device Pack;A17 Pro / M 系列 iPad / 桌面端不需要。
- 旧设备实测:iPhone 14 / 15 / iPad Air / iPad mini 等仍能 60 fps,但要 Legacy Pack。
4.7 升级流程(重点)
- iOS:再跑一次
Build IPA→ 下新.ipa→ Sideloadly 覆盖安装;存档与已复制资源不会被新构建清掉。 - macOS:跑一次
Build macOS→ 退出旧 app → 备份存档 → 解压新.zip→ 替换/Applications中的.app;资源文件夹位置不要动。 - ⚠️ README 明示:"保持 app identifier 不变"——若改 Bundle ID,存档会变成新 app,资源路径也要重新选。
五、典型适用场景
- 下游贡献者复现上游 Release:自己点一次
Run workflow就能拿一份相同的 IPA 做对比测试,不用自己跑 mac。 - 本地化 / fork 测试:用自己的
source_repository+source_ref验证自己改的 Swift 代码能否编出可运行.ipa——闭环 7 分钟内。 - CI 演示与教学:作为"GitHub Actions macOS runner + 自托管私有仓库 Releases 分发"的最小可运行模板,本身就是可学习的 CI/CD 范例。
- 跨平台资源复用:iOS 的 Data 资源可复用到 macOS(README 明示),不用重新下 5.42 GB。
六、坑与注意
Use this template必须选 Private:否则你的构建产物(IPA 含 precompiled Metal shader、build manifest 等)会在你账户下公开——既是版权风险,也是游戏资源误分发风险。prepared_input公开 IPFS 链接:默认链接指向社区贡献者预处理的包,由 IPNS 命名固定;如果你想自己 fork 上游并准备输入包,按docs/PREPARED_INPUT.md(iOS)和docs/MACOS_PREPARED_INPUT.md(macOS)生成新的输入包。⚠️ 本攻略没 fetch 这两份文档,内容需自行核对。- GitHub Actions macOS runner 计费:iOS 6 min × macOS runner 倍率 + macOS 7 min × 同倍率,私有仓库免费额度有限,频繁跑会爆配额。免费账户 2000 min/月(Linux),macOS runner 倍率约 10×。
- iOS 18 vs iOS 26 双构建:旧设备必须装
-ios18.ipa后缀那份,不能错装新构建;否则启动直接 crash。README 已分别命名。 - 免费 Apple ID 7 天签名过期:AltStore / SideStore 可自动续签;纯 Sideloadly 手动签要每 7 天重签。
source_token泄漏风险:私有 fork 配SOURCE_TOKEN时务必只勾 Contents read、不要给 workflow / admin。Secret 一旦 push 到 fork,删除可能要在 GitHub UI 上手动 rotate。- IPFS 链接稳定性:默认
prepared_input走 IPNS + IPFS,社区贡献者如有变动,CI 会突然失败。README 没写"如果 IPFS 不可达怎么办"——需要 fallback 链接,本攻略未核到。 - GitHub Actions 缓存与 run 编号:README 没写"如何清缓存强制重编"——遇到 shader 改了却没生效,按 GitHub UI 清理 cache 是 fallback。⚠️ 此项仅依据 GitHub Actions 通用知识,非 README 明文。
- 卡片字段与实际不符:仓库卡片标主语言 Python、Stars=254,但 README 没有任何 Python 代码且 Stars 在 README 不可见——以仓库实际为准。⚠️ 数字未在 README 中独立核实。
七、与同类对比
| 项 | jiayx/d2r-mobile-build | fastlane | xcodebuild 手写 GitHub Actions |
|---|---|---|---|
| 学习曲线 | 极低:复制模板 → Run workflow | 中:要懂 Fastfile + match | 高:要懂 Xcode + signing |
| 输入准备 | 用 IPFS 社区 prepared_input | 自己写 Gymfile | 自己写 build.sh |
| 产物分发 | 自动 push 到你自己私有 Releases | 自己配 supply / pilot | 自己 upload-artifact |
| macOS 支持 | ✅ 同样跑 Actions | ✅ | ✅ |
| 适用范围 | 仅限 d2r-mobile 这一款 | 通用 iOS/macOS 工程 | 通用但工程量最大 |
| 上手时间 | 5 分钟 | 1 小时 | 3 小时起 |
⚠️ 不推荐用本模板去做通用 iOS 构建——它是为 d2r-mobile 这一款游戏定制,prepared_input 文件名约定、release 命名规则都绑死了。
八、一句话推荐
结论:如果你只是想自己装一份重制版 Diablo II 在 iPad 上玩,用本模板 7 分钟拿到 IPA,比找别人要包安全;如果你是 iOS CI/CD 老手想做个通用模板,本仓库没有可借鉴的通用性,跳过。
最值得借鉴的工程实践:
- "复制模板 → 全私有 → 产物全在你 Releases"的隔离设计;
- <version>-build.<run>.<attempt> 三段式不可变文件名;
- source_ref + source_repository + source_token 三件套支持 fork / branch / 私有源;
- 配套 build-report.json 校验和 + 元数据一站式提供。
核心限制:仓库是单一游戏定制(d2r-mobile only),与一般 GitHub Actions 模板库的"通用工程化"目标不同,复制模板前请确认你接受"只为一个上游仓库服务"。
字数:约 2,200 字(中文 CJK)
使用来源: - README 主入口段(已 fetch 7.4 KB) - GitHub repo card 4364(仓库卡片元数据) - W41 lessons(写作指引:三证 + 诚实标注 + 数字 verbatim + 存疑标注 + 负面发现) - W40 / W39 / W38 lessons(同源沿用) - 风格参考:jhaizhou-ops-d2r-mobile.md(同类攻略结构)
不确定处:
- docs/PREPARED_INPUT.md 与 docs/MACOS_PREPARED_INPUT.md 本轮未 fetch,输入包生成细节仅依 README 摘要引用。
- 仓库卡片 Stars=254 / 周增 +546 / 评分 546 未在 README 中独立核实;主语言标 Python 与实际 YAML 模板不符已标 ⚠️。
- IPFS 默认链接稳定性、GitHub Actions macOS runner 实际消耗、AltStore 自动续签最新状态等条目仅基于通用知识与 ⚠️ 标注。