mcpField
A
asc-signing-setup

asc-signing-setup

github.com/rorkai開発1.1k7.4k 回インストール2 日前に更新
リポジトリ

asc-signing-setup について

ascでiOS/macOSアプリの署名アセットを作成・管理する開発者向けワークフローガイドです。設定、ローテーション、同期、調整、エフェメラルな署名実行を扱います。

主な機能

  1. 01Bundle IDと機能の設定
  2. 02証明書とプロファイルの作成
  3. 03ローカルプロファイルの確認とインストール
  4. 04暗号化された署名アセットの同期
  5. 05デバイスとプロファイル変更の計画
  6. 06一時的なIDでのコマンド実行

活用シーン

  1. 01リリースや開発用署名の準備
  2. 02証明書のローテーションと期限切れプロファイルの整理
  3. 03チーム間での署名ID共有
  4. 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 に作成させます。

ワークフロー

  1. バンドル ID を作成するか、既存のものを検索します。
    • asc bundle-ids list --paginate
    • asc bundle-ids create --identifier "com.example.app" --name "Example" --platform IOS
  2. バンドル 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 にアクセスできない場合は、スコープ付きキャッシュをクリアしてから、同じバイナリで再度ログインします。
    • App Groups では、公開 API を使って APP_GROUPS を有効にできますが、App Group リソースの作成や関連付けはできません。Account Holder または Admin のウェブセッションを使用します。
      • asc web app-groups list --paginate --output table
      • asc web app-groups create --name "Example Shared" --identifier "group.com.example.app.shared" --confirm
      • asc 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 を含むプロビジョニングプロファイルは無効になるため、次回の署名付きビルドの前に、該当するプロファイルを再生成してください。
  3. 署名証明書を作成します。
    • asc certificates list --certificate-type IOS_DISTRIBUTION
    • asc 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
  4. プロビジョニングプロファイルを作成します。
    • 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"
  5. プロファイルをダウンロードします。
    • asc profiles download --id "PROFILE_ID" --output "./profiles/AppStore.mobileprovision"
  6. 必要に応じて、ダウンロードしたプロファイルをローカルで確認してインストールします。
    • asc profiles inspect --path "./profiles/AppStore.mobileprovision" --output table
    • asc profiles inspect --path "./profiles/AppStore.mobileprovision" --entitlements --output markdown
    • asc 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-run
    • asc 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 リソースではなく、ローカルディスクの状態を対象にします。

コメント