CI/CDの設定はCapacitorアプリケーションに複雑で時間のかかることがあります。ここでは、必要な情報をご紹介します。
新しいビルドの推奨: Capgo ビルドを使用します。
ここでは、__CAPGO_KEEP_0__ ビルドを使用することをお勧めします。 Capgo ビルドとCapgo CLIを使用して、ネイティブCapgoビルドを実行します。 このFastlaneガイドは、既存のCapacitorアクションパイプラインを維持しているチーム向けに残されていますが、新しいiOSビルドの場合は、__CAPGO_KEEP_1__ __CAPGO_KEEP_2__を使用するようにしてください。Fastlane、Xcodeランナー、証明書、プロビジョニングプロファイル、アップロードスクリプトの維持を自分で行う必要がなくなります。 This Fastlane guide is kept for teams maintaining existing GitHub Actions pipelines, but new iOS builds should use the Capgo CLI so you do not have to maintain Fastlane, Xcode runners, certificates, and upload scripts yourself.
Capgo Build for CI/CD by Capgo
__CAPGO_KEEP_0__ ビルドは、既存のCI/CDパイプラインから署名されたネイティブiOSビルドを実行します。 Capgo Build __CAPGO_KEEP_0__ ビルドを__CAPGO_KEEP_1__アクション、GitLab CI、Jenkins、またはローカルスクリプトから、Webビルド後にトリガーしてください。
- __CAPGO_KEEP_0__: Trigger Capgo Build from GitHub Actions, GitLab CI, Jenkins, or local scripts after your web build and
npx cap sync. - CIシークレットから署名: App Store Connectのキー、証明書、プロビジョニングプロファイル、パスワード、チームIDをCIシークレットに保管してください。
- ネイティブランナーのメンテナンスなし: Capgo BuildはAppleのビルド環境を管理しているので、macOSランナー、Xcodeイメージ、またはFastlaneのレーンを管理する必要がありません。
- アーティファクトと提出: QAで署名されたアーティファクトをダウンロードしたり、Capgo CLIを通じてリリースビルドを提出することができます。
価格
- : Capgo プランは月額$12から始まります。
- 含まれるもの
- : OTA更新と約15回のネイティブビルドが含まれます。
__CAPGO_KEEP_0__ BuildをCI/CDに設定するには
ここでは何が必要ですか:
iOS用のFastlaneとGitHubアクション、証明書の連続的な配信
前提条件
チュートリアルを続ける前に
- __CAPGO_KEEP_0__がインストールされていることを確認してください 開発環境にインストール iOS開発者プログラムのメンバーであることを確認してください
- 価格に関する重要な情報
価格:__CAPGO_KEEP_0__アクション

https://github.com/features/actions
」無料 __CAPGO_KEEP_0__に基づいて選択したマシンに応じて、制限まで
App Store Connectを使用します macOS スクリーンショットに表示されている価格と制限(チュートリアルの作成時点での価格、将来の変更に注意)
要件と価格について注意した後、続きます
注:この投稿では、App Store Connectでアプリを作成していることを前提としています。Fastlaneによって重要な情報がコピーされます。
このチュートリアルで学ぶこと
この投稿で従う手順
- App Store Connect APIとFastlaneを使用する
- 必要なもの:
- App Store Connect API Keyを作成する
- App Store Connect API キーを使用する
- 必要なもの:
- Fastlane ファイルをコピーする
- GitHub アクションを設定する
1. App Store Connect API を使用する
2021年2月以降、すべてのユーザーがApp Store Connectにサインインするには、2要素認証または2段階認証が必要になります。Apple IDのセキュリティの追加レイヤーは、自分のアカウントにアクセスできるのは自分だけであることを保証するため、セキュリティ上の重要な要素です。
From Apple Support
要件
FastlaneがApp Store Connect APIを使用してアプリをアップロードできるようにするには、以下の3つの情報を提供する必要があります。 3 もの
- 発行者ID
- Key ID
- Key file or Key content
App Store Connect API Keyの取得
App Store Connectでキーを生成するには、Adminの権限が必要です。権限がない場合は、この記事を参照してもらうように指示してください。
-
ログイン App Store Connect.
-
選択 ユーザーとアクセス.

3 — インテグレーションタブを選択

- 「Generate API Key」または「Add (+)」ボタンをクリック

- キーを作成する際の名前を入力してください。キーを作成する際の名前は、キー自体とは無関係です。

6 — キーにアクセスする権限を選択してください。チームのメンバーに与えられる権限と同じ権限がキーに適用されます。詳しくは 役割の権限をご覧ください。 キーを作成する際は.
- App manager
An API key’s access cannot be limited to specific apps.
Click Generate。

ページに表示される新しいキー名、キーID、ダウンロードリンク、他に必要な情報がすべて入手できます。
<1> 問題 ID。 (APPLE_ISSUER_ID <2> キー ID。 (
<3> 「__CAPGO_KEEP_0__ キーをダウンロードする」ボタンをクリックして、__CAPGO_KEEP_1__ プライベート キーをダウンロードしてください。ダウンロード リンクは、プライベート キーがまだダウンロードされていない場合にのみ表示されます。Apple はプライベート キーを保持していないため、ダウンロードすることができます。ただし、プライベート キーは一度だけダウンロードできます。APPLE_KEY_ID プライベート キーを安全な場所に保存してください。キーを共有しないでください。キーを __CAPGO_KEEP_0__ リポジトリに保存しないでください。クライアントサイドの __CAPGO_KEEP_1__ にキーを含めないでください。
<3> Click “Download API Key” to download your API private key. The download link appears only if the private key has not yet been downloaded. Apple does not keep a copy of the private key. So, you can download it only once.
🔴 Store your private key in a safe place. You should never share your keys, store keys in a code repository, or include keys in client-side code.
Using an App Store Connect API Key
The API Key file (p8 file that you download), the key ID, and the issuer ID are required in order to create the JWT token for authorization. There are multiple ways that this information can be passed into Fastlane. I chose to use the Fastlane’s new action app_store_connect_api_keyを参照してください。 この方法を示すのは、CI で最も多く使用できるようにするためです。環境変数を設定できる CI であれば、最も簡単な方法です。ダウンロードした p8 ファイルを Base64 に変換して、シークレットとして保存してください。
Please convert the p8 file that you download to Base64 and store it as a secret (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!
2. 証明書
Open XCode and go to 設定 > アカウント > Apple ID > チーム とチームを選択してください。

クリックしてください 証明書を管理.
__CAPGO_KEEP_0__の証明書がまだ作成されていない場合は、新しい証明書を作成できます。
クリックしてください + と選択 Apple Distribution

次に、キーチェーンに移動して証明書をファイルとしてダウンロードする必要があります。 .p12 これを行うには、キーチェーンに移動し、ログイン
キーチェーンに切り替え、ログイン keychainに切り替え tabに切り替え 私の証明書.

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

と、適切なチームを選択してください。 App Store Connect.

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

先ほど作成した適切な証明書を選択し、有効期限の日付を確認してください (有効期限の日付は今日と同じ日と月でなければなりません) そしてクリックしてください Continue.

最後にプロファイルの名前を入力し、クリックしてください Generate.
プロファイルの名前は、Fastlane の値の下でプロファイルを識別するために使用されます。
APPLE_PROFILE_NAME.

プロファイルを Base64 に変換し、シークレットとして保存してください ( .mobileprovision 4. Fastlane のファイルをコピーしてください

プロファイルをダウンロードBUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
4. Copy Fastlane files
RubyライブラリのFastlaneは、モバイル開発の一般的なタスクを自動化するために作成されました。Fastlaneを使用すると、カスタムの「レーン」を設定できます。これらの「レーン」は、通常Android Studioを使用して実行するタスクを実行する「アクション」のシリーズです。Fastlaneを使用できますが、このチュートリアルの目的のために、このチュートリアルでは、コアアクションの少数のセットのみを使用します。
Create the Fastlane folder at the root of your Capacitor/Ionic project and add the Fastfile there:
- フォルダ:
<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 Actions uses the repository secrets you configure in the next step. You only need a local .env ローカルテストのために、
の横に <project-root>/fastlane/.env を作成してください。 Fastfileこのファイルをコミットしないようにしてください。 fastlane/.env に追加 .gitignore 最初のファイル(または既に無視されていることを確認)します。ここに例があります。
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=
APP_STORE_CONNECT_TEAM_IDを取得する
Developer Center に移動し セクションまでスクロールします。
Membership details 必要な値は Team ID シークレットの APP_STORE_CONNECT_TEAM_ID app-store-connect-team-id
Getting the BUNDLE_IDENTIFIER
- Xcodeを開く
- プロジェクトナビゲータで、
Appプロジェクトナビゲータで - タブをクリックしてください
Signing and Capabilities - CI/CDワークフローを実行するのに必要な
Bundle identifierApp Store Connectに設定する値です。BUNDLE_IDENTIFIER__CAPGO_KEEP_0__
Capgoのアクションで、
In GitHub Actions, 分 分
For private projects, the estimated cost per build can go up to $0.08/min x 15 mins = $1.2, or more, depending on the configuration and dependencies of your project.
or more, depending on the configuration and dependencies of your project. skip_waiting_for_build_processing If you’re concerned about costs for private projects, you can set trueto
. This will save build minutes by not waiting for App Store Connect to finish processing the build.
This optimization is mainly useful for private projects where build minutes cost money. For public/free projects, the build minutes are free so there’s no need to enable this setting. See GitHub’s This optimization is mainly useful for private projects where build minutes cost money. For public/free projects, the build minutes are free so there’s no need to enable this setting. See __CAPGO_KEEP_0__’s pricing page
7. Setup GitHub Actions
7. GitHubの設定
__CAPGO_KEEP_0__のシークレットをファイルからコピーし、__CAPGO_KEEP_0__リポジトリのシークレットに貼り付けます。 .env GitHub
設定 > シークレットと変数 > アクション > 新しいリポジトリシークレット __CAPGO_KEEP_0__-secrets
2. BUILD_CERTIFICATE_BASE64 __CAPGO_KEEP_0__のシークレットをファイルからコピーし、__CAPGO_KEEP_0__リポジトリのシークレットに貼り付けます。
3. BUILD_PROVISION_PROFILE_BASE64 - Base64 エンコードされたプロビジョニング プロファイル。
4. BUNDLE_IDENTIFIER - アプリのバンドル ID。
5. APPLE_KEY_ID — App Store Connect API キー 🔺キー ID。
6. APPLE_ISSUER_ID — App Store Connect API キー 🔺発行者 ID。
7. APPLE_KEY_CONTENT — App Store Connect API キー 🔺キー内容 .p8, 確認してください
8. GitHub ワークフロー ファイルを設定する
Create a GitHub workflow directory.
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後にトリガーされるべきです。 タグタグを自動化する必要がある場合は、 自動ビルドとリリースにGitHubアクションを使用します。 最初に。
次に、このワークフローはNodeJSの依存関係を取得し、JavaScriptアプリをインストールしてビルドします。
各コミットを送信するたびに、テストフライトでリリースが作成されます。
アプリはIonicを使用する必要はありません。ただし、Capacitorベースは必須です。古いCordovaモジュールを含むことができますが、CapacitorJSプラグインを優先することをお勧めします。
8. ワークフローをトリガーする
コミットを作成する
コミットを作成する Create a Commitリポジトリ内でアクティブなワークフローを確認できます。
ワークフローをトリガーする
ブランチに新しいコミットをプッシュする main または development ワークフローをトリガーするには。

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

9. ローカルマシンからデプロイすることはできますか?
はい、できます。簡単です。
Xcode を使用してアプリをビルドおよび署名できます。いつもと同じです。
関連記事
CI/CD セットアップ ガイド
- Capacitorで自動生成されるAndroidビルドとGitHubアクション - Android CI/CD セットアップの完了
- GitHubアクションで自動ビルドとリリース - CI/CD パイプラインのフルチュートリアル
- GitHubアクションで開発と本番ビルドの管理 - 環境管理
- Capacitorで自動生成されるiOSビルドとMatch - Fastlane Matchを使用した代替
代替CI/CDプラットフォーム
- GitLab CIでビルド - GitLabの代替
- CodeMagicでビルド - CodeMagic設定ガイド
リアルタイム更新 & デプロイ
- Capgo リアルタイム更新ドキュメント - アプリにOTA更新を追加
- CI/CD統合 with Capgo - パイプラインにリアルタイム更新を統合
感謝
このブログは以下の記事に基づいています:
自動Capacitor IOS ビルドから、GitHubアクションと証明書とともに続けます
自動__CAPGO_KEEP_0__ IOS ビルドと__CAPGO_KEEP_1__アクションと証明書を使用している場合 自動Capacitor IOS ビルドとGitHubアクションと証明書を使用している場合 CI/CDの自動化を計画する場合、__CAPGO_KEEP_0__ CI/CDと接続します Capgo CI/CDの製品ワークフロー Capgoネイティブビルドの製品ワークフロー Capgo統合の製品ワークフロー Capgo統合の製品ワークフロー Capgo Integrations CI/CDの自動化を計画する場合、Capgo CI/CDと接続します __CAPGO_KEEP_0__ CI/CDの製品ワークフロー CI/CD統合の実装詳細について GitHub アクション統合 for the implementation detail in GitHub Actions Integration.