GitHub

IOSFORGE / FIELD GUIDE

使用指南.

从准备源码到下载产物,一步一步完成你的第一次构建。

返回工作台
START HERE

先了解:这个网页帮你做什么?

你可以直接在工作台选择源码 ZIP 或工程文件夹,上传后自动编译,完成后下载或删除云端产物,全程在同一个网页操作。源码会保存到你指定的 GitHub 仓库。GitHub 会启动一台云端 Mac,按照项目的编译规则,把源码变成可以下载的产物。你使用 Windows 电脑也可以操作。

一条完整的操作路径:先建立自己的私有仓库 → 准备 Token → 选择产物 → 上传本地源码 → 上传并编译 → 下载 → 按需删除。原生单工程通常无需修改配置或填写 Scheme;IPA 默认无证书。

第一次使用,先确认自己有没有源码。

源码是包含代码和编译配置的完整工程。只有一个现成的 IPA、dylib 或 deb,不是源码;更改文件后缀也不能把它变成另一种格式。网页会在浏览器中解压源码 ZIP、检查文件,再提交到仓库;不会把现成安装包转换成源码。

三个选项,应该点哪个?

三种格式对应不同工程类型;选择一种格式不会自动改写你的源码。插件能否在设备上使用还取决于插件加载环境、设备架构和源码兼容性。IPA 可以无证书编译,但安装时仍需要兼容的巨魔环境或后续签名。

第一次使用 · 先建立你自己的私有构建仓库

这个网页是操作面板,不是所有人共用的源码仓库。你的文件、编译任务、日志和产物都放在你自己的 GitHub 仓库。网页不再预填作者账号,上传前会用 Token 核对仓库是否确实属于你。

  1. 下载纯净的编译环境初始化包。

    下载纯净初始化包 ZIP ↓

    只包含 iOSForge 编译工具、工作流和配置,不含网站作者或其他用户的项目源码、历史记录、Token、证书或示例产物。把它解压到电脑上的新文件夹;不要直接 Fork 作者的整个项目来获取私密环境。

  2. 登录自己的账号,新建 Private 仓库。

    打开预填的私有仓库创建页面 ↗。Owner(所属账号)确认是你自己;Repository name 可填 iOSForge-Builds;可见性确认选中 Private(私有)。可勾选添加 README,然后点 Create repository。预填不等于已经创建,仍需你核对确认;不要选 Public,公开仓库属于自己也仍会公开源码。

  3. 把解压后的环境文件放到这个新仓库最外层。

    在新仓库点 Add file → Upload files,上传初始化包内的全部文件和目录,再点 Commit changes 保存。不要多套一层文件夹。也可用 GitHub Desktop 提交;工作流文件必须包含在提交中。

    最外层应同时看到 .github/、iosforge/、iosforge.toml 和 pyproject.toml。特别注意别漏掉以点开头的 .github 文件夹;Mac 可按 Command + Shift + . 显示隐藏项。不要把 ZIP 文件本身直接传进仓库。

  4. 确认编译工作流已经出现。

    打开自己仓库的 Actions。应能看到 GitHub Actions(编译)和 Check build environment(环境检查);如果提示启用工作流,阅读后确认启用。没有时,检查 .github/workflows/build.yml 是否位于仓库根路径。这个私有构建仓库不需要开启 Pages。

  5. 创建只授权这个仓库的 Token。

    继续看获取 Token 教程:Resource owner 选自己的账号,Repository access 仅选刚创建的仓库,Actions 和 Contents 都设为 Read and write。不要授权所有仓库,也不需要额外账号权限。

  6. 回工作台,填写真实地址并检查。

    仓库栏填 你的用户名/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。
STEP 01

直接在网页上传自己的源码

不用先去 GitHub 手动传文件。首次使用请先按第四节准备 Token;这个授权让工作台能替你向自己的仓库提交源码和启动编译。

  1. 准备完整工程,不要只选一段代码。

    插件应包含 Makefile、代码,以及原工程需要的 control、plist 和资源。应用应包含 .xcodeproj 或 .xcworkspace、源码、共享 Scheme 和依赖配置。可以选择普通 ZIP;电脑端也可选择整个文件夹。手机不支持文件夹选择时,请选 ZIP。

  2. 在工作台选择产物,再点“上传本地源码”。

    插件选 .dylib 或 .deb,应用选 .ipa。仓库填写你自己的 你的用户名/iOSForge-Builds(把“你的用户名”替换成真实账号)。新建仓库通常使用 main 分支,以你仓库实际分支名为准。粘贴 Token 后先点“检查我的仓库”,确认归属、可见性和编译工作流。

  3. 点击“选择 ZIP”或“选择文件夹”。

    也可把一个源码 ZIP 拖进上传框。此时文件只在浏览器中检查,尚未上传。检查完成后,会显示文件数量、总大小和前 100 个文件的预览。系统会去掉 ZIP 最外层共同的包装目录,保留工程内部结构。

  4. 填写项目文件夹名称,核对提交位置。

    例如填 MyPlugin,文件会放到 sources/MyPlugin/。不同项目用不同名称,以便单独编译。上传只会修改该目录,不会覆盖工作台本身。

  5. 检查源码公开范围,再勾选确认。

    看“检查我的仓库”的结果:Private 表示私有;Public 表示公开。私密源码请使用自己的私有仓库。任何仓库都不要提交账号密码或密钥。勾选后,当前浏览器会只为这个仓库记住确认,刷新或再次选择源码时自动恢复;换仓库不会沿用,也可随时点“取消记住”。Token 和源码文件不会被保存在浏览器中。

  6. 粘贴 Token,点击“上传并编译”。

    上传有进度提示,请保持网页打开。文件会作为一次完整提交保存;保存成功后自动启动你选择的编译类型,不会同时多跑一份自动构建。源码目录会自动填好,下次直接点“开始构建”即可重编。

更新以前上传的项目

使用相同项目名称,并勾选“允许更新本次同名文件”。未上传的旧文件不会被删除。如果你删除或改名了许多文件,建议换一个新项目名称,避免旧文件继续参与编译。没有勾选时,已存在的目录会被拦截,不会悄悄覆盖。

上传限制与特殊工程

项目当前限制
源码 ZIP25 MB 以内;不支持加密、分卷和 ZIP64。
实际源码解压后 / 文件夹总计不超过 50 MB、1000 个文件,单个文件不超过 10 MB。
二进制和大文件一次最多更新 150 个需要单独上传的二进制或大文件;上传会适度放慢,减少 GitHub 限流。
不适合网页上传包含符号链接、Git 子模块或 Git LFS 的复杂工程,请使用 Git 客户端,保留原始结构。网页会拒绝 ZIP 符号链接与 LFS 指针。

超出限制可用 GitHub Desktop 上传完整源码。随后回到工作台,选“使用仓库源码”,把源码目录填写为该工程所在文件夹,照常编译;不要把未经解压的 ZIP 直接放进仓库。

完成标志:看到“源码已保存”和提交链接,右侧出现排队或编译状态。如果保存成功但编译未启动,先刷新任务记录确认没有重复编译,再点击开始构建;不必重新上传。

STEP 02 · DYLIB / DEB

确认插件配置,需要时再调整

所选源码目录中的单个 Theos 工程会自动识别,默认使用 iOS 15.0、arm64 + arm64e、rootless。首次上传可以不改配置。多个工程、只支持单一架构或需要固定路径时,再按下面的步骤调整。网页指定源码目录后,工程会只在该目录内搜索,根配置里的固定 project_dir / app.project / app.scheme 不用于此次自动选择;最低系统、架构和包布局仍使用根配置。IPA 用户可直接看应用工程说明。

  1. 在仓库根目录打开 iosforge.toml。

    “根目录”就是打开仓库后最外面那层,与 README.md 同一层。点击文件右上角的铅笔按钮进入编辑。

  2. 更新已有的项目配置。

    下面是工程放在 plugin 文件夹时的配置。修改已有的 [project] 和 [theos],不要在文件末尾重复添加同名区块。项目名可以改,路径要与文件夹一致。

iosforge.toml · 插件配置
[project]
name = "MyPlugin"
kind = "tweak"
minimum_ios = "15.0"

[theos]
project_dir = "plugin"
archs = ["arm64", "arm64e"]
package_scheme = "rootless"

原文件里如果写的是 # project_dir = "plugin",请去掉开头的 #。带 # 的行只是说明文字,不会生效。路径区分大小写,Plugin 和 plugin 要写一致。

  1. 确认源码支持这些目标。

    编译工具会把最低系统、架构和 rootless 设置传给 Theos。默认等价于下方的系统目标;不必为了使用本工具重复修改 Makefile。如果依赖只支持 arm64,在上方配置中把 archs 改为 ["arm64"]。

Makefile · iOS 15 目标
TARGET = iphone:clang:latest:15.0

rootless 是插件的安装布局,默认路径带 /var/jb;不等于“所有 iOS 15+ 设备都可直接安装”。已有项目仍需检查依赖和资源路径是否兼容 rootless。如果你明确使用传统 rootful 环境,可将 package_scheme 改为 "rootful"。

  1. 点击 Commit changes 保存修改。

    配置里的 project_dir 应当指向包含 Makefile 的目录。例如 Makefile 在 sources/MyPlugin/Makefile,就填写 project_dir = "sources/MyPlugin"。

完成标志:工程路径已经填写并保存,路径下确实有 Makefile。dylib 和 deb 共用这套源码配置。

STEP 03

获取 GitHub Token,跟着点就能完成

Token(访问令牌)相当于你交给工作台的一把“限范围钥匙”:允许它上传源码、启动编译、下载和删除产物。它不是登录密码,也不是 Apple 签名证书。下面的英文就是 GitHub 按钮或选项的名字,找到同名位置再操作。

最容易漏掉:Actions 和 Contents 都要开“读写”。

它们都在 Repository permissions(仓库权限)里。Actions 管编译和产物,Contents 管源码上传。User / Account permissions(用户 / 账号权限)里的邮箱、Copilot、个人资料等,本工具都不需要。

路线 A · 从零创建一个 Token

适用于你自己的 GitHub 账号和个人构建仓库。先完成建立自己的仓库;下文的“你的用户名”都要替换成你的真实账号,不能照字面填写,也不要填写网站作者的账号。

打开预填创建页面 ↗

会打开 GitHub 官方新标签页,预填名称、30 天有效期和两项权限。Resource owner 默认由 GitHub 使用当前登录账号,请自行核对。这不是自动授权:仍需你选择仓库、核对后确认生成。登录后如果没有保留预填内容,按以下步骤手动填即可。

  1. 确认页面和登录账号。

    地址应以 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。

  2. 填上面几项基本信息。
    Token name · 名称
    填写 iOSForge。这只是方便你认出用途,不是令牌本身。
    Expiration · 有效期
    选 30 days(30 天)或更短期限。到期需要更新,不建议选永不过期。
    Description · 备注
    可留空,或填写“iOSForge 网页上传与编译”。
    Resource owner · 资源所属账号
    选择 你自己的 GitHub 用户名。如果找不到,先检查是否登录错账号。
  3. 只选择你自己的构建仓库。

    找到 Repository access(仓库访问范围),点 Only select repositories(只选择指定仓库)。再打开下方 Select repositories / Selected repositories,搜索你建立的仓库名,例如 iOSForge-Builds,并勾选它。关掉下拉框后,应看到 你的用户名/iOSForge-Builds。

    不要选择 All repositories(所有仓库);只选 Public repositories(公开仓库只读)也不能完成上传。

  4. 添加 Actions,并改为“读写”。

    向下找到 Permissions → Repository permissions。如果有 Add permissions 按钮,点开、搜索 Actions 并选中;如果是可展开的权限列表,直接找到 Actions。然后把它右侧的 Access 下拉框改成 Read and write(读取和写入)。

    预填后已有 Actions,就直接核对右侧权限。不要停在 Read-only / Read(只读)。

  5. 再添加 Contents,也改为“读写”。

    仍在同一个 Repository permissions 区域,再次点 Add permissions,搜索 Contents 并选中;旧版列表直接找到 Contents。把 Access 也改成 Read and write。不要把它和 User permissions 里的其他选项混淆。

    这一步不要跳过:只开 Actions,可能能启动已有源码的编译,却不能从网页上传源码。Metadata(基础信息)自动出现只读时保持默认。Administration、Workflows、Secrets 等不需要额外开启。

  6. 先核对下面的清单,再确认生成。

    仓库范围和权限全部一致后,点击页面底部 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 等权限。

最后一步 · 复制回来,粘贴到哪里?

  1. 复制 GitHub 刚生成的那一长串字符。

    点击令牌旁的复制图标。完整值通常只在创建时展示一次,建议保存在你自己的密码管理器里。不要复制 Token 名称“iOSForge”,也不要复制网页地址。

  2. 回到原来的编译工作台标签页。

    找到 GitHub Token 输入框,点进去粘贴,然后点“检查我的仓库”。确认提示的账号是你本人、仓库名正确;私密源码还要确认显示 Private 私有仓库。电脑可按 Ctrl + V;手机长按输入框后点“粘贴”。显示成圆点是正常的,不必点眼睛按钮。当前正在选择源码时,直接切回原标签页,不要刷新丢掉已选文件。

  3. 按你的源码来源继续。

    第一次上传:选 ZIP / 文件夹,核对提交位置并勾选确认后,点“上传并编译”。已上传过:选“使用仓库源码”,填写实际源码目录,再点“开始构建”。出现运行编号和排队状态,才表示任务已经提交。

不用每次都创建新 Token。未到期且权限正确时,可以重复使用原来的值。但工作台不保存令牌,关闭或刷新后需要重新粘贴;GitHub 已登录也不会自动填入。

路线 B · 已有 Token,补权限就行

适用于“GitHub 拒绝请求 / 403”或上传失败。先检查配置,不要一上来删除令牌,也不要反复提交同一次构建。

  1. 打开列表,点你之前创建的 Token 名称。

    打开我的 Fine-grained tokens ↗,找到 iOSForge 后点名称。这个详情页用来改权限,不会重新显示已隐藏的完整令牌。

  2. 点“Access on 你的用户名”同一行右侧的 Edit。

    页面有多个 Edit 时,找仓库授权区域旁边的 Edit(编辑),不是只修改顶部名称的按钮。不要点 Delete(删除)或 Regenerate token(重新生成)。如果界面改成单独的 Permissions → Edit,就进入这个权限编辑入口。

  3. 核对仓库,再补齐两项仓库权限。

    仓库必须包含 你的用户名/iOSForge-Builds。进入 Repository permissions,确认 Actions → Read and write,再添加 Contents → Read and write,具体点法见上面的步骤 4、5。若只有 metadata 和 actions,那就仍然缺 Contents。

    如果这个 Token 专门给 iOSForge 使用,可移除误开的用户权限;如果还用于别的工具,先确认用途,或单独为 iOSForge 创建一个限范围 Token,避免影响其他工具。

  4. 点击页面底部的保存 / 更新按钮。

    按钮可能显示 Save 或 Update permissions;看到 GitHub 要求确认时完成确认。回到详情页,按上方 4 项清单检查保存结果。仅修改权限不需要重新生成令牌,原来那串值可继续使用。

  5. 回到工作台,确认粘贴的是这个 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 权限 ↗

STEP 04

开始构建,等待云端完成

  1. 选择想要的产物。

    .dylib 和 .deb 使用 Theos 插件工程;.ipa 使用 Xcode 应用。IPA 保持“无证书编译”即可;没有 Apple 证书不用填导出配置。

  2. 确认源码来源。

    首次上传按第二节操作。已上传过的项目选“使用仓库源码”,源码目录填写 sources/MyPlugin 等实际路径。留空会搜索整个仓库;多个项目时务必填写,避免无法唯一选择。

  3. 确认仓库、分支、Token,点击主按钮。

    本地源码模式是“上传并编译”;仓库模式是“开始构建”。开始后输入暂时锁定,避免请求过程中换错仓库。不要重复点击或在另一窗口同时提交同一个项目。

  4. 看右侧“构建动态”。

    排队中:等待 GitHub 提供云端电脑。编译中:正在安装依赖和编译。已完成:下方出现可下载产物。首次需要准备环境和依赖,通常比后续慢,实际时间取决于工程。

  5. 离开后回来,点“刷新全部记录”。

    重新填写 Token,确认同一仓库和分支,点击“任务记录 → 刷新全部记录”。编译工作流可点“查看产物”;网页发布和环境检查可点“打开记录”。正在运行的任务会继续显示;关闭网页不会取消已提交的云端任务。

失败不等于源码丢了。

上传和编译是两个阶段。出现“源码已保存,编译未能启动”时,先刷新记录排除重复任务,再重试构建。出现源码编译错误时,先看工作台的“运行日志”;工具不会自动修复任意项目的代码。

运行日志与“复制给 AI”怎么用?

  1. 构建时看右侧“运行日志”。

    页面约每 15 秒读取步骤状态,显示当前执行到哪里。GitHub 的编译原文按接口可用情况读取,运行中可能尚未开放;这不是逐行日志直播,也不会用模拟文字冒充实际输出。

  2. 失败时先点“只看错误”。

    它会显示失败步骤、匹配到的报错和附近上下文。任务下拉框可以选择某个具体任务;点“刷新日志”可重新读取 GitHub 当前提供的内容。没有匹配到错误不代表没有错误,请结合原始日志判断。

  3. 点击“复制给 AI”,再粘贴到对话里。

    复制内容会包含仓库、分支、提交、任务编号、已知构建参数以及当前显示的日志片段。把出错的源码文件一起交给 AI,要求先找根因再修改。复制前检查内容是否含私密代码;常见 Token / 私钥遮盖只是辅助,不是完整的敏感信息保护。

  4. 用完清空,不自动留下副本。

    成功后日志自动清空;失败时只在当前页内存暂留,刷新、关闭页面或切换仓库后清空。点“清空并暂停”会立刻清空并停止读取,直到你手动刷新日志。网页不保存日志到浏览器存储、下载文件或源码仓库;你主动复制到剪贴板的内容由你自行保管。

GitHub Actions 的原始日志仍按 GitHub 自己的规则保留,不属于网页缓存。重新选择失败任务会重新请求 GitHub,而不是恢复本地历史日志。接口尚未开放、日志太大或浏览器阻止跨域读取时,可使用 GitHub 原始日志链接。读取方式见 GitHub 官方任务日志接口 ↗。

STEP 05

下载、回看与删除构建产物

  1. 等到右侧显示构建完成。

    在“构建产物”里找到需要的文件。也可刷新全部任务记录,再在编译工作流旁点“查看产物”,找回当前集中保存的成品。

  2. 点击“下载 IPA / DEB / DYLIB”。

    网页直接打开仓库 sources/Download 中的真实文件,不再下载外层 ZIP,也不用解压。若新标签页提示登录,请先登录拥有该仓库权限的 GitHub 账号,再回工作台点一次。

  3. 检查并保存到自己的电脑或手机。

    真实文件会一直保存在当前分支,直到你主动删除。它会占用仓库体积,单个文件必须小于 95 MiB。文件是否能安装或运行,还取决于设备系统、依赖和加载/签名环境;IPA 安装见下一节。

  4. 不再需要仓库副本时,点该文件旁的“删除”。

    先核对确认框中的真实文件名、仓库和运行 ID。点“保留文件”或按 Escape 可取消;只有点“确认永久删除”才会从 sources/Download 删除这一个文件。

  5. 删除后核对提示。

    选中的文件消失,源码、构建记录和已下载文件都保留;其他成品不受影响。Git 不保存空目录:删掉最后一个成品后,空的 sources/Download 文件夹会自动消失。

删除没有回收站。

请先下载需要保留的文件。删除后不能恢复原来的下载,只能重新编译生成新产物。网络中断或提示无法确认结果时,请刷新记录并重新打开该任务,核对列表,不要连续重复删除。

文件旁的“删除”只删除仓库中的该文件,不删除整条记录。需要 Contents → Read and write 权限。公开仓库里的 sources/Download 文件任何人都能看到;普通删除只改变当前分支,不会清除旧 Git 提交中的历史副本。

构建完成后,怎么删除整个项目源码

如果项目以后完全不用了,项目管理可以一键清理所选项目的全部源码,并删除集中存放成品的 sources/Download 文件夹。由于所有项目成品都按你的设置放在同一个 Download 中,这一步会清空其中全部成品,但不会删除其他源码项目。

  1. 在右侧“项目源码管理”点“读取项目”。

    先确认仓库、分支和 Token 正确。网页只列出 sources/ 下面的源码项目;专用的 Download 文件夹会被排除,不会误显示成项目。

  2. 从下拉框选择项目。

    认真核对完整路径,例如 sources/HailuoiOS。如果项目刚被更新,先重新读取,避免按旧版本执行。

  3. 点“删除这个项目”,再看确认框。

    只有点“确认删除全部”才会在一次提交中删除所选项目的全部上传代码,以及 sources/Download 中全部 IPA、DEB、DYLIB;取消或按 Escape 不会改动仓库。分支在确认期间发生变化时,系统会停止,避免覆盖最新修改。

  4. 删除完成后看提交链接。

    所选 sources/项目名 与存在的 sources/Download 会一起从当前分支消失。其他源码项目、构建记录与日志仍保留。Git 是版本历史:普通删除仍可从旧提交恢复;如果内容曾位于公开仓库,删除当前目录不会抹掉公开历史。

项目删除需要 Contents → Read and write。

没有这项权限会收到 403。删除整个项目会生成一次普通 Git 提交,不强制覆盖分支;网络中断或提示结果无法确认时,先查看提交记录并重新读取项目,不要连续重复点击。

Actions 记录太多?批量删除怎么用

“任务记录”包含编译、网页发布和环境检查等 Actions 任务;“产物”是仓库 sources/Download 中的真实文件。任务可能没有产物,但仍有一条记录;二者需要按目的分别清理。

  1. 确认仓库、分支和 Token,点击“刷新全部记录”。

    一次读取最多 100 条当前分支的 Actions 记录,包括 IPA / 插件编译、GitHub Pages 网页发布和环境检查。想处理更早的记录,点“再加载 100 条记录”。

  2. 勾选要清理的任务。

    可以逐条勾选;点“只选失败 / 取消”会选中已加载的失败、取消、超时等未成功记录。想连成功记录一起清理,可勾选“全选已加载的已结束记录”。“全选”不包含尚未加载的记录,也不跨仓库或分支。排队和运行中的记录不能勾选。

  3. 点击“删除所选(数量)”,先核对清单。

    确认框会显示仓库、分支、数量、成功记录数量,以及每条任务所属工作流、编号和名称。删除后对应 Actions 日志无法恢复,请先复制要排查的报错。这一步不会删除 sources/Download 真实产物、项目源码或已经发布的网页。

  4. 确认永久删除,保持网页打开。

    系统逐条核对工作流、分支、提交、状态和运行次数,再删除。任务被重新运行或状态发生变化时会跳过;网络或权限出错会停止后续删除,并告诉你已经确认删除多少条。

  5. 看结果,再点“刷新全部记录”。

    要删除产物,请点产物旁的“删除”;要连源码和全部集中成品一起删,请用“项目源码管理”。网络中断时最后一条记录可能已经删除,先刷新核对,不要直接重复操作。

自动清理和邮件通知怎么用?

“自动清理”是独立的仓库功能,不要求先上传源码、选择项目或开始编译。填好目标仓库与有效 Token 后保存一次即可;设置写入自己的仓库,关闭网页后 GitHub 仍会继续工作。刷新页面时,公开仓库会自动读取真实配置;私有仓库会先按仓库和分支恢复本机上次成功保存的显示状态,再在检查仓库后以仓库中的配置为准。Token 只用于这次写入,不会保存在页面里。

清理规则启用后采用按需定时器:有待管理构建时每 10 分钟检查一次;最后一个构建及其源码、成品和记录处理完后,GitHub 定时清理工作流会自动停用,不再继续产生空检查。下一次上传或构建登记后会自动重新启用并检查。失败或取消的编译任务可在通知后立即清理;成功任务按你保存的数值和单位保留,页面上的文字会同步显示当前真实时间。成功保留时间可以选立即、分钟、小时或天,也可以关闭失败清理或完全停用后台清理。

要确认后台是否真的运行,请在工作台右侧“运行日志”的任务下拉框选择“清理记录”。页面会分开列出“今日后台检查”和“今日实际清理”:每次检查、结束和实际删除都按北京时间显示到秒;实际清理还会列出删除的 Actions 任务编号、源码和成品路径。这里只显示当天记录,进入第二天后前一天的记录会自动清除。

自动清理只处理 iOSForge 编译任务。到期后会删除对应的 Actions 记录与日志、该次上传且之后未被修改的源码,以及仍与该次构建版本一致的 sources/Download 成品;文件被后续任务更新或仍被未到期任务使用时不会误删。删完最后一个成品后,空的 Download 文件夹会自动消失。

“通过 GitHub 通知”是全局开关;上传设置中的“构建完成后发送邮件通知”控制本次任务。两处都开启时,成功或失败会写入仓库的 iOSForge 构建通知 Issue,并 @提及仓库所有者,内容包含项目名、构建类型、结果、产物和任务链接。还需在 GitHub Settings → Notifications 中启用 Email,邮件由 GitHub 官方通知系统发送。

定时任务由 GitHub 调度,“每 10 分钟”是检查计划,不保证精确到秒。注意仓库容量:每个产物限制在 95 MiB 以内;需要长期保留的成品请先下载。

APP BUILD · IPA

如果你要编译的是 IPA

IPA 是 iOS 应用的安装包。它需要一个可编译的 Xcode 应用工程。插件源码不能仅靠切换选项变成应用。

  1. 上传完整 Xcode 项目。

    保留 .xcodeproj 或 .xcworkspace 目录、应用代码、资源和项目依赖文件。它们在文件系统里是目录,不要解散里面的文件。若原项目使用 workspace,就填写 workspace 路径。

  2. 确认 Scheme 已共享。

    Scheme 是 Xcode 中的一套构建方案。在 Xcode 的 Product → Scheme → Manage Schemes 中查看名称并勾选 Shared,再把对应修改提交。拿到别人的源码时,先确认对方提供的 Scheme 名字。

  3. 单个应用工程可以跳过手动配置。

    系统会识别唯一的 Xcode 工程和共享应用 Scheme。只有多个工程、多个方案或想固定选择时,才填写下面的配置,把示例名字换成真实名称。已有 [project] 或 [app] 时修改原段落,不要重复添加。

iosforge.toml · 应用配置
[project]
name = "MyApp"
kind = "app"
minimum_ios = "15.0"

[app]
project = "MyApp.xcodeproj"
scheme = "MyApp"
configuration = "Release"
  1. 选择编译模式:巨魔或后续自签,保持默认“无证书编译”。

    这个模式不需要 Apple 开发者证书、不需要 Provisioning Profile(描述文件),也不需要 ExportOptions.plist。云端关闭 Xcode 的代码签名,将编译出的应用放进 Payload 文件夹,再打包成 MyApp-unsigned.ipa。文件名中的 unsigned 表示“未签名”,不是编译失败。

  2. 上传到 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 指定仓库内的脚本。不要把不认识的脚本或账号密钥提交到公开仓库。

下载后怎么安装?按你的设备选一条路

  1. 直接下载真实 IPA。

    网页显示并下载实际文件名,例如 MyApp-unsigned.ipa,不再套 ZIP。把这个 IPA 传到手机即可;不要解压 IPA,也不要修改它的后缀。

  2. 已经安装巨魔(TrollStore)的用户。

    在手机上使用“共享 → TrollStore”打开 IPA,或者进入 TrollStore,点击添加按钮选择该文件,再确认安装。具体入口以你安装的版本为准。请只安装自己拥有或获授权的应用。

  3. 准备自己签名的用户。

    把这个 IPA 导入你使用的签名工具,按该工具要求提供自己的 Apple 账号或签名证书与描述文件,完成签名后再安装。自签仍受账号权限、设备授权和有效期限制;编译无证书不等于安装也无需签名。

iOS 15+ 编译支持,不等于所有 iOS 15+ 都支持巨魔。

巨魔对系统版本、设备和安装方法有自己的要求,请以 TrollStore 官方说明 ↗为准。本工具不会安装巨魔、绕过设备的安装限制,也不保证任意 IPA 都能运行。

依赖特殊 entitlements(应用权限声明)的项目,需要按原项目要求单独处理。无证书打包不会自动把 Xcode 的权限文件写进可执行文件,也不会替你添加私有权限;后续签名工具能授予的权限同样有限。

什么时候才选择“证书导出”?

只有你希望云端直接导出带 Apple 签名的 IPA,并已准备好匹配应用、团队和分发方式的证书、描述文件与导出配置时,才切换到这一项(GitHub 参数为 signed)。当前通用流程不会自动创建或导入证书;需要按你的项目补充依赖安装、证书导入和描述文件安装步骤。证书凭证保存在仓库 Settings → Secrets and variables → Actions,不要上传到公开源码中。具体配置见 GitHub 的 Apple 签名指南 ↗。

完成标志:你已拿到未签名 IPA,并知道自己接下来用巨魔安装,还是交给签名工具处理。设备运行效果还需实际验证。

TROUBLESHOOTING

遇到问题,先看这里

找不到 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 已登录正确账号;也可在仓库里进入对应文件手动下载。

NEXT TIME

下次使用,留在这一个网页就好

  1. 粘贴有效 Token,核对仓库与分支。

    令牌不保存在网页,关闭页面后需要重新填写。

  2. 新项目选“上传本地源码”;旧项目选“使用仓库源码”。

    旧项目填上 sources/你的项目名称。更新同一个项目可以再次上传并确认更新同名文件;想要干净版本时换一个新目录。

  3. 选择产物并开始编译。

    IPA 默认无证书。用“任务记录”回看全部 Actions 状态,成品会按真实文件名直接进入 sources/Download/。

  4. 下载留存,再选择清理范围。

    删产物只删一个真实文件;删任务记录只删 Actions 记录与日志;“删除这个项目”会删除所选项目全部源码,并清空共享的 sources/Download 成品目录。

你也可以把完整源码交给协作助手协助整理和配置。原生工程以外的特殊依赖,仍应按照项目自己的说明准备;网页不会把缺失的工程文件凭空补齐。

我准备好了,去编译工作台

第三方解压组件:fflate 0.8.2(MIT),已随网站提供,不从第三方 CDN 加载。