チュートリアル: 証明書ストレージに GitHub を使用した CodeBuild での Fastlane による Apple コード署名 - AWS CodeBuild

チュートリアル: 証明書ストレージに GitHub を使用した CodeBuild での Fastlane による Apple コード署名

fastlane は、iOS および Android アプリのベータデプロイとリリースを自動化する際によく使用されているオープンソース自動化ツールです。スクリーンショットの生成、コード署名の処理、アプリケーションのリリースなど、面倒なタスクがすべて処理されます。

このサンプルでは、証明書とプロビジョニングプロファイルのストレージとして GitHub を使用し、Mac フリートで実行されている CodeBuild プロジェクトで Fastlane を使用して Apple コード署名をセットアップする方法を示します。

前提条件

このチュートリアルを完了するには、まず以下をセットアップする必要があります。

  • AWS アカウント

  • Apple 開発者アカウント

  • 証明書を保存するプライベート GitHub リポジトリ

  • プロジェクトにインストールされた fastlane - fastlane のインストールに関するガイド

ステップ 1: ローカルマシンで GitHub を使用して Fastlane Match を設定する

Fastlane MatchFastlane ツールの 1 つであり、ローカル開発環境と CodeBuild の両方でコード署名をシームレスに設定できます。Fastlane Match は、すべてのコード署名証明書とプロビジョニングプロファイルを Git リポジトリ/S3 バケット/Google クラウドストレージに保存し、必要に応じて必要な証明書とプロファイルをダウンロードおよびインストールします。

この例では、ストレージに Git リポジトリをセットアップして使用します。

  1. プロジェクトで一致を初期化します。

    fastlane match init
  2. プロンプトが表示されたら、ストレージモードとして GitHub を選択します。

  3. GitHub を使用するよう `Matchfile` を更新します。

    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
注記

fastlane が正常に認証とクローン作成を行えるよう、必ず Git リポジトリの HTTPS URL を入力してください。そうしない場合、一致を使用しようとすると認証エラーが表示されることがあります。

ステップ 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
注記

一致アクションが正しく機能するよう、Fastfilebefore_all セクションに setup_ci を追加してください。これにより、適切なアクセス許可を持つ一時的な Fastlane キーチェーンが使用されます。これを使用しないと、ビルドが失敗したり、一貫性のない結果が表示されたりすることがあります。

ステップ 3: fastlane match コマンドを実行して、それぞれの証明書とプロファイルを生成する

指定されたタイプ (開発、アプリストア、アドホック、エンタープライズ) の fastlane match コマンドは、証明書とプロファイルを生成します (リモートストアにない場合)。証明書とプロファイルは、fastlane によって GitHub に保存されます。

bundle exec fastlane match appstore

コマンドの実行がインタラクティブになり、証明書を復号するためのパスフレーズを設定するよう fastlane により求められます。

ステップ 4: プロジェクトのアプリケーションファイルを作成する

プロジェクトに応じてアプリケーションファイルを作成または追加します。

  1. プロジェクトのビルド要件に基づいて、GymfileAppfileSnapfileDeliverfile を作成または追加します。

  2. 変更内容をリモートリポジトリにコミットします。

ステップ 5: Secrets Manager で環境変数を作成する

fastlane セッション Cookie と一致するパスフレーズを保存するための 3 つのシークレットを作成します。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 リポジトリに保存されている証明書とプロファイルを復号できるようにするには、Match セットアップのステップで設定した暗号化パスフレーズを CodeBuild プロジェクトの環境変数に追加する必要があります。

    1. シークレットキー - MATCH_PASSWORD

    2. シークレット値 - <match passphrase to decrypt certificates>。パスフレーズは、ステップ 3 で証明書を生成するときに設定されます。

  3. Fastlane MATCH_GIT_BASIC_AUTHORIZATION - match の基本認可を設定します。

    1. シークレットキー:

      MATCH_GIT_BASIC_AUTHORIZATION

    2. シークレット値 - 値は、ユーザー名と個人用アクセストークン (PAT) の base64 でエンコードされた文字列を username:password 形式で指定する必要があります。次のコマンドを使用して生成できます。

      echo -n your_github_username:your_personal_access_token | base64

      GitHub コンソールの [Your Profile] > [Settings] > [Developers Settings] > [Personal Access Token] で 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. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  2. ビルドプロジェクトを作成します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。

  3. ソースプロバイダー (GitHub、CodeCommit など) をセットアップします。これは、証明書リポジトリではなく iOS プロジェクトソースリポジトリです。

  4. [環境] で以下の操作を行います。

    • [リザーブドキャパシティ] を選択します。

    • [フリート] で、上記で作成したフリートを選択します。

    • CodeBuild で自動作成するサービスロールの名前を指定します。

    • 以下の環境変数を指定します。

      • 名前: MATCH_PASSWORD、値: <secrets arn>、タイプ: Secrets Manager (MATCH_PASSWORD のステップ 5 で作成されたシークレット ARN)

      • 名前: FASTLANE_SESSION、値: <secrets arn>、タイプ: Secrets Manager (FASTLANE_SESSION のステップ 5 で作成されたシークレット ARN)

      • 名前: MATCH_GIT_BASIC_AUTHORIZATION、値: <secrets ARN>、タイプ: Secrets Manager のシークレット ARN (MATCH_GIT_BASIC_AUTHORIZATION のステップ 5 で作成)

  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 リポジトリを秘密に保ち、定期的にアクセスを監査します。

  • MATCH_PASSWORD や FASTLANE_SESSION などの機密情報を保存するために AWS Secrets Manager を使用することを検討してください。

このサンプルでは、証明書ストレージに GitHub を使用して CodeBuild の Fastlane で iOS コード署名をセットアップします。場合によっては、具体的なプロジェクト要件と CodeBuild 環境に応じて、いくつかのステップを調整する必要があります。このアプローチでは、AWS サービスを利用して、AWS エコシステム内のセキュリティと統合を強化します。