跳过内容

iOS 构建

使用Capgo的专用Mac基础设施,构建并提交iOS应用到TestFlight和App Store。

你将学到什么

标题:你将学到什么
  • 你将学习如何通过Capgo Native Build上传你的应用
  • 你将学习如何配置Capgo Native Build的证书

前置条件

前置条件
  • Capgo 帐户(具有有效订阅)
  • Capgo 中已注册的应用(如果没有,请运行 bunx @capgo/cli@latest app add 一台mac电脑,安装了Xcode(可以在linux/windows机器上设置构建,但尚未文档)
  • 有效的Apple Developer帐户($99/年)(您必须在Apple Developer帐户上具有管理员或所有者权限)
  • 通过Xcode成功构建应用
  • __CAPGO_KEEP_0__ 应用
  • Capacitor 应用
  • 注意

在苹果门户中开始之前

标题:在苹果门户中开始之前

在设置证书或触发首次 TestFlight 上传之前,确保 Apple 帐户和团队准备就绪:

  • 为用于注册的 Apple 帐户启用两因素身份验证
  • 选择正确的会员类型:
    • 个人/独资:您的法律个人姓名将成为 App Store 上的卖家名称
    • 组织:需要一个法律实体、一个 D-U-N-S 编号、一个公共公司网站、一个公司域名的工作电子邮件以及一个具有权力将组织绑定到苹果协议的个人
  • 使用可以访问苹果开发者和 App Store Connect 的帐户,用于证书、应用记录、API 密钥和 TestFlight
  • 尽早锁定您的最终 bundle ID。稍后改变它通常意味着重新设置 App Store
  • 在 App Review 前,务必规划这些 App Store Connect 项:支持 URL、隐私政策 URL、年龄等级、截图、出口遵从性和 App Review 联系方式
开始 Apple 开发者入会 继续在 web 上的 Apple 入会 选择正确的 Apple 开发者实体类型 入会后在 App Store Connect 中

第一个手动构建

标题:第一个手动构建

在我们开始思考如何使用Capgo构建应用程序之前,我们应该首先设置它,并手动完成第一次TestFlight构建。 手动构建有几个优势:

  • 您将在本地机器上设置分发证书
  • 您将创建App Store记录,如果您尚未完成,请务必完成
  • 您将能够解决与应用程序code相关的构建过程中的任何问题

在开始之前,您必须在本地机器上安装分发证书。 这很复杂,但我将在下面解释。

设置分发证书

设置分发证书
  1. 打开Xcode

  2. 点击 Xcode -> Settings... 或者,您可以使用快捷方式 Cmd + ,

    Xcode设置

  3. 前往 Accounts Xcode账户

  4. 找到已添加到Apple Developer帐户的Apple帐户 Xcode选择的Apple帐户

  5. 找到您将用于部署应用程序的团队 Xcode 查找团队

  6. 点击 Manage Certificates... 按钮 Xcode 管理证书

  7. 确保您可以在列表中看到分发证书 Xcode 分发证书

  8. 如果您无法看到,请创建新的证书

    1. 点击 + 按钮,然后点击 Apple Distribution Xcode 添加证书
    2. 证书将自动创建。您可以在列表中看到它。查看上一步以确认您看到它。

您已安装分布式证书,现在可以开始构建过程。

手动构建到 TestFlight

手动构建到 TestFlight
  1. 在 Xcode 中打开应用

    运行 bunx cap open ios 在 Xcode 工具栏中找到并点击

  2. 按钮 archive 在 Xcode 工具栏中找到并点击

    按钮 product -> archive 手动构建到 TestFlight

    Xcode工具栏

  3. 等待构建完成

  4. 点击 Distribute App 按钮

    Xcode发布按钮

  5. 选择 TestFlight Internal Only 作为发布方法并点击 Distribute 按钮

    Xcode TestFlight仅内部发布

  6. 配置应用记录

    填写以下字段:

    1. 名称:您的应用程序名称 - 在App Store中可见
    2. SKU - 应用程序的 SKU - 这是用于在 App Store 中识别您的应用程序的 SKU
    3. The primary language - 应用程序的主要语言

    然后,点击 next 按钮

    Xcode TestFlight 配置应用程序记录

  7. 如果创建应用程序记录失败,请尝试关闭窗口并尝试再次存档应用程序。

  8. 等待上传完成

  9. 如果一切顺利,您应该看到以下屏幕 Xcode TestFlight 上传完成

  10. 点击 Done 按钮

您可能会本能地认为现在一切都好,并且您将能够在 TestFlight 中看到您的应用程序,但仍有几个事情需要完成:

  1. 加入 TestFlight
  2. 完成出口遵从性检查,才能让构建变成可测试的
  3. 填写 App Store Connect 必填的元数据,如支持 URL、隐私政策 URL 和年龄等级
  4. 准备与您实际支持的设备匹配的截图
  5. 在生产提交之前添加 App Review 联系信息和任何测试凭证

好的,我们从第一步开始:

  1. 前往 App Store Connect 页面 App Store Connect 登录页面

  2. 使用您的Apple Developer账户登录

  3. 选择您在创建应用记录时使用的团队。如果您只有一份开发者账户,可以跳过这个步骤。 App Store Connect团队选择

  4. 点击 Apps App Store Connect应用按钮 在前一步骤中创建的应用中找到并点击

  5. App Store Connect应用选择 点击

  6. App Store Connect测试飞行按钮 TestFlight 点击 __CAPGO_KEEP_0__

  7. 点击 Internal Testers plus button App Store Connect 内部测试者加号按钮

  8. 创建一个新组

    我喜欢将组命名为“内部”。你可以给它任何名字。

    App Store Connect 创建新组

  9. 点击 Invite testers button App Store Connect 邀请测试者按钮

  10. 将自己添加到组中

    在列表中找到并选择下面你的名字旁边的复选框。 (你可能需要刷新页面才能看到自己) 然后,点击 Add button

    App Store Connect 邀请测试者复选框

  11. 确认您已加入群组

    现在,您应该在群组中看到自己。

    App Store Connect 验证测试者

恭喜 🎉 您已将自己添加到 TestFlight 中。现在,还有一件事您需要做才能配置 Capgo Native Build。

设置合规信息

标题:设置合规信息

您现在需要向 Apple 保证您的应用程序不使用任何非标准(如自定义算法)加密。如果您的应用程序确实使用任何非标准加密,我建议阅读 Apple 文档 关于如何处理此问题的说明。 有两种方法可以做到这一点:

  1. 您可以每次构建应用程序时都手动完成此操作。
  2. 您可以配置您的 plist 文件,以自动将此值设置为 false.

让我们从第一种方法开始:

  1. 按照上一节的步骤,找到 TestFlight 部分在 App Store Connect 中

  2. 点击 Builds -> iOS 在 App Store Connect 中点击 iOS 构建按钮

  3. 找到缺少合规信息的构建并点击 Manage 在 App Store Connect 中管理构建

  4. 选择描述您的应用程序的最佳选项

    对于我来说,这是 none但这可能与您不同。 然后点击保存

    在 App Store Connect 中保存合规信息

  5. 您的应用程序现在应该显示 ready to test

    App Store Connect 已准备好测试

至于第二个,步骤如下:

  1. 打开 Info.plist 文件

  2. 添加以下键值对:

    <key>ITSAppUsesNonExemptEncryption</key>
    <false/>
  3. 保存文件

现在,您已经 即将准备好测试您的应用程序。 在此之前,您需要完成以下步骤:

  1. 下载 TestFlight 应用程序
  2. 从 App Store 上的 iOS/iPadOS 设备上

接受测试您的应用程序的邀请

我将跳过如何在您的设备上安装 TestFlight 应用程序的详细信息。如果您不确定如何安装应用程序,请参阅 Google 的有关安装应用程序的指南。

  1. 至于接受邀请,您将收到来自 Apple 的一封电子邮件,其中包含一个链接以接受邀请。

  2. 打开来自 Apple 的电子邮件,包含接受邀请的链接 View in TestFlight 点击 按钮

  3. 点击 Install 按钮 TestFlight 安装按钮

  4. 在您的设备上安装应用

    如果您以前使用 Xcode 安装了应用,则可能会看到以下屏幕。请点击 install 按钮。 TestFlight 安装应用

  5. 等待应用安装

  6. 点击 Open 按钮并点击它

恭喜 🎉 您已接受 TestFlight 测试应用的邀请。现在,您可以配置 Capgo Native Build 来构建和提交应用到 TestFlight。

配置 Capgo Native Build

配置Capgo本机构建

为了能够构建并将应用程序提交到 TestFlight,您需要配置以下几项内容在Capgo本机构建中。 以下是您将传递给CapgoCLI的内容列表。

参数描述
--platform要构建的平台(ios)
--apple-team-id您的Apple开发者团队ID(在 Apple开发者门户)
--apple-key您的App Store ConnectAPI密钥文件路径(.p8 文件)
--apple-key-id您的App Store ConnectAPI密钥的Key ID
--apple-issuer-id您的App Store Connect发行者ID
--certificate您的分发证书路径(.p12 文件)
--ios-provisioning-profile配置文件映射(bundleId=path 或仅为单个配置文件路径)

示例命令:

终端窗口
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开始。找到它很容易。

  1. 前往 Apple Developer Account 并向下滚动

  2. 找到 Team ID

    开发者账户中的团队 ID 位置

Apple 密钥、Apple 密钥 ID 和 Apple 发行者 ID

标题为“Apple 密钥、Apple 密钥 ID 和 Apple 发行者 ID”的部分

现在,让我们继续到 Apple 密钥。

  1. 前往 App Store Connect 用户和访问页面

  2. 从下拉菜单中选择正确的团队

    1. 单击顶部右侧的您的姓名
    2. 点击您要使用的团队 Apple Developer keys团队选择
  3. 点击 Integrations 按钮 App Store Connect集成按钮

  4. 找到 issuer

    点击 copy __CAPGO_KEEP_0__ App Store Connect发行者复制

  5. 点击加号按钮 App Store Connect添加密钥按钮

  6. 设置密钥名称并设置访问权限 App manager 并点击 Generate 按钮 App Store Connect添加密钥名称,设置访问权限到应用管理器并生成按钮

  7. 保存密钥ID

    App Store Connect 复制密钥 ID

  8. 下载密钥

    App Store Connect下载密钥

    App Store Connect下载密钥警告

恭喜你 🎉 你已经创建了Apple密钥、Apple密钥ID和Apple发行者ID。

证书

证书

现在,你准备好导出证书了。回想一下,这个指南的第一步是设置分布式证书。

然而,苹果在他们的无限智慧中决定了你导出证书的方式与创建它们的方式有所不同 🙃 让我们进入设置:

  1. 打开Keychain Access

    1. 点击 Command + Space 以打开搜索栏
    2. 搜索 Keychain Access
    3. 点击 Keychain Access app
  2. 选择 login 类别并点击 My Certificates 按钮 Keychain Access 登录类别

  3. 在列表中找到您的证书

    证书应该命名为 Apple Distribution: [Your Name/Company] (your team ID) 右键单击证书并选择

  4. Keychain Access 导出证书 Export 将证书保存为

  5. __CAPGO_KEEP_0__ .p12 文件

    1. 请为证书文件选择一个合适的名称
    2. 请确保文件格式设置为 Personal Information Exchange (.p12)
    3. 点击 Save 按钮

    Keychain Access 保存证书对话框

  6. 当被要求输入密码时,您可以选择:

    • 跳过密码(推荐简化):点击 OK 不输入密码
    • 设置密码:如果您希望用密码保护证书, .p12 files are fully supported by the Capgo CLI - just provide the password using the --p12-password 文件完全支持

    只需在运行配置命令时使用

  7. 钥匙串访问保存证书密码对话框

    当被要求输入“登录钥匙串密码”时,请输入您用来登录Mac的密码 Allow 输入您用来登录Mac的密码。然后,点击

    按钮

钥匙串访问保存证书登录钥匙串密码

恭喜 🎉 您已成功导出证书。

Section titled “Apple Provisioning Profile”

现在,您已经准备好从 Apple 导出配置文件。 我保证,这是您从 Apple 需要的最后一件事。

  1. 前往 Apple Developer 个人资料

  2. 在下拉菜单中选择正确的团队

    1. 点击右上角的您的姓名
    2. 点击要使用的团队 Apple Developer keys 团队选择
  3. 确保您位于正确的页面 如果不是,请点击 profiles 在侧边栏中

    Apple Developer 个人资料页面

  4. 点击 + 按钮 添加 Apple Developer 个人资料按钮

  5. 选择个人资料类型 选择 App Store Connect 并点击 Continue 按钮

    Apple Developer 选择个人资料类型

  6. 选择您要构建的应用

    在下拉菜单中找到您的应用并点击 Continue 按钮

    Apple Developer 选择应用

  7. 选择正确的分发证书

    选择您在上一步中导出的证书并点击 Continue 按钮

    Apple Developer 选择分发证书

    如果您不确定要选择哪个证书,请返回 Keychain Access,找到您导出的证书,然后查看有效期。

    Apple Developer 选择分发证书有效期

  8. 命名配置文件

    为配置文件命名并点击 Generate 提示

    下载配置文件

  9. 下载配置文件

    点击下载 Download __CAPGO_KEEP_0__配置文件

    苹果开发者下载配置

恭喜 🎉 您现在已经准备好配置Capgo原生构建了。

运行配置命令

配置命令

恭喜您!您已经准备好配置 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

如果一切顺利,您将看到以下输出:

Capgo CLI 凭据保存输出

如果您已经完成了 团队 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.txt

2) 创建仓库密钥

标题:2) 创建仓库密钥

GitHub > Repository > Settings > Secrets and variables > Actions密钥名称

您的 __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ token
CAPGO_TOKENYour Capgo API token
APP_STORE_CONNECT_TEAM_ID团队 ID 密钥 ID
APPLE_KEY_IDApple 密钥,Apple 密钥 ID 和 Apple 发行商 ID 在此处添加:
APPLE_ISSUER_ID发行者 ID Apple key、Apple key ID 和 Apple 发行者 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 工作流中使用环境变量”
github/workflows/ios-build.yml
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。

默认情况下,Capgo 构建 iOS 应用程序以供 App Store 分发(TestFlight + App Store)。如果您需要即用即发构建(用于内部测试或 CI artifact 收集),则可以使用 --ios-distribution 标志。

何时使用即用即发模式

专题:“何时使用即用即发模式”
  • 您想直接将 IPAs 分发给注册的设备(不使用 TestFlight)
  • 您没有或不想使用 App Store Connect API 密钥
  • 您想通过 --output-upload 而不提交到 App Store

Ad-hoc 构建有 比 App Store 构建少的要求: 凭证

是否需要?分发证书(
Distribution certificate(.p12)
自定义配置文件 (.mobileprovision)
团队 ID (--apple-team-id)
App Store Connect API 密钥 (.p8)
Apple Key ID / 发行者 ID

按照相同的步骤

配置文件

,但在第五步中选择 targetLanguageSimplified Chinese 即用型 而不是 App Store:

  1. 前往 Apple Developer Profiles
  2. 点击 + 按钮
  3. 选择 即用型 并点击继续
  4. 选择您的应用程序和分发证书
  5. 选择您要注册的设备
  6. 下载并命名配置文件

保存临时凭证

保存临时凭证
终端窗口
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 需要。

运行临时构建

运行临时构建
终端窗口
bunx @capgo/cli@latest build request \
--platform ios \
--ios-distribution ad_hoc

为了收集 IPA 作为构建 artifact,添加 --output-upload:

终端窗口
bunx @capgo/cli@latest build request \
--platform ios \
--ios-distribution ad_hoc \
--output-upload

对于 GitHub Actions,您需要比 App Store 构建少的密钥:

github/workflows/ios-adhoc-build.yml
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

包含扩展的应用(多目标签名)

包含扩展的应用(多目标签名)

如果您的应用包含扩展(共享扩展、小部件、通知服务扩展等),则每个扩展目标都需要自己的签名配置文件。Capgo通过可重复的 --ios-provisioning-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 "com.example.app=./app_profile.mobileprovision" \
--ios-provisioning-profile "com.example.app.share-extension=./share_ext_profile.mobileprovision"

标志映射一个bundle ID到其签名配置文件。__CAPGO_KEEP_0__: --ios-provisioning-profile flag maps a bundle ID to its provisioning profile file. The CLI:

  1. 读取每个mobileprovision文件
  2. 自动提取嵌入的 plist 中的 profile 名称
  3. 以 Base64 编码文件
  4. 将所有内容存储为一个 CAPGO_IOS_PROVISIONING_MAP 凭据

从单一配置文件迁移

标题:从单一配置文件迁移

如果您以前使用过 BUILD_PROVISION_PROFILE_BASE64 (单一配置文件),请运行:

终端窗口
bunx @capgo/cli build credentials migrate --platform ios

将您的现有单一配置文件凭据转换为新格式并删除遗留密钥( CAPGO_IOS_PROVISIONING_MAP 迁移后,使用以下命令(累积合并)添加扩展配置文件:BUILD_PROVISION_PROFILE_BASE64, APPLE_PROFILE_NAME).

终端窗口 update 复制到剪贴板

提示
bunx @capgo/cli build credentials update \
--platform ios \
--ios-provisioning-profile "com.example.app.share-extension=./share_ext_profile.mobileprovision"

配置文件中没有包含 XYZ 能力。

标题:“配置文件中没有包含 XYZ 能力。”

有时,您可能会看到以下错误:

Provisioning profile "YOUR_PROVISIONING_PROFILE_NAME" doesn't include the XYZ capability. (in target 'App' from project 'App')"

这发生在您在创建配置文件后启用了新能力之后。 旧的配置文件还没有包含新能力。

要解决这个问题,您需要重新生成配置文件。

  1. 打开 Apple Developer Portal
  2. 选择正确的团队 Apple Developer keys团队选择
  3. 点击 Profiles Apple Developer profiles按钮 找到您要重新生成的配置文件
  4. Apple Developer查找配置文件 点击
  5. Apple Developer编辑配置文件 Edit 点击 Apple Developer编辑配置文件
  6. __CAPGO_KEEP_0__ Save __CAPGO_KEEP_1__ Apple Developer 保存配置文件
  7. 点击 Download 按钮 Apple Developer 下载配置文件
  8. 重新运行 Capgo 原生构建设置命令 使用刚下载的配置文件。

这应该解决问题。

If for whatever reason you are having issues either with Capgo Native Build, configuring the credentials or building the app, please don’t hesitate to reach via our 编辑页面.