iOS 构建
复制包含安装步骤和该插件完整 Markdown 指南的配置 prompt。
使用 Capgo 的专用 Mac 基础设施构建 iOS 应用并提交至 TestFlight 和 App Store。
学习内容
“你将学到什么”部分- 你将学习如何通过 Capgo Native Build 上传你的 App
- 你将学习如何为 Capgo Native Build 配置证书
前提条件
“前提条件”章节- 一个 Capgo 账号(免费试用即可开始)
- 你的应用已在 Capgo 中注册(请运行
bunx @capgo/cli@latest app add如未注册) - 无需 Mac:Capgo Build 会在云端编译并签名你的 iOS App,因此你可以在 macOS、Windows 或 Linux 上运行
- 有效的 Apple Developer 账号($99/年)(你必须拥有该 Apple Developer 账号的管理员或所有者权限)
- 你的 App 必须能够成功构建(无论是在本地 Xcode 中,还是使用 Capgo Build)
- 一个 Capacitor App
- 为 App 配置好图标。没有图标的 App 无法上传到 App Store。
在 Apple 门户中开始之前
标题为“在 Apple 门户中开始之前”的章节在配置证书或触发首次 TestFlight 上传之前,请确保 Apple 账号和团队已准备就绪:
- 为用于注册的 Apple Account 开启双重认证
- 选择合适的会员类型:
- 个人 / 独资企业:你的法定姓名将成为 App Store 上的卖家名称
- 组织:需要具备法人实体、D-U-N-S 编号、公开的公司网站、公司域名的工作邮箱,以及有权代表组织签署 Apple 协议的人员
- 使用可同时访问 Apple Developer 和 App Store Connect 的账号来管理证书、App 记录、API 密钥以及 TestFlight
- 尽早确定最终的 Bundle ID。后期更改通常意味着需要重新进行 App Store 的配置工作
- 在 App Review 前,请提前准备好 App Store Connect 的这些内容:支持 URL、隐私政策 URL、年龄分级、截图、出口合规性以及 App Review 联系方式
首次手动构建
章节标题:“首次手动构建”在开始使用 Capgo 构建应用之前,我们应先完成初始配置,并手动执行一次 TestFlight 构建。 先进行手动构建有一些优势:
- 你将在本地机器上配置分发证书
- 如果你尚未创建 App Store 记录,现在可以创建
- 你将能够排查与你的应用 code 相关的构建流程问题
在开始之前,您必须在本地机器上安装分发证书。 这个过程比较复杂,但下面我会详细解释。
配置分发证书
标题为“设置分发证书”的章节-
打开 Xcode
-
点击
Xcode->Settings...或者,你可以使用快捷方式Cmd + ,
-
前往
Accounts
-
找到已添加到 Apple 开发者账户的 Apple 账户

-
找到用于部署应用的团队

-
点击
Manage Certificates...按钮
-
确保列表中能看到分发证书

-
如果没有,您需要创建一个新的证书
- 点击
+按钮,然后选择Apple Distribution
- 证书将自动创建。您可以在列表中看到它。请查看上一步以确认您能看到该证书。
- 点击
现在您已安装分发证书,可以开始构建流程了。
手动构建到 TestFlight
标题为“手动构建到 TestFlight”的章节-
在 Xcode 中打开 App
运行
bunx cap open ios以在 Xcode 中打开 App。 -
找到并点击
archive按钮在 Xcode 工具栏中,找到并点击
product->archive按钮。
-
等待构建完成
-
点击
Distribute App按钮
-
选择
TestFlight Internal Only作为分发方式,并点击Distribute按钮
-
配置 App 记录
填写以下字段:
- Name:您的 App 名称 - 会在 App Store 中显示
- SKU:您的 App SKU - 用于在 App Store 中识别您的 App
- 主要语言:您的 App 的主要语言
然后,点击
next按钮
-
如果创建应用记录失败,请关闭窗口并尝试再次归档应用。
-
等待上传完成
-
如果一切顺利,您应该看到以下界面

-
点击
Done按钮
您可能会本能地认为现在一切就绪,并且可以在 TestFlight 中看到您的应用,但还有几件事需要完成:
- 将自己添加到 TestFlight
- 完成出口合规,使构建可测试
- 填写 App Store Connect 所需的元数据,例如支持 URL、隐私政策 URL 和年龄分级
- 准备与实际支持设备匹配的截图
- 在提交生产版本前,添加 App Review 联系方式和测试凭据(如有)
我们先从第一个开始:
将自己添加到 TestFlight
标题为“将自己添加到 TestFlight”的章节-
前往 App Store Connect 页面

-
使用你的 Apple Developer 账号登录
-
选择创建 App 记录时使用的团队。如果你只属于一个开发者账号,可以跳过此步骤。

-
点击
Apps按钮
-
找到上一步创建的应用并点击它

-
点击
TestFlight按钮
-
点击
Internal Testers plus按钮
-
创建新分组
我喜欢把这个群组命名为“internal”。你也可以随意命名。

-
点击
Invite testers按钮
-
将自己添加到组中
在列表中找到自己,并勾选姓名旁的复选框。(可能需要刷新页面才能看到自己) 然后,点击
Add按钮。
-
确认你已添加到组中
现在,你应该能在组中看到自己了。

恭喜 🎉 你已将自己添加到 TestFlight。现在,在配置 Capgo Native Build 之前, 你只需要再完成一件事。
配置合规信息
标题为“设置合规信息”的章节现在你需要向 Apple 承诺,你的应用没有使用任何非标准(如自定义算法)加密。如果你的应用确实使用了非标准加密,建议阅读 Apple 文档 了解如何处理此问题。 有两种方法可以实现:
- 你可以在每次构建应用时手动执行此操作。
- 你可以配置 plist 文件,将此值自动设置为
false.
我们先从第一个开始:
-
按照上一节的所有步骤,在 App Store Connect 中找到 TestFlight 部分
-
点击
Builds -> iOS
-
找到缺少合规信息的构建,并点击
Manage
-
选择最符合你 App 情况的选项
我的情况是
none,但你的情况可能不同。 然后点击保存
-
你的 App 现在应该显示
ready to test
至于第二种情况,步骤如下:
-
打开
Info.plist文件 -
添加以下 key:
<key>ITSAppUsesNonExemptEncryption</key><false/> -
保存文件
安装 TestFlight 应用并接受邀请
标题为“安装 TestFlight 应用并接受邀请”的部分现在,您 就快 可以在 TestFlight 中测试您的应用了。 在此之前,您需要完成以下事项:
- 从 Firebase Console 下载 TestFlight 应用 从 iOS/iPadOS 设备上的 App Store
- 接受测试应用的邀请
这里不再赘述如何在设备上安装 TestFlight App。如果你不确定怎么安装应用,Google 上有一些很棒的指南。
关于接受邀请:你会收到一封来自 Apple 的邮件,其中包含接受邀请的链接。
-
打开 Apple 发来的包含接受邀请链接的邮件
-
点击
View in TestFlight按钮
-
点击
Install按钮
-
在你的设备上安装应用
如果你之前用 Xcode 安装过这个 App,可能会看到以下界面。请点击
install按钮。
-
等待 App 安装完成
-
点击
Open按钮并点击它
恭喜 🎉 你已接受在 TestFlight 中测试 App 的邀请。现在,你可以配置 Capgo Native Build 来构建 App 并提交到 TestFlight。
配置 Capgo Native Build
标题为“配置 Capgo Native Build”的部分为了能构建 App 并提交到 TestFlight,你需要在 Capgo Native Build 中配置几项内容。 以下是你需要传给 Capgo CLI 的配置项列表:
| 参数 | 描述 |
|---|---|
--platform | 要构建的平台 (ios) |
--apple-team-id | 您的 Apple Developer Team ID (可在 Apple 开发者门户) |
--apple-key | App Store Connect API 密钥文件路径 (.p8 文件) |
--apple-key-id | App Store Connect API 密钥的 Key ID |
--apple-issuer-id | 您的 App Store Connect Issuer ID |
--certificate | 分发证书路径 (.p12 文件) |
--ios-provisioning-profile | Provisioning profile 映射 (bundleId=path 或仅提供单个 profile 的路径) |
示例命令:
bunx @capgo/cli@latest build credentials save \ --platform ios \ --apple-team-id YOUR_TEAM_ID \ --apple-key '/path/to/AuthKey_XXXXX.p8' \ --apple-key-id YOUR_KEY_ID \ --apple-issuer-id YOUR_ISSUER_ID \ --certificate '/path/to/certificate.p12' \ --ios-provisioning-profile '/path/to/profile.mobileprovision'团队 ID
标题为“Team ID”的章节先从 Team ID 开始。找到它很容易。
-
前往 Apple 开发者账号 并向下滚动
-
找到
Team ID
Apple key、Apple key ID 和 Apple issuer ID
标题为“Apple key, Apple key ID and Apple issuer ID”的章节现在,让我们继续配置 Apple 密钥。
-
在下拉菜单中选择正确的团队
- 点击右上角的姓名
- 点击您要使用的团队

-
点击
Integrations按钮
-
找到
issuer点击
copy复制 Issuer 的按钮
-
点击加号按钮

-
设置 Key 名称并将访问权限设为
App manager并点击Generate按钮
-
保存 Key ID

-
下载密钥


恭喜 🎉 您已成功创建 Apple 密钥、Apple key ID 和 Apple issuer ID。
现在,您可以导出证书了。还记得吗,本指南最初的步骤之一就是设置分发证书。
不过,Apple 以他们“无穷的智慧”决定,导出证书的方式与创建时完全不同 🙃 下面开始设置:
-
打开 Keychain Access
- 点击
Command + Space以打开搜索栏 - 搜索
Keychain Access - 点击
Keychain Access应用
- 点击
-
选择
login类别,然后点击My Certificates按钮
-
在列表中找到你的证书
证书名称应为
Apple Distribution: [Your Name/Company] (your team ID)
-
右键点击证书并选择
Export
-
将证书保存为
.p12文件- 请确保为证书文件选择一个合适的名称
- 请确保文件格式设置为
Personal Information Exchange (.p12) - 点击
Save按钮

-
当提示输入密码时,你可以选择:
- 跳过密码(推荐,更简单):点击
OK不输入密码 - 设置密码:如果你想用密码保护证书,可以在这里设置。受密码保护的
.p12文件完全受 Capgo CLI 支持 - 只需在运行配置命令时使用--p12-password选项提供密码即可。

- 跳过密码(推荐,更简单):点击
-
当提示输入“登录钥匙串密码”时,请输入你登录 Mac 所用的密码
输入你登录 Mac 所用的密码。然后点击
Allow按钮。
恭喜 🎉 您已导出证书。
现在,您可以导出 provisioning profile 了。我保证,这是您需要从 Apple 获取的最后一项内容。
-
在下拉菜单中选择正确的团队
- 点击右上角的姓名
- 点击您要使用的团队

-
请确保您在正确的页面 页面应该长这样,如果不是,请点击
profiles在侧边栏中
-
点击
+按钮
-
选择描述文件类型 选择
App Store Connect并点击Continue按钮
-
选择要构建的 App
在下拉菜单中找到你的 App 并点击
Continue按钮
-
选择正确的分发证书
选择上一步导出的证书,并点击
Continue按钮
如果不确定该选择哪个证书,请返回 Keychain Access 找到您导出的证书,然后查看其过期日期。

-
为配置文件命名
为配置文件命名并点击
Generate按钮
-
下载描述文件
点击
Download下载配置文件的按钮
恭喜 🎉 现在你已具备配置 Capgo Native Build 所需的一切。
正在运行配置命令
标题为“运行配置命令”的章节完成了!现在你已具备配置 Capgo Native Build 所需的一切。
你需要运行的命令是:
bunx @capgo/cli@latest build credentials save \ --platform ios \ --apple-team-id UVTJ336J2D \ --apple-key ./capgo-tutorial/AuthKey_66FGQZB566.p8 \ --apple-key-id 66FGQZB566 \ --apple-issuer-id 0cd4db4a-5598-45b8-9d32-75cdf127d005 \ --certificate ./capgo-tutorial/capgo-build-tutorial-certificate.p12 \ --ios-provisioning-profile ./capgo-tutorial/capgo_native_build_tutorial.mobileprovision如果一切顺利,您将看到以下输出:

CI/CD 配置 (GitHub Actions)
标题为“CI/CD 设置(GitHub Actions)”的章节如果您已完成 团队 ID, Apple key、Apple key ID 和 Apple issuer ID, 证书,以及 描述文件,您已具备 CI/CD 所需的一切。 本节仅介绍如何将这些值作为 GitHub Actions 密钥和环境变量传递。
1) 将凭证文件转换为单行 base64
标题为“1) 将凭证文件转换为单行 base64”的章节# Distribution certificate (.p12)base64 -i ./capgo-tutorial/capgo-build-tutorial-certificate.p12 | tr -d '\n' > certificate_base64.txt
# Provisioning profile (.mobileprovision)base64 -i ./capgo-tutorial/capgo_native_build_tutorial.mobileprovision | tr -d '\n' > profile_base64.txt
# App Store Connect API key (.p8)base64 -i ./capgo-tutorial/AuthKey_66FGQZB566.p8 | tr -d '\n' > apple_key_base64.txt2) 创建仓库密钥
标题为“2) 创建仓库密钥”的章节在 GitHub > Repository > Settings > Secrets and variables > Actions,添加:
| 密钥名称 | 值 |
|---|---|
CAPGO_TOKEN | 你的 Capgo API token |
APP_STORE_CONNECT_TEAM_ID | 来自 团队 ID |
APPLE_KEY_ID | 来自 Apple key、Apple key ID 和 Apple issuer ID |
APPLE_ISSUER_ID | 来自 Apple key、Apple key ID 和 Apple issuer ID |
BUILD_CERTIFICATE_BASE64 | 内容 certificate_base64.txt |
CAPGO_IOS_PROVISIONING_MAP | 由 CLI 生成 — 复制自 .capgo-credentials 文件 |
APPLE_KEY_CONTENT | 内容 apple_key_base64.txt |
P12_PASSWORD (可选) | 你的 .p12 导出时设置的密码(如有) |
3) 在 GitHub Actions 工作流中使用环境变量
标题为“3) 在 GitHub Actions 工作流中使用环境变量”的章节name: iOS Cloud Build
on: workflow_dispatch: push: branches: [main]
jobs: ios-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Request iOS build with Capgo run: bunx @capgo/cli@latest build request --platform ios env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }}运行构建
标题为“运行构建”的章节现在,你可以运行第一次构建了。
运行以下命令来构建你的应用:
bunx @capgo/cli@latest build request --platform ios恭喜 🎉 至此,你已成功构建应用,可以提交至 App Store 了。
提交至 App Store 审核
标题为“提交 App Store 审核”的章节常规的 App Store 构建流程会将构建上传到 App Store Connect/TestFlight。如果你的 CI 发布还需要把处理后的 TestFlight 构建附加到 App Store 版本并提交 App Review,请传入 --submit-to-store-review 配合 release build 使用:
npx @capgo/cli@latest build request com.example.app \ --platform ios \ --build-mode release \ --ios-distribution app_store \ --submit-to-store-review \ --store-release-name "1.2.3" \ --store-release-notes "General improvements" \ --store-release-notes-locale "en-US=General improvements" \ --store-release-notes-locale "nl-NL=Algemene verbeteringen" \ --store-release-notes-locale "fr-FR=Ameliorations generales" \ --no-ios-automatic-release这需要 App Store Connect API 密钥凭据(APPLE_KEY_ID, APPLE_ISSUER_ID, APPLE_KEY_CONTENT,以及 APP_STORE_CONNECT_TEAM_ID)。App 专用密码上传和 ad_hoc 分发无法提交构建以供审核。 --store-release-name 是 App Store 版本;如果省略,Capgo 将从 MARKETING_VERSION Xcode 项目中读取。 --store-release-notes 是 App Store 的“新功能”回退文本,每个 --store-release-notes-locale "locale=notes" 条目都可以为商店本地化覆盖它。使用 --ios-automatic-release 在 Apple 批准后自动发布,或者 --no-ios-automatic-release 以等待手动发布。 --ios-testflight-groups 仍可用于外部 Beta 分发,但提交 App Store 审核时并非必需。
Ad-Hoc 分发模式
标题为“Ad-Hoc 分发模式”的章节默认情况下,Capgo 构建的 iOS 应用用于 App Store 分发(TestFlight + App Store)。如果你需要 ad-hoc 构建(用于内部测试或 CI 产物收集),可以使用 --ios-distribution 标志。
何时使用 ad-hoc 模式
“何时使用 ad-hoc 模式”章节- 你想直接向已注册设备分发 IPA(无需使用 TestFlight)
- 你没有或不想使用 App Store Connect API 密钥
- 你想通过以下方式收集构建产物
--output-upload而无需提交至 App Store
Ad-hoc 构建的要求 少于 App Store 构建:
| 凭据 | 是否必填? |
|---|---|
分发证书(.p12) | 是 |
Ad-hoc 描述文件 (.mobileprovision) | 是 |
团队 ID (--apple-team-id) | 是 |
App Store Connect API 密钥 (.p8) | 否 |
| Apple Key ID / Issuer ID | 否 |
创建 ad-hoc provisioning profile
标题为“创建 ad-hoc 描述文件”的章节按照与 描述文件相同的步骤操作,但在第 5 步中,选择 Ad Hoc 分发 而不是 App Store:
- 前往 Apple Developer 描述文件
- 点击
+按钮 - 选择 Ad Hoc 分发 并点击“继续”
- 选择您的应用和分发证书
- 选择要注册的设备
- 命名并下载描述文件
保存 ad-hoc 凭据
标题为“保存 ad-hoc 凭据”的章节bunx @capgo/cli@latest build credentials save \ --platform ios \ --ios-distribution ad_hoc \ --apple-team-id YOUR_TEAM_ID \ --certificate './certificate.p12' \ --ios-provisioning-profile './adhoc_profile.mobileprovision'否 --apple-key, --apple-key-id,或 --apple-issuer-id 所需。
运行 ad-hoc build
标题为“运行 Ad-hoc 构建”的章节bunx @capgo/cli@latest build request \ --platform ios \ --ios-distribution ad_hoc要将 IPA 作为构建产物收集,请添加 --output-upload:
bunx @capgo/cli@latest build request \ --platform ios \ --ios-distribution ad_hoc \ --output-upload使用 ad-hoc build 实现 CI/CD
标题为“使用 ad-hoc 构建进行 CI/CD”的章节相比 App Store 构建,GitHub Actions 需要的 secrets 更少:
name: iOS Ad-Hoc Build
on: workflow_dispatch:
jobs: ios-adhoc: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Request iOS ad-hoc build run: bunx @capgo/cli@latest build request --platform ios --ios-distribution ad_hoc --output-upload env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_ADHOC }} CAPGO_IOS_DISTRIBUTION: ad_hoc包含 Extension 的 App(多 Target 签名)
标题为“包含 Extension 的 App(多 Target 签名)”的章节如果你的 App 包含 extension(share extension、widget、notification service extension 等),每个 extension target 都需要单独的 provisioning profile。Capgo 通过可重复的 --ios-provisioning-profile 标志。
示例:App + Share Extension
标题为“示例:App + Share Extension”的章节bunx @capgo/cli@latest build credentials save \ --platform ios \ --apple-team-id YOUR_TEAM_ID \ --apple-key '/path/to/AuthKey_XXXXX.p8' \ --apple-key-id YOUR_KEY_ID \ --apple-issuer-id YOUR_ISSUER_ID \ --certificate '/path/to/certificate.p12' \ --ios-provisioning-profile "com.example.app=./app_profile.mobileprovision" \ --ios-provisioning-profile "com.example.app.share-extension=./share_ext_profile.mobileprovision"每个 --ios-provisioning-profile flag 会将 bundle ID 映射到其 provisioning profile 文件。CLI:
- 读取每个 mobileprovision 文件
- 从内嵌的 plist 中自动提取 profile 名称
- 对文件进行 Base64 编码
- 将所有内容存储为单个
CAPGO_IOS_PROVISIONING_MAP凭据
从单一 Profile 迁移
标题为“从 Single Profile 迁移”的章节如果你之前使用过 BUILD_PROVISION_PROFILE_BASE64 (single profile),请运行:
bunx @capgo/cli@latest build credentials migrate --platform ios这将把您现有的单配置文件凭据转换为新的 CAPGO_IOS_PROVISIONING_MAP 格式,并移除旧版密钥(BUILD_PROVISION_PROFILE_BASE64, APPLE_PROFILE_NAME).
迁移完成后,使用 update 命令添加扩展配置文件(增量合并):
bunx @capgo/cli@latest build credentials update \ --platform ios \ --ios-provisioning-profile "com.example.app.share-extension=./share_ext_profile.mobileprovision"故障排除
“故障排除”章节Provisioning profile 不包含 XYZ capability。
标题为“Provisioning profile doesn’t include the XYZ capability.”的章节有时,您可能会看到以下错误:
Provisioning profile "YOUR_PROVISIONING_PROFILE_NAME" doesn't include the XYZ capability. (in target 'App' from project 'App')"这是因为您在创建 Provisioning Profile 之后启用了新的 Capability。 旧的 Provisioning Profile 尚未包含该新 Capability。
要修复此问题,您需要重新生成描述文件。
- 打开 Apple 开发者门户
- 在下拉菜单中选择正确的团队

- 点击
Profiles按钮
- 找到您想要重新生成的描述文件

- 点击
Edit按钮
- 点击
Save按钮
- 点击
Download按钮
- 重新运行 Capgo Native Build 设置命令 并使用新下载的描述文件。
这应该能解决问题。
其他问题
标题为“其他问题”的章节如果由于任何原因,您在 Capgo Native Build、配置凭据或构建应用时遇到问题,请随时通过我们的渠道联系我们。 支持团队.
从 iOS Builds 继续
标题为“从 iOS 构建继续”的章节如果你正在使用 iOS 构建 规划 CI/CD 自动化,并将其与 Capgo CI/CD 集成 用于 Capgo CI/CD 中的产品工作流, Capgo Native Build 用于 Capgo Native Builds 中的产品工作流, Capgo 集成 用于 Capgo 集成中的产品工作流, CI/CD 集成 了解 CI/CD 集成的实现细节,以及 GitHub Actions 集成 有关 GitHub Actions 集成的实现细节。