Setting up CI/CD for Capacitor apps can be complex and time-consuming. Here’s what you need to know:
Capacitorアプリの新しいビルドの推奨事項:Capgoビルドを使用
Capacitorアプリのビルドに__CAPGO_KEEP_0__を使用することをお勧めします。 CapacitorアプリのCapgoビルドとCapgoCLIを使用することをお勧めします。 native Capacitor ビルド用。 このFastlaneガイドは、既存のGitHub Actionsパイプラインを維持しているチーム向けに残されていますが、新しいiOSビルドにはCapgo CLIを使用してください。そうすることで、Fastlane、Xcodeランナー、証明書、アップロードスクリプトの維持を自分で行う必要がなくなります。
Capgo Build for CI/CD by Capgo
Fastlane、Xcodeランナー、証明書、プロビジョニングプロファイル、アップロードスクリプトの維持をスキップしてください。 Capgo ビルド 既存のCI/CDパイプラインから実行される署名済みネイティブiOSビルド:
- パイプラインと一緒に機能します。: Capgo ビルドをGitHub Actions、GitLab CI、Jenkins、またはローカルスクリプトからトリガーしてください。ウェブビルド後に
npx cap sync. - CIシークレットから署名: App Store Connectのキー、証明書、プロビジョニングプロファイル、パスワード、チームIDを自分のCIシークレットに保持してください。
- ネイティブランナーの維持をせずに: Capgo ビルドは、macOSランナー、Xcodeイメージ、Fastlaneのレーンの管理を自分で行う必要がなくなります。
- アーティファクトと提出: Capgo CLI をダウンロードして QA に提出するか、リリース ビルドを提出する。
価格
- Capgo プランは月額 $12 で始まります
- OTA の更新と約 15 のネイティブ ビルドが含まれます
- 追加のビルド分数はクレジットを通じて 1 分あたり請求されます
マニュアル設定ガイド
ここで何が必要か
iOS に対してファストレーンと GitHub アクションを使用した継続的配信
前提条件
このチュートリアルに進む前に
- Fastlaneをインストールしてください がインストールされていることを確認してください 開発用マシンに
- iOS開発者プログラムのメンバーであることを確認してください
価格に関する重要な情報

https://github.com/features/actions
サービスは無料です 制限まで無料です。選択したマシンに依存します。
macOSを使用します iOS開発者プログラムのメンバーであることを確認してください スクリーンショットで確認できる価格と制限 (価格はこのチュートリアルの作成時点で、将来の変更が可能)
警告された要件と価格については、次に進みましょう。
注記: この記事では、App Store Connectでアプリを作成していることを前提としています。重要な情報はFastlaneによってコピーされます。
このチュートリアルで学ぶこと
この記事で行う手順
- App Store Connect APIとFastlaneの使用
- 要件:
- App Store Connect APIキーを作成する
- App Store Connect APIキーを使用する
- 要件:
- Fastlaneファイルをコピーする
- GitHubアクションを設定する
1. App Store Connect APIとFastlaneの使用
2021年2月以降、すべてのユーザーはApp Store Connectにサインインするために2要素認証または2段階認証が必要です。このApple IDの追加セキュリティ層により、自分のアカウントにアクセスできるのはあなただけであることを保証します。
From Apple Support
要件
FastlaneがApp Store Connect APIでアプリをアップロードできるようにするには、以下の3つの情報を提供する必要があります。 3つ things:
- 発行者ID
- キーID
- キーファイルまたはキー内容
App Store Connect API キーの取得
キーを生成するには、App Store ConnectでAdmin権限が必要です。権限がなければ、関連する人にこの記事を指示してください。
-
ログイン App Store Connect.
-
選択 ユーザーとアクセス.

3 — インテグレーションタブを選択してください。

- Click Generate API Key or the Add (+) button.

- キー名を入力してください。キー名はあなたの参考用にのみ使用され、キー自体の部分ではありません。

6 — アクセス下で、キーに対するロールを選択してください。キーに対するロールは、チームのユーザーに対するロールと同じです。 役割の権限. 以下の選択を推奨します アプリケーションマネージャ.
- 生成をクリックしてください
An API key’s access cannot be limited to specific apps.
__CAPGO_KEEP_0__ キーのアクセス

App Store Connect ダウンロードキー
ここで必要な3つの情報をすべて取得できます。APPLE_ISSUER_ID 1. Issue ID. (
秘密)APPLE_KEY_ID 2. Key ID. (
<3> API をダウンロードするには、「ダウンロード API キー」をクリックしてください。ダウンロード リンクは、プライベート キーがまだダウンロードされていない場合にのみ表示されます。Apple はプライベート キーを保持していないため、ダウンロードは一度だけ行うことができます。
🔴 プライベート キーを安全な場所に保存してください。キーを共有しないでください、キーを code リポジトリに保存しないでください、またはクライアントサイドの code に含めないでください。
App Store Connect API キーを使用する
API キー ファイル(ダウンロードした p8 ファイル)、キーアイデンティティ、発行者 ID は、承認用 JWT トークンの作成に必要です。この情報を Fastlane に渡す方法は複数ありますが、私は Fastlane の新しいアクションを使用しました。 app_store_connect_api_keyFastlane のドキュメントを参照してください。 Fastlane のドキュメントを参照してください。p8 ファイルを Base64 に変換してシークレットとして保存してください(
App Store Connect を Fastlane で管理することができて、__CAPGO_KEEP_0__ キーを使用して素晴らしいことになります!APPLE_KEY_CONTENT).
base64 -i APPLE_KEY_CONTENT.p8 | pbcopy
Now we can manage the App Store Connect with Fastlane using the API key, great!
XCode を開いて、
設定 をクリックしてください。 > アカウント > Apple ID > チーム チームを選択してください。

Click on 証明書を管理.
証明書がまだ作成されていない場合は、新しい証明書を作成できます。
Click on + そして選択 Apple Distribution

次に、キーチェーンに移動して証明書をダウンロードする必要があります。 .p12 証明書をファイルとしてダウンロードするには、次の手順を実行してください。
証明書をダウンロードするには、キーチェーンに移動し、ログイン キーチェーン ログイン キーチェーン.

キーチェーン
証明書をダウンロードするには、ログイン エクスポート.
ファイル形式を選択 パーソナル情報交換(.p12).
証明書がダウンロードされるファイルになります。 .p12 ファイルを開いて、以下のコマンドを使用してBase64に変換してください。
これがあなたの
base64 -i BUILD_CERTIFICATE.p12 | pbcopy
シークレットです。証明書のパスワードも提供してください。このパスワードがあなたの BUILD_CERTIFICATE_BASE64 シークレットになります。 P12_PASSWORD 3. プロビジョニングプロファイル
開く
Apple Developer 3. プロビジョニングプロファイル そして適切なチームを選択してください。
次に、新しいプロファイルを作成し、 +

そして App Store Connect.

次に、適切なアプリを選択してください。注意してください。ワイルドカードを使用すると署名が失敗します。

適切な証明書を選択してください。前に作成したもので、有効期限の日付は今日と同じ日と月でなければなりません。次に Continue.

最後に、プロファイルの名前を入力し 作成.
この名前は、Fastlaneのプロファイルの識別に使用されます。
APPLE_PROFILE_NAME.

プロファイルを生成します。 .mobileprovision プロファイルをダウンロード

プロファイルをダウンロードBUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
プロファイルをBase64に変換し、シークレットとして保存してください。
4. Fastlaneファイルをコピー
Create the Fastlane folder at the root of your Capacitor/Ionic project and add the Fastfile there:
- Capgo IonicプロジェクトのルートディレクトリにFastlaneフォルダを作成し、Fastfileを追加してください。
<project-root>/fastlane/ - フォルダー:
<project-root>/fastlane/Fastfile
このレベルは package.json, capacitor.config.*, そして ios/ フォルダです。 その中には作成しないでください。 ios/App/.
platform :ios do
desc 'Export ipa and submit to TestFlight'
lane :beta do
keychain_info = { keychain_name: "ios-build-#{Time.now.to_i}.keychain", keychain_password: SecureRandom.uuid }
begin
setup_signing(keychain_info)
bump_build_number
build_app_with_signing(keychain_info)
submit_to_testflight
ensure
cleanup_keychain(keychain_info)
end
end
private_lane :setup_signing do |options|
create_keychain(
name: options[:keychain_name],
password: options[:keychain_password],
unlock: true,
timeout: 0,
lock_when_sleeps: false,
add_to_search_list: true
)
import_cert(options)
install_profile
update_project_settings
end
lane :bump_build_number do
file = File.read('../package.json')
data_hash = JSON.parse(file)
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
key_content: ENV['APPLE_KEY_CONTENT'],
is_key_content_base64: true,
duration: 1200,
in_house: false
)
build_num = app_store_build_number(
api_key: api_key,
app_identifier: ENV['BUNDLE_IDENTIFIER'],
live: false
)
build_num = build_num + 1
UI.message("Bumped build number to #{build_num}")
increment_build_number(
build_number: build_num,
xcodeproj: "./ios/App/App.xcodeproj",
skip_info_plist: true
)
end
private_lane :import_cert do |options|
cert_path = "#{Dir.tmpdir}/build_certificate.p12"
File.write(cert_path, Base64.decode64(ENV['BUILD_CERTIFICATE_BASE64']))
import_certificate(
certificate_path: cert_path,
certificate_password: ENV['P12_PASSWORD'] || "",
keychain_name: options[:keychain_name],
keychain_password: options[:keychain_password],
log_output: true
)
File.delete(cert_path)
end
private_lane :cleanup_keychain do |options|
delete_keychain(
name: options[:keychain_name]
)
end
private_lane :install_profile do
profile_path = "#{Dir.tmpdir}/build_pp.mobileprovision"
File.write(profile_path, Base64.decode64(ENV['BUILD_PROVISION_PROFILE_BASE64']))
UI.user_error!("Failed to create provisioning profile at #{profile_path}") unless File.exist?(profile_path)
ENV['PROVISIONING_PROFILE_PATH'] = profile_path
install_provisioning_profile(path: profile_path)
File.delete(profile_path)
end
private_lane :update_project_settings do
update_code_signing_settings(
use_automatic_signing: false,
path: "./ios/App/App.xcodeproj",
code_sign_identity: "iPhone Distribution",
profile_name: ENV['APPLE_PROFILE_NAME'],
bundle_identifier: ENV['BUNDLE_IDENTIFIER'],
team_id: ENV['APP_STORE_CONNECT_TEAM_ID']
)
update_project_team(
path: "./ios/App/App.xcodeproj",
teamid: ENV['APP_STORE_CONNECT_TEAM_ID']
)
end
private_lane :build_app_with_signing do |options|
unlock_keychain(
path: options[:keychain_name],
password: options[:keychain_password],
set_default: false
)
build_app(
workspace: "./ios/App/App.xcworkspace",
scheme: "App",
configuration: "Release",
export_method: "app-store",
output_name: "App.ipa",
export_options: {
provisioningProfiles: {
ENV['BUNDLE_IDENTIFIER'] => ENV['APPLE_PROFILE_NAME']
}
},
xcargs: "-verbose",
buildlog_path: "./build_logs",
export_xcargs: "-allowProvisioningUpdates",
)
end
private_lane :submit_to_testflight do
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
key_content: ENV['APPLE_KEY_CONTENT'],
is_key_content_base64: true,
duration: 1200,
in_house: false
)
pilot(
api_key: api_key,
skip_waiting_for_build_processing: true,
skip_submission: true,
distribute_external: false,
notify_external_testers: false,
ipa: "./App.ipa"
)
end
end
5. シークレットの設定
GitHub .env Actionsは、次のステップで設定したリポジトリのシークレットを使用します。 ただし、ローカルファイルは必要ありません。 ただし、ローカルで実行またはテストしたい場合は、Fastlaneをローカルマシンから実行したい場合は、ローカルファイルが必要になります。
ローカルテストの場合、 <project-root>/fastlane/.env をローカルマシンに作成してください。 そのファイルはコミットしないでください。 そのファイルを Fastfileに追加してください (またはすでに無視されていることを確認してください)。 ここに例があります: fastlane/.env APP_STORE_CONNECT_TEAM_IDの取得 .gitignore first (or verify it is already ignored). Here is an example:
APP_STORE_CONNECT_TEAM_ID=UVTJ336J2D
BUNDLE_IDENTIFIER=ee.forgr.testfastlane
# See previous section for these secrets
BUILD_CERTIFICATE_BASE64=
BUILD_PROVISION_PROFILE_BASE64=
APPLE_KEY_ID=
APPLE_ISSUER_ID=
APPLE_KEY_CONTENT=
P12_PASSWORD=
APPLE_PROFILE_NAME=
Getting the APP_STORE_CONNECT_TEAM_ID
Go to Developer Center と下にスクロールして Membership details セクションまで Team ID is the value you need to set in the APP_STORE_CONNECT_TEAM_ID 必要な値は
app-store-connect-team-id
- BUNDLE_IDENTIFIERを取得する
- Xcodeを開く
Appプロジェクトナビゲータで - タブをクリックする
Signing and Capabilities - 値をコピーしてください。
Bundle identifierこの値は、以下の__CAPGO_KEEP_0__に設定する必要があります。BUNDLE_IDENTIFIERシークレット。
6. ビルド処理
In GitHub Actions, プライベートプロジェクトの場合、ビルドの予定コストは$0.08/分 x 15分 = $1.2 、または、プロジェクトの構成と依存関係に応じて、より高くなる可能性があります。
コストの懸念がある場合は、プライベートプロジェクトの場合、 ビルドのコストを削減するには、Capgo Actionsの設定を調整することを検討してください。Capgo Actionsのコストは、実行時間に基づいて課金されます。
Capgo Actionsのコストを削減するには、CI/CDワークフローを実行するのにかかる時間を短縮することを検討してください。 skip_waiting_for_build_processing まで true。Capgo Builderでは、App Store Connectのビルド処理が完了するのを待たずにビルド時間を節約できます。
ただし、代わりに、App Store Connectにアプリの適合情報を手動で更新する必要があります。
この最適化は、ビルド時間が金銭的コストとなるプライベートプロジェクト向けに主に有効です。無料のプロジェクトでは、ビルド時間は無料なので、この設定を有効にする必要はありません。詳しくはGitHubの 価格設定ページ を参照してください。
7. Setup GitHub Actions
7. GitHubの設定
__CAPGO_KEEP_0__のシークレットを設定 .env シークレットをコピーし、GitHubのリポジトリのシークレットに貼り付けます。
ここに移動 設定 > シークレットと変数 > アクション > 新しいリポジトリシークレット
2. BUILD_CERTIFICATE_BASE64 Base64エンコードされた証明書。
3. BUILD_PROVISION_PROFILE_BASE64 Base64エンコードされたプロビジョニングプロファイル。
4. BUNDLE_IDENTIFIER アプリのバンドルID。
5. APPLE_KEY_ID アプリストアコネクト API キー 🔺キーID。
6. APPLE_ISSUER_ID アプリストアコネクト API キー 🔺発行者ID。
7. APPLE_KEY_CONTENT App Store Connect API Key 🔺 Key content of .p8, 確認してください
8. GitHub ワークフロー ファイルを設定してください
GitHub ワークフロー ディレクトリを作成してください
cd .github/workflows
その中で workflow ファイルを作成し build-upload-ios.yml以下を追加してください
name: Build source code on ios
on:
push:
tags:
- '*'
jobs:
build_ios:
runs-on: macOS-latest
steps:
- uses: actions/checkout@v6
- name: Set Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
id: install_code
run: npm ci
- name: Build
id: build_code
run: npm run build
- uses: actions/cache@v5
with:
path: ios/App/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Sync
id: sync_code
run: npx cap sync
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- uses: maierj/fastlane-action@v3.1.0
env:
APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
BUNDLE_IDENTIFIER: ${{ secrets.BUNDLE_IDENTIFIER }}
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
APPLE_PROFILE_NAME: ${{ secrets.APPLE_PROFILE_NAME }}
with:
lane: ios beta
- name: Upload release bundle
uses: actions/upload-artifact@v6
with:
name: ios-release
path: ./App.ipa
retention-days: 10
このワークフローは、各 GitHub タグ後にトリガーされるべきです タグ自動化するには、__CAPGO_KEEP_0__ アクションを使用してビルドとリリースを自動化する方法については Automatic build and release with GitHub actions 最初に。
次に、このワークフローは、NodeJS の依存関係を取得し、インストールし、JavaScript アプリケーションをビルドします。
毎回、コミットを送ると、テストフライトでリリースが作成されます。
Your App doesn’t need to use Ionic, only Capacitor base is mandatory., it can have old Cordova module, but Capacitor JS plugin should be preferred.
8. ワークフローをトリガーする
コミットを作成する
変更を コミットする、コミットを送ると、リポジトリのアクティブなワークフローが表示されます。
ワークフローをトリガーする
ブランチに新しいコミットをプッシュする main または development ワークフローをトリガーするには。

数分後、App Store Connect ダッシュボードでビルドが利用可能になります。

9. ローカルマシンからデプロイすることはできますか?
はい、簡単です。
Xcode を使用してアプリをビルドおよび署名できます。
関連記事
CI/CD セットアップ ガイド
- 自動 Capacitor Android ビルドと GitHub アクション - Android CI/CD セットアップの完了
- 自動ビルドとリリースと GitHub アクション - 全CI/CDパイプラインチュートリアル
- DevとProdビルドの管理にGitHubアクションを使用 - 環境管理
- 自動CapacitoriOSビルドにMatchを使用 - Fastlane Matchを使用した代替
CI/CDプラットフォームの代替
- GitLab CIでビルド - GitLabの代替
- CodeMagicでビルド - CodeMagicのセットアップガイド
ライブアップデートとデプロイ
- Capgoライブアップデートドキュメント - アプリにOTA更新を追加します。
- - CapgoとCI/CD統合 - パイプラインにリアルタイム更新を統合する
- 感謝
- この記事は以下の記事に基づいています。
- - IOS向けの継続的な配信をFastlaneとGitHubアクションで行う
- - Fastlaneドキュメント
- - @mrogunlanaからこのGitHubメッセージ
- - このGitHubドキュメント
- 自動Capacitor IOSビルドからGitHubアクションと証明書で続行する
- __CAPGO_KEEP_0__を使用している場合 - 自動Capacitor IOSビルドからGitHubアクションと証明書で続行する CI/CD自動化を計画するには、を接続する必要があります。 Capgo CI/CD 製品ワークフローにおけるCapgo CI/CDの機能 Capgoネイティブビルド 製品ワークフローにおけるCapgoネイティブビルドの機能 Capgo統合 for the product workflow in Capgo Integrations, CI/CD統合 CI/CD統合の実装詳細 GitHubアクション統合 GitHubアクション統合の実装詳細