先了解:这个网页帮你做什么?
你可以直接在工作台选择源码 ZIP 或工程文件夹,上传后自动编译,完成后下载或删除云端产物,全程在同一个网页操作。源码会保存到你指定的 GitHub 仓库。GitHub 会启动一台云端 Mac,按照项目的编译规则,把源码变成可以下载的产物。你使用 Windows 电脑也可以操作。
一条完整的操作路径:先建立自己的私有仓库 → 准备 Token → 选择产物 → 上传本地源码 → 上传并编译 → 下载 → 按需删除。原生单工程通常无需修改配置或填写 Scheme;IPA 默认无证书。
源码是包含代码和编译配置的完整工程。只有一个现成的 IPA、dylib 或 deb,不是源码;更改文件后缀也不能把它变成另一种格式。网页会在浏览器中解压源码 ZIP、检查文件,再提交到仓库;不会把现成安装包转换成源码。
三个选项,应该点哪个?
三种格式对应不同工程类型;选择一种格式不会自动改写你的源码。插件能否在设备上使用还取决于插件加载环境、设备架构和源码兼容性。IPA 可以无证书编译,但安装时仍需要兼容的巨魔环境或后续签名。
第一次使用 · 先建立你自己的私有构建仓库
这个网页是操作面板,不是所有人共用的源码仓库。你的文件、编译任务、日志和产物都放在你自己的 GitHub 仓库。网页不再预填作者账号,上传前会用 Token 核对仓库是否确实属于你。
- 下载纯净的编译环境初始化包。
只包含 iOSForge 编译工具、工作流和配置,不含网站作者或其他用户的项目源码、历史记录、Token、证书或示例产物。把它解压到电脑上的新文件夹;不要直接 Fork 作者的整个项目来获取私密环境。
- 登录自己的账号,新建 Private 仓库。
打开预填的私有仓库创建页面 ↗。Owner(所属账号)确认是你自己;Repository name 可填
iOSForge-Builds;可见性确认选中 Private(私有)。可勾选添加 README,然后点 Create repository。预填不等于已经创建,仍需你核对确认;不要选 Public,公开仓库属于自己也仍会公开源码。 - 把解压后的环境文件放到这个新仓库最外层。
在新仓库点 Add file → Upload files,上传初始化包内的全部文件和目录,再点 Commit changes 保存。不要多套一层文件夹。也可用 GitHub Desktop 提交;工作流文件必须包含在提交中。
最外层应同时看到
.github/、iosforge/、iosforge.toml和pyproject.toml。特别注意别漏掉以点开头的.github文件夹;Mac 可按 Command + Shift + . 显示隐藏项。不要把 ZIP 文件本身直接传进仓库。 - 确认编译工作流已经出现。
打开自己仓库的 Actions。应能看到 GitHub Actions(编译)和 Check build environment(环境检查);如果提示启用工作流,阅读后确认启用。没有时,检查
.github/workflows/build.yml是否位于仓库根路径。这个私有构建仓库不需要开启 Pages。 - 创建只授权这个仓库的 Token。
继续看获取 Token 教程:Resource owner 选自己的账号,Repository access 仅选刚创建的仓库,Actions 和 Contents 都设为 Read and write。不要授权所有仓库,也不需要额外账号权限。
- 回工作台,填写真实地址并检查。
仓库栏填
你的用户名/iOSForge-Builds,将“你的用户名”换成你的真实 GitHub 用户名。分支填写实际分支(通常 main),粘贴 Token 后点“检查我的仓库”。看到你自己的账号、正确仓库名、Private 私有后,再选择源码上传。下次打开仍需重新填写,不会偷偷使用作者仓库。
GitHub 和获得仓库授权的协作者仍在信任范围内;不可信的源码、依赖、工作流、网页代码、浏览器扩展或泄露的 Token 都可能造成风险。只运行你信任的项目,下载需要的产物后按需清理。此前已经推送到公开仓库的源码,不会因为换用私有仓库而从公开提交历史中自动消失。
公开仓库的 Fork 仍是公开的;要保护自己的新源码,按上面的步骤创建独立 Private 仓库并导入纯净包。私有仓库的 GitHub Actions 使用你自己的额度,macOS 构建可能消耗较多额度,开始前检查自己的用量和支出限制:GitHub 官方计费说明 ↗。
先记住这几个词
- 仓库 Repository
- GitHub 上存放整个项目的文件夹。填写格式是
你的用户名/仓库名,例如你自己的iOSForge-Builds仓库。不要照抄工具作者的账号。 - 分支 Branch
- 同一项目的一条开发版本线。本指南都使用默认的
main,先不要改它。 - 提交 Commit
- 保存一次源码或配置修改。网页里的 Commit changes 就是确认保存。
- 工作流 Workflow
- 告诉云端电脑如何编译的步骤。编译用
build.yml;pages.yml只负责发布这个网页。 - Token / 访问令牌
- 你给网页调用 GitHub 的授权凭证,不是 GitHub 登录密码。
- 构建产物
- 编译完成的真实
.ipa、.deb或.dylib文件,统一保存在仓库的sources/Download/真实文件名中,不再套一层 ZIP。
直接在网页上传自己的源码
不用先去 GitHub 手动传文件。首次使用请先按第四节准备 Token;这个授权让工作台能替你向自己的仓库提交源码和启动编译。
- 准备完整工程,不要只选一段代码。
插件应包含 Makefile、代码,以及原工程需要的 control、plist 和资源。应用应包含 .xcodeproj 或 .xcworkspace、源码、共享 Scheme 和依赖配置。可以选择普通 ZIP;电脑端也可选择整个文件夹。手机不支持文件夹选择时,请选 ZIP。
- 在工作台选择产物,再点“上传本地源码”。
插件选 .dylib 或 .deb,应用选 .ipa。仓库填写你自己的
你的用户名/iOSForge-Builds(把“你的用户名”替换成真实账号)。新建仓库通常使用main分支,以你仓库实际分支名为准。粘贴 Token 后先点“检查我的仓库”,确认归属、可见性和编译工作流。 - 点击“选择 ZIP”或“选择文件夹”。
也可把一个源码 ZIP 拖进上传框。此时文件只在浏览器中检查,尚未上传。检查完成后,会显示文件数量、总大小和前 100 个文件的预览。系统会去掉 ZIP 最外层共同的包装目录,保留工程内部结构。
- 填写项目文件夹名称,核对提交位置。
例如填
MyPlugin,文件会放到sources/MyPlugin/。不同项目用不同名称,以便单独编译。上传只会修改该目录,不会覆盖工作台本身。 - 检查源码公开范围,再勾选确认。
看“检查我的仓库”的结果:Private 表示私有;Public 表示公开。私密源码请使用自己的私有仓库。任何仓库都不要提交账号密码或密钥。勾选后,当前浏览器会只为这个仓库记住确认,刷新或再次选择源码时自动恢复;换仓库不会沿用,也可随时点“取消记住”。Token 和源码文件不会被保存在浏览器中。
- 粘贴 Token,点击“上传并编译”。
上传有进度提示,请保持网页打开。文件会作为一次完整提交保存;保存成功后自动启动你选择的编译类型,不会同时多跑一份自动构建。源码目录会自动填好,下次直接点“开始构建”即可重编。
更新以前上传的项目
使用相同项目名称,并勾选“允许更新本次同名文件”。未上传的旧文件不会被删除。如果你删除或改名了许多文件,建议换一个新项目名称,避免旧文件继续参与编译。没有勾选时,已存在的目录会被拦截,不会悄悄覆盖。
上传限制与特殊工程
| 项目 | 当前限制 |
|---|---|
| 源码 ZIP | 25 MB 以内;不支持加密、分卷和 ZIP64。 |
| 实际源码 | 解压后 / 文件夹总计不超过 50 MB、1000 个文件,单个文件不超过 10 MB。 |
| 二进制和大文件 | 一次最多更新 150 个需要单独上传的二进制或大文件;上传会适度放慢,减少 GitHub 限流。 |
| 不适合网页上传 | 包含符号链接、Git 子模块或 Git LFS 的复杂工程,请使用 Git 客户端,保留原始结构。网页会拒绝 ZIP 符号链接与 LFS 指针。 |
超出限制可用 GitHub Desktop 上传完整源码。随后回到工作台,选“使用仓库源码”,把源码目录填写为该工程所在文件夹,照常编译;不要把未经解压的 ZIP 直接放进仓库。
完成标志:看到“源码已保存”和提交链接,右侧出现排队或编译状态。如果保存成功但编译未启动,先刷新任务记录确认没有重复编译,再点击开始构建;不必重新上传。
确认插件配置,需要时再调整
所选源码目录中的单个 Theos 工程会自动识别,默认使用 iOS 15.0、arm64 + arm64e、rootless。首次上传可以不改配置。多个工程、只支持单一架构或需要固定路径时,再按下面的步骤调整。网页指定源码目录后,工程会只在该目录内搜索,根配置里的固定 project_dir / app.project / app.scheme 不用于此次自动选择;最低系统、架构和包布局仍使用根配置。IPA 用户可直接看应用工程说明。
- 在仓库根目录打开 iosforge.toml。
“根目录”就是打开仓库后最外面那层,与
README.md同一层。点击文件右上角的铅笔按钮进入编辑。 - 更新已有的项目配置。
下面是工程放在
plugin文件夹时的配置。修改已有的[project]和[theos],不要在文件末尾重复添加同名区块。项目名可以改,路径要与文件夹一致。
[project]
name = "MyPlugin"
kind = "tweak"
minimum_ios = "15.0"
[theos]
project_dir = "plugin"
archs = ["arm64", "arm64e"]
package_scheme = "rootless"原文件里如果写的是 # project_dir = "plugin",请去掉开头的 #。带 # 的行只是说明文字,不会生效。路径区分大小写,Plugin 和 plugin 要写一致。
- 确认源码支持这些目标。
编译工具会把最低系统、架构和 rootless 设置传给 Theos。默认等价于下方的系统目标;不必为了使用本工具重复修改 Makefile。如果依赖只支持 arm64,在上方配置中把 archs 改为
["arm64"]。
TARGET = iphone:clang:latest:15.0rootless 是插件的安装布局,默认路径带 /var/jb;不等于“所有 iOS 15+ 设备都可直接安装”。已有项目仍需检查依赖和资源路径是否兼容 rootless。如果你明确使用传统 rootful 环境,可将 package_scheme 改为 "rootful"。
- 点击 Commit changes 保存修改。
配置里的
project_dir应当指向包含 Makefile 的目录。例如 Makefile 在sources/MyPlugin/Makefile,就填写project_dir = "sources/MyPlugin"。
完成标志:工程路径已经填写并保存,路径下确实有 Makefile。dylib 和 deb 共用这套源码配置。
获取 GitHub Token,跟着点就能完成
Token(访问令牌)相当于你交给工作台的一把“限范围钥匙”:允许它上传源码、启动编译、下载和删除产物。它不是登录密码,也不是 Apple 签名证书。下面的英文就是 GitHub 按钮或选项的名字,找到同名位置再操作。
它们都在 Repository permissions(仓库权限)里。Actions 管编译和产物,Contents 管源码上传。User / Account permissions(用户 / 账号权限)里的邮箱、Copilot、个人资料等,本工具都不需要。
路线 A · 从零创建一个 Token
适用于你自己的 GitHub 账号和个人构建仓库。先完成建立自己的仓库;下文的“你的用户名”都要替换成你的真实账号,不能照字面填写,也不要填写网站作者的账号。
打开预填创建页面 ↗会打开 GitHub 官方新标签页,预填名称、30 天有效期和两项权限。Resource owner 默认由 GitHub 使用当前登录账号,请自行核对。这不是自动授权:仍需你选择仓库、核对后确认生成。登录后如果没有保留预填内容,按以下步骤手动填即可。
- 确认页面和登录账号。
地址应以
https://github.com/开头,页面标题是 New fine-grained personal access token。若提示 Sign in,先登录你自己的 GitHub 账号,按 GitHub 提示完成身份验证。不要进入 Tokens (classic)。找不到入口时:右上角头像 → Settings(账号设置,不是仓库 Settings)→ 左侧底部 Developer settings → Personal access tokens → Fine-grained tokens → Generate new token。
- 填上面几项基本信息。
- Token name · 名称
- 填写
iOSForge。这只是方便你认出用途,不是令牌本身。 - Expiration · 有效期
- 选 30 days(30 天)或更短期限。到期需要更新,不建议选永不过期。
- Description · 备注
- 可留空,或填写“iOSForge 网页上传与编译”。
- Resource owner · 资源所属账号
- 选择 你自己的 GitHub 用户名。如果找不到,先检查是否登录错账号。
- 只选择你自己的构建仓库。
找到 Repository access(仓库访问范围),点 Only select repositories(只选择指定仓库)。再打开下方 Select repositories / Selected repositories,搜索你建立的仓库名,例如
iOSForge-Builds,并勾选它。关掉下拉框后,应看到你的用户名/iOSForge-Builds。不要选择 All repositories(所有仓库);只选 Public repositories(公开仓库只读)也不能完成上传。
- 添加 Actions,并改为“读写”。
向下找到 Permissions → Repository permissions。如果有 Add permissions 按钮,点开、搜索
Actions并选中;如果是可展开的权限列表,直接找到 Actions。然后把它右侧的 Access 下拉框改成 Read and write(读取和写入)。预填后已有 Actions,就直接核对右侧权限。不要停在 Read-only / Read(只读)。
- 再添加 Contents,也改为“读写”。
仍在同一个 Repository permissions 区域,再次点 Add permissions,搜索
Contents并选中;旧版列表直接找到 Contents。把 Access 也改成 Read and write。不要把它和 User permissions 里的其他选项混淆。这一步不要跳过:只开 Actions,可能能启动已有源码的编译,却不能从网页上传源码。Metadata(基础信息)自动出现只读时保持默认。Administration、Workflows、Secrets 等不需要额外开启。
- 先核对下面的清单,再确认生成。
仓库范围和权限全部一致后,点击页面底部 Generate token(生成令牌)。如果 GitHub 要求再次验证身份,按它的提示完成;不要向工作台或 AI 提供验证密码、验证码。
保存前,对照这 4 项
这是配置核对示意,不是对你账号的自动检测。GitHub 可能把两项读写权限合并成一行,重点是同时包含 actions 和 contents。
- 授权仓库
- 仅
你的用户名/iOSForge-Builds - Actions · 编译与产物
- Read and write 读取和写入
- Contents · 上传源码
- Read and write 读取和写入
- Metadata · 基础信息
- Read-only 默认只读
账号权限不必开启。专用于 iOSForge 的 Token 不需要邮箱、Copilot、Gists 或 Profile 等权限。
最后一步 · 复制回来,粘贴到哪里?
- 复制 GitHub 刚生成的那一长串字符。
点击令牌旁的复制图标。完整值通常只在创建时展示一次,建议保存在你自己的密码管理器里。不要复制 Token 名称“iOSForge”,也不要复制网页地址。
- 回到原来的编译工作台标签页。
找到 GitHub Token 输入框,点进去粘贴,然后点“检查我的仓库”。确认提示的账号是你本人、仓库名正确;私密源码还要确认显示 Private 私有仓库。电脑可按 Ctrl + V;手机长按输入框后点“粘贴”。显示成圆点是正常的,不必点眼睛按钮。当前正在选择源码时,直接切回原标签页,不要刷新丢掉已选文件。
- 按你的源码来源继续。
第一次上传:选 ZIP / 文件夹,核对提交位置并勾选确认后,点“上传并编译”。已上传过:选“使用仓库源码”,填写实际源码目录,再点“开始构建”。出现运行编号和排队状态,才表示任务已经提交。
不用每次都创建新 Token。未到期且权限正确时,可以重复使用原来的值。但工作台不保存令牌,关闭或刷新后需要重新粘贴;GitHub 已登录也不会自动填入。
路线 B · 已有 Token,补权限就行
适用于“GitHub 拒绝请求 / 403”或上传失败。先检查配置,不要一上来删除令牌,也不要反复提交同一次构建。
- 打开列表,点你之前创建的 Token 名称。
打开我的 Fine-grained tokens ↗,找到 iOSForge 后点名称。这个详情页用来改权限,不会重新显示已隐藏的完整令牌。
- 点“Access on 你的用户名”同一行右侧的 Edit。
页面有多个 Edit 时,找仓库授权区域旁边的 Edit(编辑),不是只修改顶部名称的按钮。不要点 Delete(删除)或 Regenerate token(重新生成)。如果界面改成单独的 Permissions → Edit,就进入这个权限编辑入口。
- 核对仓库,再补齐两项仓库权限。
仓库必须包含
你的用户名/iOSForge-Builds。进入 Repository permissions,确认 Actions → Read and write,再添加 Contents → Read and write,具体点法见上面的步骤 4、5。若只有 metadata 和 actions,那就仍然缺 Contents。如果这个 Token 专门给 iOSForge 使用,可移除误开的用户权限;如果还用于别的工具,先确认用途,或单独为 iOSForge 创建一个限范围 Token,避免影响其他工具。
- 点击页面底部的保存 / 更新按钮。
按钮可能显示 Save 或 Update permissions;看到 GitHub 要求确认时完成确认。回到详情页,按上方 4 项清单检查保存结果。仅修改权限不需要重新生成令牌,原来那串值可继续使用。
- 回到工作台,确认粘贴的是这个 Token。
可先点“刷新记录”查看是否已经有任务,避免重复构建。但能显示记录不代表上传写入权限已齐全,仍要核对 Contents。没有任务时,再尝试一次上传或构建。
卡住了?按现象处理
找不到自己的仓库,或者所属账号选不了
先看右上角头像,确认登录的是你自己的账号;再检查 Repository access 是否选了 Only select repositories。其他账号不能仅凭知道仓库地址就获得写入权限。还没创建构建仓库时,先按第一节建立自己的私有仓库。工作台只支持 Token 所属用户自己名下的个人仓库,暂不开放组织或跨账号协作仓库。
已开 Actions,仍提示 GitHub 拒绝请求
先确认 Contents 也已开 Read and write、仓库选对、权限已保存、输入框使用的不是另一个旧 Token。403 还可能与 API 限流、仓库规则或组织审批有关,不能只凭这句提示认定源码有错。检查具体失败步骤;组织 Token 显示 Pending 时需要等待管理员批准。
令牌过期、复制不到了,或者已经泄露
到期或忘记完整值时,可创建一个替代 Token,再回工作台换掉输入框内容。Regenerate token 会使原来的值失效,用它的其他地方也要更新。泄露时请立即在 GitHub 撤销 / 删除该令牌,再生成新令牌;不要把新值发给 AI、发到聊天、写进源码或截图。
已经登录 GitHub,为什么还不是一键登录?
目前这是 GitHub Pages 静态网页,尚未接入 GitHub App 登录服务。登录 GitHub 不等于授权另一个网页操作仓库。“预填创建页面”只减少填表步骤,不会自动生成、获取或保存你的令牌。真正免手工 Token 需要另行配置授权应用和安全后端,首次仍须你确认授权。
安全提醒:令牌仅在当前工作台页面内存中使用,请求直接发给 GitHub;不要发给 AI。原生登录与身份验证始终在 GitHub 官方页面完成。
核对依据:GitHub 令牌创建与预填参数 ↗ · 构建所需 Actions 权限 ↗ · 上传所需 Contents 权限 ↗
开始构建,等待云端完成
- 选择想要的产物。
.dylib 和 .deb 使用 Theos 插件工程;.ipa 使用 Xcode 应用。IPA 保持“无证书编译”即可;没有 Apple 证书不用填导出配置。
- 确认源码来源。
首次上传按第二节操作。已上传过的项目选“使用仓库源码”,源码目录填写
sources/MyPlugin等实际路径。留空会搜索整个仓库;多个项目时务必填写,避免无法唯一选择。 - 确认仓库、分支、Token,点击主按钮。
本地源码模式是“上传并编译”;仓库模式是“开始构建”。开始后输入暂时锁定,避免请求过程中换错仓库。不要重复点击或在另一窗口同时提交同一个项目。
- 看右侧“构建动态”。
排队中:等待 GitHub 提供云端电脑。编译中:正在安装依赖和编译。已完成:下方出现可下载产物。首次需要准备环境和依赖,通常比后续慢,实际时间取决于工程。
- 离开后回来,点“刷新全部记录”。
重新填写 Token,确认同一仓库和分支,点击“任务记录 → 刷新全部记录”。编译工作流可点“查看产物”;网页发布和环境检查可点“打开记录”。正在运行的任务会继续显示;关闭网页不会取消已提交的云端任务。
上传和编译是两个阶段。出现“源码已保存,编译未能启动”时,先刷新记录排除重复任务,再重试构建。出现源码编译错误时,先看工作台的“运行日志”;工具不会自动修复任意项目的代码。
运行日志与“复制给 AI”怎么用?
- 构建时看右侧“运行日志”。
页面约每 15 秒读取步骤状态,显示当前执行到哪里。GitHub 的编译原文按接口可用情况读取,运行中可能尚未开放;这不是逐行日志直播,也不会用模拟文字冒充实际输出。
- 失败时先点“只看错误”。
它会显示失败步骤、匹配到的报错和附近上下文。任务下拉框可以选择某个具体任务;点“刷新日志”可重新读取 GitHub 当前提供的内容。没有匹配到错误不代表没有错误,请结合原始日志判断。
- 点击“复制给 AI”,再粘贴到对话里。
复制内容会包含仓库、分支、提交、任务编号、已知构建参数以及当前显示的日志片段。把出错的源码文件一起交给 AI,要求先找根因再修改。复制前检查内容是否含私密代码;常见 Token / 私钥遮盖只是辅助,不是完整的敏感信息保护。
- 用完清空,不自动留下副本。
成功后日志自动清空;失败时只在当前页内存暂留,刷新、关闭页面或切换仓库后清空。点“清空并暂停”会立刻清空并停止读取,直到你手动刷新日志。网页不保存日志到浏览器存储、下载文件或源码仓库;你主动复制到剪贴板的内容由你自行保管。
GitHub Actions 的原始日志仍按 GitHub 自己的规则保留,不属于网页缓存。重新选择失败任务会重新请求 GitHub,而不是恢复本地历史日志。接口尚未开放、日志太大或浏览器阻止跨域读取时,可使用 GitHub 原始日志链接。读取方式见 GitHub 官方任务日志接口 ↗。
下载、回看与删除构建产物
- 等到右侧显示构建完成。
在“构建产物”里找到需要的文件。也可刷新全部任务记录,再在编译工作流旁点“查看产物”,找回当前集中保存的成品。
- 点击“下载 IPA / DEB / DYLIB”。
网页直接打开仓库
sources/Download中的真实文件,不再下载外层 ZIP,也不用解压。若新标签页提示登录,请先登录拥有该仓库权限的 GitHub 账号,再回工作台点一次。 - 检查并保存到自己的电脑或手机。
真实文件会一直保存在当前分支,直到你主动删除。它会占用仓库体积,单个文件必须小于 95 MiB。文件是否能安装或运行,还取决于设备系统、依赖和加载/签名环境;IPA 安装见下一节。
- 不再需要仓库副本时,点该文件旁的“删除”。
先核对确认框中的真实文件名、仓库和运行 ID。点“保留文件”或按 Escape 可取消;只有点“确认永久删除”才会从
sources/Download删除这一个文件。 - 删除后核对提示。
选中的文件消失,源码、构建记录和已下载文件都保留;其他成品不受影响。Git 不保存空目录:删掉最后一个成品后,空的
sources/Download文件夹会自动消失。
请先下载需要保留的文件。删除后不能恢复原来的下载,只能重新编译生成新产物。网络中断或提示无法确认结果时,请刷新记录并重新打开该任务,核对列表,不要连续重复删除。
文件旁的“删除”只删除仓库中的该文件,不删除整条记录。需要 Contents → Read and write 权限。公开仓库里的 sources/Download 文件任何人都能看到;普通删除只改变当前分支,不会清除旧 Git 提交中的历史副本。
构建完成后,怎么删除整个项目源码
如果项目以后完全不用了,项目管理可以一键清理所选项目的全部源码,并删除集中存放成品的 sources/Download 文件夹。由于所有项目成品都按你的设置放在同一个 Download 中,这一步会清空其中全部成品,但不会删除其他源码项目。
- 在右侧“项目源码管理”点“读取项目”。
先确认仓库、分支和 Token 正确。网页只列出
sources/下面的源码项目;专用的Download文件夹会被排除,不会误显示成项目。 - 从下拉框选择项目。
认真核对完整路径,例如
sources/HailuoiOS。如果项目刚被更新,先重新读取,避免按旧版本执行。 - 点“删除这个项目”,再看确认框。
只有点“确认删除全部”才会在一次提交中删除所选项目的全部上传代码,以及
sources/Download中全部 IPA、DEB、DYLIB;取消或按 Escape 不会改动仓库。分支在确认期间发生变化时,系统会停止,避免覆盖最新修改。 - 删除完成后看提交链接。
所选
sources/项目名与存在的sources/Download会一起从当前分支消失。其他源码项目、构建记录与日志仍保留。Git 是版本历史:普通删除仍可从旧提交恢复;如果内容曾位于公开仓库,删除当前目录不会抹掉公开历史。
没有这项权限会收到 403。删除整个项目会生成一次普通 Git 提交,不强制覆盖分支;网络中断或提示结果无法确认时,先查看提交记录并重新读取项目,不要连续重复点击。
Actions 记录太多?批量删除怎么用
“任务记录”包含编译、网页发布和环境检查等 Actions 任务;“产物”是仓库 sources/Download 中的真实文件。任务可能没有产物,但仍有一条记录;二者需要按目的分别清理。
- 确认仓库、分支和 Token,点击“刷新全部记录”。
一次读取最多 100 条当前分支的 Actions 记录,包括 IPA / 插件编译、GitHub Pages 网页发布和环境检查。想处理更早的记录,点“再加载 100 条记录”。
- 勾选要清理的任务。
可以逐条勾选;点“只选失败 / 取消”会选中已加载的失败、取消、超时等未成功记录。想连成功记录一起清理,可勾选“全选已加载的已结束记录”。“全选”不包含尚未加载的记录,也不跨仓库或分支。排队和运行中的记录不能勾选。
- 点击“删除所选(数量)”,先核对清单。
确认框会显示仓库、分支、数量、成功记录数量,以及每条任务所属工作流、编号和名称。删除后对应 Actions 日志无法恢复,请先复制要排查的报错。这一步不会删除 sources/Download 真实产物、项目源码或已经发布的网页。
- 确认永久删除,保持网页打开。
系统逐条核对工作流、分支、提交、状态和运行次数,再删除。任务被重新运行或状态发生变化时会跳过;网络或权限出错会停止后续删除,并告诉你已经确认删除多少条。
- 看结果,再点“刷新全部记录”。
要删除产物,请点产物旁的“删除”;要连源码和全部集中成品一起删,请用“项目源码管理”。网络中断时最后一条记录可能已经删除,先刷新核对,不要直接重复操作。
自动清理和邮件通知怎么用?
“自动清理”是独立的仓库功能,不要求先上传源码、选择项目或开始编译。填好目标仓库与有效 Token 后保存一次即可;设置写入自己的仓库,关闭网页后 GitHub 仍会继续工作。刷新页面时,公开仓库会自动读取真实配置;私有仓库会先按仓库和分支恢复本机上次成功保存的显示状态,再在检查仓库后以仓库中的配置为准。Token 只用于这次写入,不会保存在页面里。
清理规则启用后采用按需定时器:有待管理构建时每 10 分钟检查一次;最后一个构建及其源码、成品和记录处理完后,GitHub 定时清理工作流会自动停用,不再继续产生空检查。下一次上传或构建登记后会自动重新启用并检查。失败或取消的编译任务可在通知后立即清理;成功任务按你保存的数值和单位保留,页面上的文字会同步显示当前真实时间。成功保留时间可以选立即、分钟、小时或天,也可以关闭失败清理或完全停用后台清理。
要确认后台是否真的运行,请在工作台右侧“运行日志”的任务下拉框选择“清理记录”。页面会分开列出“今日后台检查”和“今日实际清理”:每次检查、结束和实际删除都按北京时间显示到秒;实际清理还会列出删除的 Actions 任务编号、源码和成品路径。这里只显示当天记录,进入第二天后前一天的记录会自动清除。
自动清理只处理 iOSForge 编译任务。到期后会删除对应的 Actions 记录与日志、该次上传且之后未被修改的源码,以及仍与该次构建版本一致的 sources/Download 成品;文件被后续任务更新或仍被未到期任务使用时不会误删。删完最后一个成品后,空的 Download 文件夹会自动消失。
“通过 GitHub 通知”是全局开关;上传设置中的“构建完成后发送邮件通知”控制本次任务。两处都开启时,成功或失败会写入仓库的 iOSForge 构建通知 Issue,并 @提及仓库所有者,内容包含项目名、构建类型、结果、产物和任务链接。还需在 GitHub Settings → Notifications 中启用 Email,邮件由 GitHub 官方通知系统发送。
定时任务由 GitHub 调度,“每 10 分钟”是检查计划,不保证精确到秒。注意仓库容量:每个产物限制在 95 MiB 以内;需要长期保留的成品请先下载。
如果你要编译的是 IPA
IPA 是 iOS 应用的安装包。它需要一个可编译的 Xcode 应用工程。插件源码不能仅靠切换选项变成应用。
- 上传完整 Xcode 项目。
保留
.xcodeproj或.xcworkspace目录、应用代码、资源和项目依赖文件。它们在文件系统里是目录,不要解散里面的文件。若原项目使用 workspace,就填写 workspace 路径。 - 确认 Scheme 已共享。
Scheme 是 Xcode 中的一套构建方案。在 Xcode 的 Product → Scheme → Manage Schemes 中查看名称并勾选 Shared,再把对应修改提交。拿到别人的源码时,先确认对方提供的 Scheme 名字。
- 单个应用工程可以跳过手动配置。
系统会识别唯一的 Xcode 工程和共享应用 Scheme。只有多个工程、多个方案或想固定选择时,才填写下面的配置,把示例名字换成真实名称。已有 [project] 或 [app] 时修改原段落,不要重复添加。
[project]
name = "MyApp"
kind = "app"
minimum_ios = "15.0"
[app]
project = "MyApp.xcodeproj"
scheme = "MyApp"
configuration = "Release"- 选择编译模式:巨魔或后续自签,保持默认“无证书编译”。
这个模式不需要 Apple 开发者证书、不需要 Provisioning Profile(描述文件),也不需要
ExportOptions.plist。云端关闭 Xcode 的代码签名,将编译出的应用放进Payload文件夹,再打包成MyApp-unsigned.ipa。文件名中的 unsigned 表示“未签名”,不是编译失败。 - 上传到 main 后,先在 Actions 查看自动构建。
默认就会生成无证书 IPA。要从网页重新运行时,选择 .ipa,工程路径和 Scheme 可留空自动识别,再填写 GitHub Token 后开始。Token 是网页触发任务的凭证,与 Apple 证书是两回事。
| 输入框 | 示例 | 怎么确认 |
|---|---|---|
| Xcode 工程路径 | 单工程留空 | 多工程才填写真实路径,例如 app/MyApp.xcodeproj;存在对应 workspace 时优先使用它。 |
| Scheme | 唯一应用方案留空 | 多个方案才填写真实的共享 Scheme 名称,不是随便起的名字。 |
| IPA 编译模式 | 无证书编译 | 巨魔或后续自签选这一项;在 GitHub 的 Run workflow 中对应 ipa_signing = unsigned。 |
| 导出配置文件 | 无证书模式不需要 | 仅切换到“证书导出”时才显示,需要填写真实的 ExportOptions.plist 路径。 |
完成这些准备后,再点击“开始构建”。应用归档会使用项目配置里的最低系统版本,默认 iOS 15.0。源码或第三方依赖使用了更高系统才有的能力时,仍需在代码中处理兼容性。
哪些环境已经自动处理?
云端提供 macOS、Xcode、iPhoneOS SDK、Python、Ruby 与 CocoaPods。发现 Podfile 时自动安装 Pods;存在 Podfile.lock 时保持锁定版本,有 Gemfile 时使用项目的 Bundler 环境。Swift Package 由 Xcode 解析。Git 子模块与 Git LFS 文件也会拉取。
这里预配的是原生 Xcode 与 Theos 工程。Flutter、React Native、Carthage、私有依赖、特殊编译器版本或自定义生成流程,需要原项目的额外准备步骤;可在 [build].prepare_script 指定仓库内的脚本。不要把不认识的脚本或账号密钥提交到公开仓库。
下载后怎么安装?按你的设备选一条路
- 直接下载真实 IPA。
网页显示并下载实际文件名,例如
MyApp-unsigned.ipa,不再套 ZIP。把这个 IPA 传到手机即可;不要解压 IPA,也不要修改它的后缀。 - 已经安装巨魔(TrollStore)的用户。
在手机上使用“共享 → TrollStore”打开 IPA,或者进入 TrollStore,点击添加按钮选择该文件,再确认安装。具体入口以你安装的版本为准。请只安装自己拥有或获授权的应用。
- 准备自己签名的用户。
把这个 IPA 导入你使用的签名工具,按该工具要求提供自己的 Apple 账号或签名证书与描述文件,完成签名后再安装。自签仍受账号权限、设备授权和有效期限制;编译无证书不等于安装也无需签名。
巨魔对系统版本、设备和安装方法有自己的要求,请以 TrollStore 官方说明 ↗为准。本工具不会安装巨魔、绕过设备的安装限制,也不保证任意 IPA 都能运行。
依赖特殊 entitlements(应用权限声明)的项目,需要按原项目要求单独处理。无证书打包不会自动把 Xcode 的权限文件写进可执行文件,也不会替你添加私有权限;后续签名工具能授予的权限同样有限。
什么时候才选择“证书导出”?
只有你希望云端直接导出带 Apple 签名的 IPA,并已准备好匹配应用、团队和分发方式的证书、描述文件与导出配置时,才切换到这一项(GitHub 参数为 signed)。当前通用流程不会自动创建或导入证书;需要按你的项目补充依赖安装、证书导入和描述文件安装步骤。证书凭证保存在仓库 Settings → Secrets and variables → Actions,不要上传到公开源码中。具体配置见 GitHub 的 Apple 签名指南 ↗。
完成标志:你已拿到未签名 IPA,并知道自己接下来用巨魔安装,还是交给签名工具处理。设备运行效果还需实际验证。
遇到问题,先看这里
找不到 Run workflow,或者看不到上传按钮
先看 GitHub 页面右上角。如果显示 Sign in,请登录拥有仓库权限的账号。再确认自己打开的是编译流程,而不是单个历史运行页。访问公开仓库不等于已经登录。
401:访问令牌无效或过期
去 GitHub 查看令牌是否过期或被删除。重新复制有效令牌,清空工作台里的旧内容再粘贴。不要填写账号密码,也不要多带空格或换行。
403:没有权限,或请求额度用完
检查令牌是否选中了你自己的构建仓库,Actions 是否为 Read and write;网页上传还需要 Contents 的 Read and write。组织仓库还可能需要管理员批准。如果 GitHub 提示 API 请求额度耗尽,等额度恢复后再试。
404:找不到仓库或工作流
确认填写的是你自己的“用户名/仓库名”,所选分支中存在 .github/workflows/build.yml。不要填写工具作者的仓库,也不要把未解压的初始化 ZIP 当成已安装的工作流。私有仓库授权不正确时也可能返回 404。请检查令牌授权的账号和仓库。
提示找不到 Theos 工程,或发现多个 Makefile
检查上传的是解压后的完整工程,Makefile 包含 Theos 编译配置。单工程可自动识别;多个工程时,在网页填写具体源码目录,或在 iosforge.toml 的 [theos].project_dir 中指定(只在未选源码目录时使用)。带 # 的行不会生效。网页上传会解压 ZIP;直接提交到仓库的 ZIP 不会自动解压。
提示找不到头文件、库,或出现 clang / linker 错误
打开运行日志,找到第一个实际编译错误。它通常表示项目依赖缺失、代码不兼容或目标架构不匹配。保留出错文件名和前后几行信息,结合原项目的依赖说明处理。切换网页主题或重新填写 Token 不会修复源码错误。
IPA 提示 No signing certificate / No profiles
如果你要给巨魔或自签工具使用,确认选择了“无证书编译”,GitHub 参数为 ipa_signing = unsigned;不需要填写导出配置。如果仍出现签名错误,检查项目自定义脚本是否额外调用 codesign 或签名服务。若选择的是“证书导出”,则需要检查证书、描述文件、团队和 Bundle ID 是否匹配,并确保在本次云端环境中导入。仅上传 ExportOptions.plist 不会安装证书。
拿到 unsigned.ipa 后,为什么点一下不能直接安装?
unsigned 表示没有 Apple 签名,不是万能免签安装包。兼容且已经安装巨魔的设备可交给 TrollStore 处理;其他用户需要先在自己的签名工具里签名。特殊权限、应用扩展、系统版本与依赖也可能影响安装或启动,详见第七节。
已经成功了,为什么没有文件?
确认运行的是 GitHub Actions 编译流程。没有配置插件源码时,自动推送触发的检查可能成功跳过编译,所以没有产物;Publish iOSForge Web 的成功也不表示插件编译成功。手动选择正确产物后再运行,并查看该次日志。
修改源码后,为什么没有自动编译?
确认源码提交到了 main,而且 Actions 已启用。仅修改网页、说明文档、现成 IPA/deb/dylib 不会触发原生编译。网页上传会跳过推送自动构建,再明确启动所选类型,避免重复编译。若上传后启动失败,可在工作台刷新记录确认后重试。通过 Git 客户端上传后在 Actions 找 GitHub Actions;没有可识别工程时只会完成检查,不会产生文件。多个工程或方案会明确报出选择要求。
怎么检查云端环境本身?
打开仓库 Actions → Check build environment → Run workflow。它会在临时云端目录真实编译一个原生应用与插件,检查无证书 IPA、CocoaPods、Swift Package、arm64/arm64e dylib 和 rootless deb;结束后删除临时探针。它不会往仓库添加示例工程,也不代表你的源码已经验证通过。
页面一直排队、显示刷新中断,或者下载按钮没反应
先刷新全部任务记录并选择对应的编译任务,确认是否仍在运行;也可点 GitHub 日志链接。排队取决于 GitHub 的可用环境;刷新中断可能是网络问题。不要连续提交同一分支的新任务。下载会直接打开仓库 sources/Download 中的真实文件:如果没有开始,查看浏览器是否拦截新标签页,并确认 GitHub 已登录正确账号;也可在仓库里进入对应文件手动下载。
下次使用,留在这一个网页就好
- 粘贴有效 Token,核对仓库与分支。
令牌不保存在网页,关闭页面后需要重新填写。
- 新项目选“上传本地源码”;旧项目选“使用仓库源码”。
旧项目填上
sources/你的项目名称。更新同一个项目可以再次上传并确认更新同名文件;想要干净版本时换一个新目录。 - 选择产物并开始编译。
IPA 默认无证书。用“任务记录”回看全部 Actions 状态,成品会按真实文件名直接进入
sources/Download/。 - 下载留存,再选择清理范围。
删产物只删一个真实文件;删任务记录只删 Actions 记录与日志;“删除这个项目”会删除所选项目全部源码,并清空共享的
sources/Download成品目录。
你也可以把完整源码交给协作助手协助整理和配置。原生工程以外的特殊依赖,仍应按照项目自己的说明准备;网页不会把缺失的工程文件凭空补齐。
我准备好了,去编译工作台第三方解压组件:fflate 0.8.2(MIT),已随网站提供,不从第三方 CDN 加载。