教程:通过将 GitHub 用于证书存储在 CodeBuild 中使用 Fastlane 进行 Apple 代码签名 - AWS CodeBuild

教程:通过将 GitHub 用于证书存储在 CodeBuild 中使用 Fastlane 进行 Apple 代码签名

fastlane 是一款流行的开源自动化工具,可自动为 iOS 和 Android 应用程序进行测试版部署和发布。它处理所有繁琐的任务,例如生成屏幕截图、处理代码签名和发布应用程序。

此示例演示了如何在 Mac 实例集上运行的 CodeBuild 项目中使用 Fastlane 设置 Apple 代码签名,同时将 GitHub 用作证书和预置配置文件的存储。

先决条件

要完成本教程,您首先必须设置以下条件:

  • 一个 AWS 账户

  • Apple 开发人员账户

  • 用于存储证书的私有 GitHub 存储库

  • 在您的项目中安装的 fastlane - 安装 fastlane 的指南

步骤 1:在本地计算机上使用 GitHub 设置 Fastlane Match

Fastlane MatchFastlane 工具之一,它支持在本地开发环境和 CodeBuild 上无缝配置代码签名。Fastlane Match 将所有代码签名证书和预置配置文件存储在 Git 存储库/S3 存储桶/Google 云存储中,并在需要时下载和安装必要的证书和配置文件。

在此示例配置中,我们设置并使用 Git 存储库进行存储。

  1. 在项目中初始化匹配:

    fastlane match init
  2. 出现提示时,选择 GitHub 作为存储模式。

  3. 更新“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:为项目创建应用程序文件

根据项目的需要创建或添加应用程序文件。

  1. 根据项目构建要求创建或添加 GymfileAppfileSnapfileDeliverfile

  2. 将更改提交到远程存储库。

步骤 5:在 Secrets Manager 中创建环境变量

创建三个用于存储 fastlane 会话 cookie 和匹配密码短语的密钥。有关在 Secrets Manager 中创建密钥的更多信息,请参阅创建 AWS Secrets Manager 密钥

  1. 按如下方式访问 fastlane 会话 cookie。

    1. 秘密密钥:FASTLANE_SESSION

    2. 密钥值:在本地计算机上运行以下命令时生成的会话 cookie。

      注意

      在本地文件中进行身份验证后,此值可用:~/.fastlane/spaceship/my_appleid_username/cookie

      fastlane spaceauth -u <Apple_account>
  2. Fastlane Match 密码短语:要使 Fastlane Match 能够解密存储在 Git 存储库中的证书和配置文件,需要将您在匹配设置步骤中配置的加密密码短语添加到 CodeBuild 项目的环境变量中。

    1. 秘密密钥:MATCH_PASSWORD

    2. 密钥值:<match passphrase to decrypt certificates>。密码短语是在步骤 3 中生成证书时设置的。

  3. Fastlane MATCH_GIT_BASIC_AUTHORIZATION:为匹配设置基本授权:

    1. 秘密密钥:

      MATCH_GIT_BASIC_AUTHORIZATION

    2. 密钥值:该值应是您的用户名和个人访问令牌(PAT)的 base64 编码字符串,格式为 username:password。您可以使用以下命令生成它:

      echo -n your_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:创建计算实例集

为您的项目创建计算实例集。

  1. 在控制台中,转到 CodeBuild 并创建新的计算实例集。

  2. 选择 macOS 作为操作系统,然后选择适当的计算类型和映像。

步骤 7:在 CodeBuild 中创建项目

在 CodeBuild 中创建项目。

  1. https://console.aws.amazon.com/codesuite/codebuild/home 打开 AWS CodeBuild 控制台。

  2. 创建构建项目。有关信息,请参阅创建构建项目(控制台)运行构建(控制台)

  3. 设置源代码提供商(例如 GitHub、CodeCommit)。这是 iOS 项目源代码库,而不是证书存储库。

  4. 环境中:

    • 选择预留容量

    • 对于实例集,选择上面创建的实例集。

    • 提供 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 创建)

  5. 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 生态系统中的安全性和集成。