xcodebuildを実行し、Devinのシークレットとして保存したApp Store Connect APIキーで認証します。
Devinがビルドをアップロードできるようにするには、事前に次の準備が必要です。
- App Store Connectでアプリを設定する。
- App Store Connect APIキーを作成する。
- そのキーとTeam IDをシークレットとしてDevinに追加する。
- DevinがAppleのサーバーに接続できるようにする。
TestFlightへのアップロードにはmacOSセッションが必要です。Dedicated SaaSデプロイメントをご利用の場合は、担当のアカウントチームにご連絡のうえ、macOS VMを有効にしてください。
要件
App Store Connect のセットアップ
1
最新の契約に同意する
Account Holder が App Store Connect にサインインし、Business で保留中の契約すべてに同意します。必要な契約が保留のままだと、アップロードは失敗します。
2
bundle ID を登録する
Apple Developer ポータル で Certificates, Identifiers & Profiles → Identifiers に移動し、アプリターゲットの bundle ID と一致する App ID を登録します。該当の識別子がすでに存在する場合は、この手順を省略してください。
3
App レコードを作成する
App Store Connect で Apps に移動し、+ をクリックして New App を選択します。プラットフォーム、名前、主要言語、前の手順の bundle ID、SKU を指定します。bundle ID に対応する App レコードがないと、TestFlight へのアップロードは失敗します。
4
beta group を作成する
アプリを開いて TestFlight に移動し、グループを作成します。
- Internal testing: テスターは App Store Connect チームのユーザーである必要があります。処理が完了し次第、ビルドが利用可能になります。
- External testing: メールアドレスまたは公開リンクがあれば誰でもテスターになれます。先に Test Information(ベータアプリの説明、フィードバック用メールアドレス、審査用の連絡先情報)を入力してください。各バージョンの最初のビルドは Beta App Review の対象となります。
5
輸出コンプライアンスに回答する
テスターがインストールできるようにするには、ビルドごとに輸出コンプライアンスの質問へ回答する必要があります。この質問をビルドごとに回答せずに済ませるには、アプリの
Info.plist で ITSAppUsesNonExemptEncryption を設定します。HTTPS など対象外の暗号化のみを使用している場合は NO を設定してください。App Store Connect APIキーを作成する
1
APIアクセスを有効にする
App Store Connectで Users and Access → Integrations → App Store Connect API に移動します。APIアクセスがまだ有効になっていない場合は、Account Holderが Request Access をクリックして利用規約に同意します。
2
チームキーを生成する
Team Keys で + をクリックします。
Devin TestFlight などの名前を入力し、App Manager ロールを選択します。キーの生成にはAdminロールが必要です。App ManagerのキーでXcodeが配布証明書を作成できない場合は、代わりに Admin ロールでキーを生成してください。3
秘密鍵をダウンロードする
新しいキーの横にある Download をクリックして
AuthKey_<KEY_ID>.p8 を保存します。このファイルをダウンロードできるのは一度だけです。紛失した場合は、キーを失効させて新しいキーを生成してください。4
Issuer IDとKey IDをコピーする
Issuer ID はキー一覧の表の上に表示されます。Key ID は各キーの行にあります。
5
Team IDを確認する
Apple Developerポータルで Membership details に移動し、Team ID をコピーします。
A1B2C3D4E5 のような10文字の文字列です。Devin にシークレットを追加する
Mac で秘密鍵をコピーするには、次のコマンドを実行します。
- Organization: 組織内のすべてのセッションでキーを利用できます。チームで Devin を使ってビルドをリリースする場合は、このスコープを利用してください。
- Personal: 自分が開始したセッションのみでキーを利用できます。
ネットワークアクセスを許可する
api.appstoreconnect.apple.com と、xcodebuild が署名およびアップロードに利用するその他の Apple ホストを追加してください。*.apple.com を許可すれば、これらをまとめてカバーできます。
ホストがブロックされている場合、ネットワークエラーではなく認証エラーとして表示されるのが一般的です。トラブルシューティングを参照してください。
ビルドをアップロードする
ASC_PRIVATE_KEYを0600権限で~/.appstoreconnect/private_keys/AuthKey_$ASC_KEY_ID.p8に書き込む。- App Store Connect API で最新のビルド番号を確認し、それより大きい番号を選ぶ。
xcodebuild archiveでアプリをアーカイブする。xcodebuild -exportArchiveでビルドに署名してアップロードする。- 処理の完了を待ってから、App Store Connect API でビルドを beta group に追加する。
destination を upload に設定した export options plist を利用します:
-allowProvisioningUpdates を指定すると、Xcode が APIキーを利用して配布証明書とプロビジョニングプロファイルを作成できるため、VM に署名用アセットをインストールする必要がありません。
リポジトリに fastlane のレーンや make ターゲットなどのリリーススクリプトが既にある場合は、それを利用するよう Devin に指示してください。fastlane でも app_store_connect_api_key から同じキーを渡せます。
手順をブループリントに保存する
knowledge セクションに追加しておきましょう。
Troubleshooting
No Accounts with App Store Connect Access または Failed to Use Accounts が発生する。 まずネットワークアクセスを確認してください。VM が Apple のサーバーに到達できない場合、キーが有効でも xcodebuild はこのエラーを報告します。その直前の行に ITunesConnectFoundationErrorDomain Code=-1003 が出ていないか確認してください。ネットワークに問題がなければ、キーに App Manager ロールが付与されているかを確認してください。
No profiles for '<bundle ID>' were found。 bundle ID が APPLE_TEAM_ID の Team に登録されていないか、App Store Connect に対応する app レコードが存在しません。
The provided entity includes an attribute with a value that has already been used。 そのバージョンで同じビルド番号が既に利用されています。ビルド番号を上げて再度アップロードしてください。
ビルドはアップロードされるのにテスターがインストールできない。 App Store Connect → TestFlight でビルドを確認してください。まだ処理中である、輸出コンプライアンス情報が未入力である、または Beta App Review 待ちの可能性があります。
Xcode が配布証明書を作成できない。 キーのロールでは証明書の管理が許可されていません。Admin ロールのキーを生成するか、Admin に Apple Developer ポータルで配布証明書を作成してもらってください。
セッション内で environment variables が空になる。 シークレットは、追加した後に開始したセッションでのみ利用できます。新しいセッションを開始してください。
