asc-signing-setup について
ascでiOS/macOSアプリの署名アセットを作成・管理する開発者向けワークフローガイドです。設定、ローテーション、同期、調整、エフェメラルな署名実行を扱います。
主な機能
- 01Bundle IDと機能の設定
- 02証明書とプロファイルの作成
- 03ローカルプロファイルの確認とインストール
- 04暗号化された署名アセットの同期
- 05デバイスとプロファイル変更の計画
- 06一時的なIDでのコマンド実行
活用シーン
- 01リリースや開発用署名の準備
- 02証明書のローテーションと期限切れプロファイルの整理
- 03チーム間での署名ID共有
- 04アーカイブとデバイス一覧に基づく変更計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rorkai/ app-store-connect-cli-skills --skill asc-signing-setupインストール後、Claude Code で/asc-signing-setupを入力して読み込まれたか確認します。
詳細
asc 署名のセットアップ
iOS/macOS アプリの署名アセットを作成または更新する必要がある場合は、このスキルを使用します。
前提条件
- 認証が設定されています(
asc auth loginまたはASC_*環境変数)。 - バンドル識別子と対象プラットフォームがわかっています。
- 証明書の作成に使用する CSR ファイルがあるか、
asc certificates create --generate-csrに作成させます。
ワークフロー
- バンドル ID を作成するか、既存のものを検索します。
asc bundle-ids list --paginateasc bundle-ids create --identifier "com.example.app" --name "Example" --platform IOS
- バンドル ID の機能を設定します。
asc bundle-ids capabilities list --bundle "BUNDLE_ID"asc bundle-ids capabilities add --bundle "BUNDLE_ID" --capability ICLOUD- 必要な場合は、機能の設定を追加します。
--settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_6","enabled":true}]}]'
- Developer Portal でのみ利用できる
PRIVATE_CLOUD_COMPUTE機能には、ユーザー所有のウェブセッションと Developer Portal のバンドル ID リソース ID を使用します。asc web bundle-ids capabilities enable --bundle-id "BUNDLE_RESOURCE_ID" --capability PRIVATE_CLOUD_COMPUTE --confirm- この機能は、公開 App Store Connect 機能列挙型では利用できません。キャッシュされたセッションで Developer Portal にアクセスできない場合は、スコープ付きキャッシュをクリアしてから、同じバイナリで再度ログインします。
asc web auth logout --apple-id "[email protected]"asc web auth login --apple-id "[email protected]"
- App Groups では、公開 API を使って
APP_GROUPSを有効にできますが、App Group リソースの作成や関連付けはできません。Account Holder または Admin のウェブセッションを使用します。asc web app-groups list --paginate --output tableasc web app-groups create --name "Example Shared" --identifier "group.com.example.app.shared" --confirmasc web app-groups assign --group "GROUP_RESOURCE_ID" --bundle-id "BUNDLE_RESOURCE_ID" --confirm- 不透明なグループ ID は
asc web app-groups listで、バンドル ID の不透明なリソース ID はasc bundle-ids listで確認します。割り当てを変更すると、その App ID を含むプロビジョニングプロファイルは無効になるため、次回の署名付きビルドの前に、該当するプロファイルを再生成してください。
- 署名証明書を作成します。
asc certificates list --certificate-type IOS_DISTRIBUTIONasc certificates create --certificate-type IOS_DISTRIBUTION --csr "./cert.csr"- または、キーと CSR をまとめて生成します。
asc certificates create --certificate-type IOS_DISTRIBUTION --generate-csr --key-out "./signing/dist.key" --csr-out "./signing/dist.csr"
- Wallet パスの場合は、先に Pass Type ID を作成してから、その証明書を作成します。
asc pass-type-ids create --identifier "pass.com.example" --name "Example Pass"asc certificates create --certificate-type PASS_TYPE_ID --pass-type-id "PASS_TYPE_ID" --csr "./pass.csr"asc pass-type-ids certificates list --pass-type-id "PASS_TYPE_ID" --paginate
- プロビジョニングプロファイルを作成します。
asc profiles create --name "AppStore Profile" --profile-type IOS_APP_STORE --bundle "BUNDLE_ID" --certificate "CERT_ID"- 開発用またはアドホック用では、デバイスを含めます。
asc profiles create --name "Dev Profile" --profile-type IOS_APP_DEVELOPMENT --bundle "BUNDLE_ID" --certificate "CERT_ID" --device "DEVICE_ID"
- プロファイルをダウンロードします。
asc profiles download --id "PROFILE_ID" --output "./profiles/AppStore.mobileprovision"
- 必要に応じて、ダウンロードしたプロファイルをローカルで確認してインストールします。
asc profiles inspect --path "./profiles/AppStore.mobileprovision" --output tableasc profiles inspect --path "./profiles/AppStore.mobileprovision" --entitlements --output markdownasc profiles local install --path "./profiles/AppStore.mobileprovision"asc profiles local list --output table- macOS では、デフォルトのディレクトリは使用中の Xcode に応じて決まります。Xcode 16 以降では
~/Library/Developer/Xcode/UserData/Provisioning Profiles、Xcode 15 以前では~/Library/MobileDevice/Provisioning Profilesが使用されます。アクティブな Xcode が完全にインストールされていないホストでは、従来のディレクトリにフォールバックし、stderr に注記が出力されます。 - 自動化で固定のディレクトリを指定する必要がある場合は、
--install-dirを渡します。
ローテーションとクリーンアップ
- 古い証明書を失効させます:
asc certificates revoke --id "CERT_ID" --confirm
- リモートのプロビジョニングプロファイルを削除またはローテーションする前に監査します:
asc profiles list --profile-state ACTIVE,INVALID --paginate --output json- Apple の
profileStateは、有効期限を完全には示しません。expirationDateが過去の日付でも、ACTIVEと報告されるプロファイルがあります。期限切れプロファイルを正確に監査するには、INVALIDのみに頼らず、expirationDateを現在の日付と比較してください。
- 古いプロファイルを削除します:
asc profiles delete --id "PROFILE_ID" --confirm
- ローカルの Xcode プロビジョニングプロファイルをクリーンアップします:
asc profiles local clean --expired --dry-runasc profiles local clean --expired --confirm- 確定する前に、ドライランの出力で解決されたディレクトリを確認するか、
--install-dirで固定してください。
asc signing sync によるチーム共有ストレージ
暗号化された Git ベースの証明書/プロファイルストレージに対して、fastlane match に代わる軽量な非対話型の方法が必要な場合に使用します。
# Protect secret inputs before use
chmod 600 "./signing-sync-password" "./distribution.p12" "./distribution-p12-password"
# Push a usable private identity with its matching certificate and profile
asc signing sync push \
--bundle-id "com.example.app" \
--profile-type IOS_APP_ADHOC \
--repo "[email protected]:team/certs.git" \
--password-file "./signing-sync-password" \
--identity "./distribution.p12" \
--identity-password-file "./distribution-p12-password" \
--output json
# Pull and decrypt them into a local directory
asc signing sync pull \
--repo "[email protected]:team/certs.git" \
--password-file "./signing-sync-password" \
--output-dir "./signing" \
--output json
注:
- App Store Connect は秘密鍵を返しません。ローカルの PKCS#12 を
--identityで指定するか、--identity-sha256と--private-keyを使用して、一致する App Store Connect 証明書を選択してください。複数の ID を含む PKCS#12 でも--identity-sha256が必要です。 --password-fileを優先してください。ファイルを使わない場合はASC_SIGNING_SYNC_PASSWORDを使用します。--passwordは 5.0.0 で削除され、拒否されます。ASC_MATCH_PASSWORDは読み取られなくなり、設定されていても無視されます。- 証明書/プロファイルのみの同期も引き続きサポートされますが、
identityPresent: falseと報告されます。それだけでは使用可能な署名 ID になりません。 pullは秘密 ID をsensitiveFilesに報告し、モード0600で書き込みます。取得した ID のインポートや使用は、別途明示的に行う必要があります。- 秘密 ID の同期では
MAC_APP_DIRECTとMAC_CATALYST_APP_DIRECTは拒否されます。証明書/プロファイルのみの同期は引き続き利用できます。
アドホックデバイスとプロファイルの調整
Xcode アーカイブと保護された希望デバイスファイルから、決定論的かつ追加的な変更を行うには、実験的な調整ワークフローを使用します:
asc signing reconcile plan \
--archive-path ".asc/artifacts/App.xcarchive" \
--devices-file ".asc/distribution/devices.json" \
--output json
asc signing reconcile apply \
--plan ".asc/distribution/signing/plan.json" \
--confirm \
--output json
計画では変更は行われず、ready: false が返される場合があります。適用では、不足しているデバイスの登録、安全なベースライン App ID の作成、後継アドホックプロファイルの作成が可能です。リソースの削除やパッチ適用、機能の有効化、証明書の作成は行いません。--confirm を指定する前に計画を確認してください。これらの署名上の影響をエンドツーエンドの配布計画ハッシュに含める場合は、asc-ad-hoc-distribution スキルを使用してください。
一時的な ID を使ってコマンドを 1 つ実行する
macOS では、子コマンドをラップして、ログインキーチェーンやプロファイルへの永続的な変更を回避します:
asc signing run \
--identity "./signing/App.p12" \
--identity-password-file "./signing/App-password" \
--profile "./signing/App.mobileprovision" \
--receipt ".asc/distribution/signing-run.json" \
-- xcodebuild -exportArchive \
-archivePath ".asc/artifacts/App.xcarchive" \
-exportPath ".asc/artifacts/release-testing" \
-exportOptionsPlist ".asc/ExportOptions.release-testing.plist"
コマンドはシェルを介さず直接実行され、子プロセスの終了コードを保持し、隔離された一時キーチェーンを使用して、一時プロファイルをクリーンアップします。成功データは出力しないため、標準出力は子プロセスが管理します。ID のパスワードをインラインで渡さないでください。
注
- 列挙値(証明書の種類、プロファイルの種類)を正確に確認するには、必ず
--helpを確認してください。 - 大規模なアカウントでは
--paginateを使用してください。 - 複数の証明書が必要な場合、
--certificateはカンマ区切りの ID を受け付けます。 - デバイス管理には
asc devicesコマンドを使用します(UDID が必要です)。 asc profiles inspectとasc profiles local ...は、App Store Connect API リソースではなく、ローカルディスクの状態を対象にします。