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

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

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

前提条件

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

  • AWS アカウント

  • Apple 開発者アカウント

  • 証明書を保存するための S3 バケット

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

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

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

この例では、ストレージに Amazon S3 バケットをセットアップして使用します。

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

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

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

    storage_mode("s3") s3_bucket("your-s3-bucket-name") s3_region("your-aws-region") type("appstore") # The default type, can be: appstore, adhoc, enterprise or development

ステップ 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 によって S3 に保存されます。

bundle exec fastlane match appstore

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

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

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

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

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

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

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

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

    2. シークレット値 - <証明書を復号するためのパスフレーズと一致>。パスフレーズは、ステップ 3 で証明書を生成するときに設定されます。

注記

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)

  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: IAM ロールを設定する

プロジェクトが作成されたら、CodeBuild プロジェクトのサービスロールに、証明書を含む S3 バケットにアクセスするアクセス許可があることを確認します。以下のポリシーをロールに追加します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": "arn:aws:s3:::your-s3-bucket-name" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::your-s3-bucket-name/*" } ] }

ステップ 9: ビルドを実行する

ビルドを実行します。CodeBuild でビルドステータスとログを確認できます。

ジョブが完了すると、ジョブのログを表示できるようになります。

トラブルシューティング

  • 証明書の取得で問題が発生した場合は、S3 にアクセスできるように IAM アクセス許可が正しく設定されていることを確認します。

  • 証明書の復号で問題が発生した場合は、MATCH_PASSWORD 環境変数で正しいパスフレーズを設定してください。

  • コード署名の問題については、Apple 開発者アカウントに必要な証明書とプロファイルがあり、Xcode プロジェクトのバンドル識別子がプロビジョニングプロファイルのものと一致していることを確認します。

セキュリティに関する考慮事項

このチュートリアルのセキュリティに関する考慮事項を次に示します。

  • 保管データ暗号化など、適切なセキュリティ設定が S3 バケットにあることを確認します。特に、バケットにパブリックアクセスがないことを確認し、アクセスが必要な CodeBuild とシステムのみにアクセスを制限します。

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

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