メインコンテンツにジャンプします。

クラウド上でCapacitorアプリを署名してビルドする方法

Capacitor

記事のクレジット

マーティン・ドナディュー

ライター

バレリア

レビュアー

ジョーダン

エディター

クラウドでCapacitorアプリを署名してビルドする方法

To sign and build a Capacitor app in the cloud, you create your signing material once (an Android keystore, an iOS distribution certificate and provisioning profile), give it to a cloud build service, and then trigger builds from your terminal or CI. The service compiles the native project, signs it, and can upload it straight to TestFlight or Google Play. This guide covers each signing file, how to create it without a Mac, how to set it up with Capgo Build, and how to automate signed builds safely.

クラウドで署名することの意味

両方のストアは署名されたバイナリのみを受け付けるため、署名はビルドがあなたから来て、後で誰かが変更していないことを証明します。ローカルでは、XcodeとAndroid Studioはこれらの多くを隠します。クラウドでは、すべてが明示的であるため、関与するファイルを正確に知る必要があります:

プラットフォーム ファイル 何であるか 使用する
Android .jks / .keystore アップロードキーを保持するキーストア AABまたはAPKの署名
Android サービスアカウント .json Google Cloudのクレデンシャル Google Playにアップロード
iOS .p12 Apple Distribution証明書と秘密鍵 IPAの署名
iOS .mobileprovision バンドルID、証明書、機能を結合するプロビジョニングプロファイル アプリを実行および配布することを許可する
iOS .p8 +鍵ID+発行者ID App Store Connect API鍵 アップロードするテストフライト、ビルド番号を読み取る

テストフライトにアップロード、ビルド番号を読み取る

Gitからこれらを除外する。以下のすべては、ローカル認証情報ファイルまたはCIのシークレットストアに保存される。

Android署名用の鍵ストアを作成する

Google Playにすでにアプリが登録されている場合、既存のキーストアを再利用してください。Play Consoleのアップロードキーリセットを実行しない限り、異なるキーでアップデートを署名すると却下されます。

Capacitorアプリの新しいバージョンを作成するには、Capacitor CLIを使用して、Capacitorアプリの新しいバージョンを作成します。

keytool -genkeypair -v \
  -storetype PKCS12 \
  -keystore release.jks \
  -alias upload \
  -keyalg RSA -keysize 2048 \
  -validity 10000

Notes:

  • Google Playでは、キーが少なくとも2033年10月22日まで有効である必要があります。 -validity 10000 (約27年)でカバーされます。
  • PKCS12ストアタイプでは、キーパスワードはストアパスワードと同じです。
  • JDKが手元にない場合も、 Androidキーストア生成ツール ブラウザでも同じファイルを生成します。

Playアプリ署名とアップロードキー

Google Playに新しいアプリを登録する場合、Playアプリ署名を使用します。Googleはアプリ署名キーを保有しています。 Androidキーストア生成ツール と再署名することは、ユーザーがダウンロードしたものです。 保存したキーストアは アップロードキーです。 それを失った場合、Play Consoleのサポートは新しいアップロードキーを登録できます。これがなぜ失うことは遅延ではなく、災難ではない理由です。 それでもバックアップしてください。

アップロード用サービスアカウント

クラウドからアップロードするには、Google Cloudでサービスアカウントを作成し、Google Play Android Developer APIを有効にし、そのJSONキーをダウンロードし、Play Consoleの下でサービスアカウントを招待します。 ユーザーとパーミッション アプリのリリースに必要な権限を設定します。 Capgo のオンボーディングでは、Google サインインを使用してこの設定を行うことができます。

iOS署名

iOS署名

  • Appleの3つの部品 Apple Distribution証明書
  • 1つあればチームに十分です。 1年間有効です。 Appleは、開発者ごとに何個作成できるかを制限しているので、開発者ごとに作成しないでください。 バンドルID、証明書、およびプッシュ通知などの機能をリンクします。Live Updateを使用して、 App Store Connect テストフライトとApp Store用のプロファイル アドホック アドホック
  • App Store Connect API キー。 App Store Connect __CAPGO_KEEP_0__ キー App Managerアクセスを持つユーザー ユーザーとアクセス > インテグレーション .p8 ファイルダウンロードは1度だけです。

Apple Developerチームの管理者またはアカウントホルダー権限が必要です。

Macなしで証明書を作成

macOSのKeychain Accessフローは必要ですが、OpenSSLはどこでも動作します:

# 1. Private key and certificate signing request
openssl req -new -newkey rsa:2048 -nodes \
  -keyout dist.key -out dist.csr \
  -subj "/emailAddress=dev@example.com/CN=Example Inc/C=US"

# 2. Upload dist.csr at developer.apple.com > Certificates > + > Apple Distribution
#    and download distribution.cer

# 3. Convert and bundle into a .p12
openssl x509 -inform DER -in distribution.cer -out distribution.pem
openssl pkcs12 -export -legacy \
  -inkey dist.key -in distribution.pem \
  -out distribution.p12 -passout pass:choose-a-password

The -legacy フラグはOpenSSL 3の場合に重要です:フラグがなければmacOSのビルドマシンは証明書をインポートできません。 .p12 “MACの検証に失敗しました”と表示されます。 ブラウザベースのiOS証明書生成ツール は、ターミナルを使用しない場合は同じステップを実行します。

次に、開発者ポータルでプロビジョニングプロファイルを作成します (“プロファイル > + > App Store Connect”)アプリIDと新しい証明書を選択し、ダウンロードします。__CAPGO_KEEP_0__ビルドの署名設定

Capgoビルド

Capgo ビルド compiles and signs Capacitor apps on Capgo-managed machines, so you can build iOS from Windows or Linux. Start by logging in and registering the app:

bunx @capgo/cli@latest login
bunx @capgo/cli@latest app add
bunx @capgo/cli@latest build init --platform ios
bunx @capgo/cli@latest build init --platform android

iOS の場合、オンボーディングは App Store Connect の API キーでディストリビューション証明書と App Store のプロビジョニングプロファイルを作成または再利用します。macOS の場合、API キーを作成することもできます。 Android の場合、キーストアを作成またはインポートし、Google Cloud サービス アカウントと Google サインインを通じて Play コンソールの招待をプロビジョニングできます。最後に、最初のビルドを開始するオファーを提示します。

Option B: 既存のファイルを保存

既存のセクションからファイルがあれば:

# iOS
bunx @capgo/cli@latest build credentials save \
  --platform ios \
  --certificate ./distribution.p12 \
  --p12-password "choose-a-password" \
  --ios-provisioning-profile ./AppStore.mobileprovision \
  --apple-key ./AuthKey_ABC1234567.p8 \
  --apple-key-id ABC1234567 \
  --apple-issuer-id 00000000-0000-0000-0000-000000000000 \
  --apple-team-id TEAM123456

# Android
bunx @capgo/cli@latest build credentials save \
  --platform android \
  --keystore ./release.jks \
  --keystore-alias upload \
  --keystore-key-password "store-password" \
  --keystore-store-password "store-password" \
  --play-config ./play-service-account.json

拡張機能を持つアプリの場合、繰り返し --ios-provisioning-profile 各ターゲットごとに bundleId=path マッピングを実行します。

  --ios-provisioning-profile com.example.app=./App.mobileprovision \
  --ios-provisioning-profile com.example.app.widget=./Widget.mobileprovision

資格情報は ~/.capgo-credentials/credentials.jsonアプリ ID とプラットフォームをキーとして保存されます。 --local を追加して、プロジェクト内に保存するようにします。 そのファイルを .capgo-credentials.json に追加し、保存されている内容を確認します。 .gitignorewith bunx @capgo/cli@latest build credentials list.

署名ビルドをトリガーする

ネイティブプロジェクトを準備し、ビルドをリクエストします:

bun run build
bunx cap sync

# iOS: sign with the App Store profile and upload to TestFlight
bunx @capgo/cli@latest build request com.example.app --platform ios --build-mode release

# Android: sign the AAB and upload to the internal track
bunx @capgo/cli@latest build request com.example.app --platform android --build-mode release --android-track internal

ログはターミナルに流れ込みます。ビルド前のスキャンでは、証明書の有効期限、パスワード、プロファイルのペアリングをチェックします。アップロードされる前に、ほとんどの署名ミスは秒単位で失敗するため、分単位で失敗するのではなく。独自に実行します。 bunx @capgo/cli@latest build prescan --platform ios.

便利なバリエーション:

目標 フラグ
登録済みのiPhoneでテストビルド --ios-distribution ad_hoc --ios-provisioning-profile ./adhoc.mobileprovision --output-upload
MDMまたはキオスクデバイス用のAPK --platform android --no-playstore-upload --output-upload
App Reviewに直接提出 --submit-to-store-review --store-release-name 2.4.0
ビルド番号を自分で管理 --skip-build-number-bump
キャッシュなしのビルド --no-cache

アドホックビルドの場合、デバイスのUDIDを先に収集するには iOS UDID の検索 プロファイルに追加する

CI で署名されたビルドを自動化

CI では、環境変数としてクレデンシャルを渡すのではなく、クレデンシャル ファイルを使用しない。 CLI は、必要なものだけをエクスポートします:

bunx @capgo/cli@latest build credentials manage --appId com.example.app
# choose "Export to .env"

GitHub では、1 つのコマンドでリポジトリのシークレットにすべての行をプッシュし、ファイルを削除します:

gh secret set -f .env.capgo.com.example.app
gh secret set CAPGO_TOKEN --body "your-capgo-api-key"
rm .env.capgo.com.example.app

タグで署名および両方プラットフォームを配信するリリース ワークフロー:

name: Signed release
on:
  push:
    tags: ['v*']

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        platform: [ios, android]
    steps:
      - uses: actions/checkout@v6
      - uses: oven-sh/setup-bun@v2
      - run: bun install --frozen-lockfile
      - run: bun run build
      - run: bunx cap sync ${{ matrix.platform }}
      - run: bunx @capgo/cli@latest build request com.example.app --platform ${{ matrix.platform }} --build-mode release
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
          CAPGO_IOS_PROVISIONING_MAP_BASE64: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_BASE64 }}
          APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
          APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
          APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
          APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
          ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
          KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
          KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
          KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
          PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}

ジョブは Linux で実行されます。macOS ランナー、キーチェーン コマンド、Fastlane は必要ありません。環境変数は、GitLab CI/CD 変数、Bitbucket セキュア化された変数、Gitea シークレット、または Azure DevOps 変数 グループでも使用できます。プラットフォーム固有のガイド: ビットバケット Pipelines, Gitea アクション, および GitHub Actions ドキュメント.

キーがどのように処理されるか

あなたがクラウドサービスに署名キーを渡す前に、ある程度の質問は当然あります。 Capgo ビルド:

  • 資格情報はあなたのマシン (~/.capgo-credentials/) または CI のシークレット ストアに保存されています。 Capgo はあなたのキーを保管するセキュリティ上のVaultではありません。
  • 各ビルドごとに、 CLI はHTTPSで資格情報を送信します。ビルドが完了すると、資格情報は削除されます。
  • アップロードされるのは、準備されたネイティブ プロジェクトのみです。ウェブソース、 .git, and .env ビルドされたアプリは、App Store ConnectまたはGoogle Playに直接アップロードされます。時間制限付きダウンロードリンクを要求すると、ダウンロードリンクが生成されます。
  • 交換条件:資格情報をローテートすると、CIシークレットを自分で更新する必要があります。再エクスポートして

とファイルを再度プッシュしてください。 build credentials manage 有効期限とローテーション

アイテム

Item ライフタイム 何をするか
Apple Distribution 証明書 1 年 新しいものを作成し、プロファイルを再生成し、CI を更新
プロビジョニング プロファイル 1 年、または証明書が取り消されるまで 再生成し、保存
App Store Connect API キー 取り消されるまで アクセス権を持つ人がいなくなったら取り消す
Android アップロード キーストア 有効期間 (数十年間) バックアップして、Play Consoleでロストした場合にリセット
Playサービスアカウントキー 削除されるまで アクセスが変更された場合や毎年

Appleの有効期限を共有カレンダーに追加してください。有効期限が切れた証明書は、すでにユーザーのデバイスにインストールされているアプリには影響しませんが、新しいビルドはすべてブロックされます。

トラブルシューティング

エラー 原因と修正
Provisioning profile doesn't include signing certificate プロファイルは別の証明書で生成されました。現在の証明書で再生成してください。
Provisioning profile doesn't match bundle ID プロファイルは別のアプリIDまたは拡張機能のターゲットが欠けているため、各ターゲットにマッピングを追加してください。 bundleId=path 原因と修正
MAC verification failed 間違い .p12 パスワード、またはOpenSSL 3のエクスポート -legacy.
Keystore was tampered with, or password was incorrect 間違ったストアパスワード、またはファイルがbase64の改行で破損した
Key alias not found Aliasはキーストア内のものと異なります。リストする keytool -list -keystore release.jks.
App Store Connectの認証に失敗しました 間違ったキーアイデンティティまたは発行者ID、取り消されたキー、またはシステムクロックがずれているマシンでトークンを署名する
Playアップロード:呼び出し元が許可されていません サービスアカウントがPlay Consoleに招待されていない、またはAndroid Developer APIが有効になっていない。

さらに修正は Capgo ビルドのトラブルシューティングガイド そして CI/CDのCapacitor:よくある間違い.

最初の署名ビルド後

署名ネイティブビルドは、ネイティブcodeが変更される場合にのみ必要です。JavaScript、CSS、HTMLの変更の場合、 live update をインストール済みアプリに送信し、プラグインまたはネイティブ設定を変更するリリースのストアビルドを保持します。Macベースのセットアップから来ている場合、 WindowsからiOSアプリをビルドするCapgo Build はmacOSを使用せずにフルワークフローを表示します。

Live updates for Capacitor apps

Capgo アプリ用の即時更新

最新のブログ

Capgo gives you the best insights you need to create a truly professional mobile app.