教程:通过将 GitHub 用于证书存储在 CodeBuild 中使用 Fastlane 进行 Apple 代码签名
fastlane
此示例演示了如何在 Mac 实例集上运行的 CodeBuild 项目中使用 Fastlane 设置 Apple 代码签名,同时将 GitHub 用作证书和预置配置文件的存储。
先决条件
要完成本教程,您首先必须设置以下条件:
-
一个 AWS 账户
-
用于存储证书的私有 GitHub 存储库
-
在您的项目中安装的 fastlane - 安装 fastlane 的指南
步骤 1:在本地计算机上使用 GitHub 设置 Fastlane Match
Fastlane Match
在此示例配置中,我们设置并使用 Git 存储库进行存储。
-
在项目中初始化匹配:
fastlane match init -
出现提示时,选择 GitHub 作为存储模式。
-
更新“Matchfile”以使用 GitHub:
git_url("https://github.com/your-username/your-certificate-repo.git") storage_mode("git") type("development") # The default type, can be: appstore, adhoc, enterprise or development
注意
请务必输入 Git 存储库的 HTTPS URL,以便 fastlane 成功进行身份验证和克隆。否则,当您尝试使用匹配时,可能会看到身份验证错误。
步骤 2:设置 Fastfile
使用以下通道创建或更新您的“Fastfile”。
在 CodeBuild 上,每次构建和签署应用程序时,都需要运行 Fastlane Match。这行此操作的最简单方法是将 match 操作添加到构建应用程序的通道中。
default_platform(:ios) platform :ios do before_all do setup_ci end desc "Build and sign the app" lane :build do match(type: "appstore", readonly: true) gym( scheme: "YourScheme", export_method: "app-store" ) end end
注意
请务必将 setup_ci 添加至 Fastfile 中的 before_all 部分,以使匹配操作正常运行。这可以确保使用具有适当权限的临时 Fastlane 密钥链。如果不使用它,您可能会看到构建失败或结果不一致。
步骤 3:运行 fastlane match 命令以生成相应的证书和配置文件
给定类型(即开发、应用商店、临时、企业)的 fastlane match 命令将生成证书和配置文件(如果远程存储中未提供)。fastlane 会将证书和配置文件存储在 GitHub 中。
bundle exec fastlane match appstore
命令执行将是交互式的,fastlane 将要求设置密码短语来解密证书。
步骤 4:为项目创建应用程序文件
根据项目的需要创建或添加应用程序文件。
-
根据项目构建要求创建或添加 Gymfile
、Appfile 、Snapfile 、Deliverfile 。 -
将更改提交到远程存储库。
步骤 5:在 Secrets Manager 中创建环境变量
创建三个用于存储 fastlane 会话 cookie 和匹配密码短语的密钥。有关在 Secrets Manager 中创建密钥的更多信息,请参阅创建 AWS Secrets Manager 密钥。
-
按如下方式访问 fastlane 会话 cookie。
-
秘密密钥:
FASTLANE_SESSION -
密钥值:在本地计算机上运行以下命令时生成的会话 cookie。
注意
在本地文件中进行身份验证后,此值可用:
~/.fastlane/spaceship/my_appleid_username/cookie。fastlane spaceauth -u <Apple_account>
-
-
Fastlane Match 密码短语:要使 Fastlane Match 能够解密存储在 Git 存储库中的证书和配置文件,需要将您在匹配设置步骤中配置的加密密码短语添加到 CodeBuild 项目的环境变量中。
-
秘密密钥:
MATCH_PASSWORD -
密钥值:
<match passphrase to decrypt certificates>。密码短语是在步骤 3 中生成证书时设置的。
-
-
Fastlane
MATCH_GIT_BASIC_AUTHORIZATION:为匹配设置基本授权:-
秘密密钥:
MATCH_GIT_BASIC_AUTHORIZATION -
密钥值:该值应是您的用户名和个人访问令牌(PAT)的 base64 编码字符串,格式为
username:password。您可以使用以下命令生成它:echo -nyour_github_username:your_personal_access_token| base64您可以在 GitHub 控制台的您的配置文件 > 设置 > 开发人员设置 > 个人访问令牌中生成 PAT。有关更多信息,请参阅以下指南:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
。
-
注意
在 Secrets Manager 中创建上述密钥时,请记得给出一个带有以下前缀的密钥名称:/CodeBuild/
步骤 6:创建计算实例集
为您的项目创建计算实例集。
-
在控制台中,转到 CodeBuild 并创建新的计算实例集。
-
选择
macOS作为操作系统,然后选择适当的计算类型和映像。
步骤 7:在 CodeBuild 中创建项目
在 CodeBuild 中创建项目。
从 https://console.aws.amazon.com/codesuite/codebuild/home
打开 AWS CodeBuild 控制台。 -
创建构建项目。有关信息,请参阅创建构建项目(控制台)和运行构建(控制台)。
-
设置源代码提供商(例如 GitHub、CodeCommit)。这是 iOS 项目源代码库,而不是证书存储库。
-
在环境中:
-
选择预留容量。
-
对于实例集,选择上面创建的实例集。
-
提供 CodeBuild 将为您创建的服务角色的名称。
-
提供以下环境变量。
-
名称:
MATCH_PASSWORD,值:<secrets arn>,类型:Secrets Manager(在步骤 5 中为 MATCH_PASSWORD 创建的密钥 ARN) -
名称:
FASTLANE_SESSION,值:<secrets arn>,类型:Secrets Manager(在步骤 5 中为 FASTLANE_SESSION 创建的密钥 ARN) -
名称:
MATCH_GIT_BASIC_AUTHORIZATION,值:<secrets ARN>,类型:Secrets Manager 密钥 ARN(在步骤 5 中为MATCH_GIT_BASIC_AUTHORIZATION创建)
-
-
-
在 Buildspec 中,添加以下内容:
version: 0.2 phases: install: commands: - gem install bundler - bundle install build: commands: - echo "Building and signing the app..." - bundle exec fastlane build post_build: commands: - echo "Build completed on date" artifacts: files: - '*/.ipa' name: app-$(date +%Y-%m-%d)
步骤 8:运行构建
运行构建。您可以在 CodeBuild 中查看构建状态和日志。
作业完成后,您将能够查看该作业的日志。
故障排除
-
如果您在访问 GitHub 存储库时遇到问题,请仔细检查您的个人访问令牌和 MATCH_GIT_BASIC_AUTHORIZATION 环境变量。
-
如果您在证书解密时遇到问题,请确保在 MATCH_PASSWORD 环境变量中设置了正确的密码短语。
-
对于代码签名问题,请验证您的 Apple 开发人员账户是否具有必要的证书和配置文件,并且 Xcode 项目中的捆绑包标识符是否与预置配置文件中的捆绑包标识符匹配。
安全性注意事项
以下是本教程的安全注意事项。
-
使您的 GitHub 证书存储库保持为私有,并定期审计访问权限。
-
考虑使用 AWS Secrets Manager 来存储敏感信息,例如 MATCH_PASSWORD 和 FASTLANE_SESSION。
此示例为通过将 GitHub 用于证书存储在 CodeBuild 中使用 Fastlane 进行 iOS 代码签名提供了设置。您可能需要根据您的特定项目要求和 CodeBuild 环境调整一些步骤。这种方法利用 AWS 服务来增强 AWS 生态系统中的安全性和集成。