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__ ビルド Capgo ビルドは、既存のCI/CDパイプラインから署名されたネイティブiOSビルドを実行します。 既存のパイプラインと連携します。
- : __CAPGO_KEEP_0__ ビルドを__CAPGO_KEEP_1__アクション、GitLab CI、Jenkins、またはローカルスクリプトから、Webビルド後にトリガーします。: 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_KEEP_0__ ビルドは管理されたAppleビルド環境を提供するため、macOSランナーの管理、Xcodeイメージ、Fastlaneのレーンの管理は不要です。: Capgo Build provides maintained Apple build environments, so you do not have to manage macOS runners, Xcode images, or Fastlane lanes.
- : QAのために署名済みアーティファクトをダウンロードしたり、__CAPGO_KEEP_0__ __CAPGO_KEEP_1__ を通じてリリースビルドを提出することができます。: Download signed artifacts for QA or submit release builds through the Capgo CLI.
: __CAPGO_KEEP_0__ プランは月額12ドルから始まります。
- Capgo plans start at $12/month
- : 追加のビルド分数はクレジットを通じて1分あたり請求されます。
- __CAPGO_KEEP_0__ ビルドをCI/CDにセットアップ
価格設定
ここでは、行う必要のあることを説明します。
FastlaneとGitHubアクション、証明書を使用したiOSの継続的デリバリー
前提条件
このチュートリアルに進む前に
- Fastlaneが開発環境にインストールされていることを確認してください。 開発環境でiOS開発者プログラムのメンバーであることを確認してください。 価格に関する重要な情報
- 価格: __CAPGO_KEEP_0__アクション
https://__CAPGO_KEEP_0__.com/features/actions

__CAPGO_KEEP_0__フリー 選択したマシンに応じて、制限まで
このチュートリアルでは MacOS マシンの価格と制限を確認できます (価格はこのチュートリアルの作成時点のもので、将来の変更に応じて異なる場合があります)
要件と価格についての注意を出してから続けましょう。
このチュートリアルでは、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 発行者 ID
- Issuer 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.
の管理者

生成をクリックしてください。
<1> Issue ID. (APPLE_ISSUER_ID secret)
<2> Key ID. (APPLE_KEY_ID secret)
<3> API をダウンロードするには、「API キーをダウンロード」ボタンをクリックしてください。プライベート キーはダウンロードした後、ダウンロード リンクは表示されなくなります。Apple はプライベート キーを保管していないため、ダウンロードは一度だけ可能です。
🔴 プライベート キーを安全な場所に保存してください。キーを共有しないでください、キーを code リポジトリに保存しないでください、またはクライアントサイドの code に含めないでください。
App Store Connect API キー
API キー ファイル (ダウンロードした p8 ファイル)、キー ID、発行者 ID は、承認のために JWT トークンを作成するために必要です。この情報を Fastlane に渡す方法は複数あります。私は、CI で環境変数を設定できるため、Fastlane の新しいアクションを使用しました。 app_store_connect_api_keyFastlane ドキュメントを参照してください。 この方法を示すのは、CI で環境変数を設定できるため、最も簡単な方法であると考えているためです。ダウンロードした p8 ファイルを Base64 に変換し、シークレットとして保存してください (
secret)APPLE_KEY_CONTENT).
base64 -i APPLE_KEY_CONTENT.p8 | pbcopy
今、App Store ConnectをFastlaneで管理できるようになりました。APIキーはすばらしい!
2. 証明書
XCodeを開いて 設定 > アカウント > Apple ID > チーム チームを選択してください。

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

次に、キーチェーンに移動して証明書をダウンロードする必要があります。 .p12 ファイルとして
証明書をダウンロードするには、キーチェーンに移動し、ログイン キーチェーンに切り替え、タブ を選択してください マイ証明書.

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

そして、 App Store Connect.

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

適切な証明書を選択してください (有効期限の日付を確認してください、今日と同じ日と月でなければなりません) そして 続行.

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

プロファイルをダウンロードすることができます .mobileprovision ファイルとして

プロファイルをBase64に変換してシークレットとして保存してください (BUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
4. Fastlaneファイルをコピー
Fastlaneは、Rubyライブラリで、モバイル開発の一般的なタスクを自動化するために作成されたものです。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 __CAPGO_KEEP_0__ Fastfile. Do not commit this file. Add 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 APP_STORE_CONNECT_TEAM_ID
- Xcodeを開く
- プロジェクトナビゲータで
Appをダブルクリックする - タブをクリックする
Signing and Capabilities - の値をコピーする
Bundle identifierの値を設定する必要があります。BUNDLE_IDENTIFIERbundle-identifier-xcode
Actions
In GitHub Actions, __CAPGO_KEEP_0__ Actions
プライベートプロジェクトの場合、ビルドの予定コストは $0.08/分 x 15 分 = $1.2、または、プロジェクトの構成と依存関係に応じて、さらに高額になる可能性があります。
コストの懸念がある場合は、 skip_waiting_for_build_processing を設定できます。 true。これにより、App Store Connect がビルドを処理するのを待つ必要がなくなるため、ビルド時間が節約されます。
ただし、代わりに、App Store Connect におけるアプリの適合性情報を手動で更新する必要があります。これにより、ユーザーにビルドを配布することができます。
この最適化は、ビルド時間がコストがかかるプライベートプロジェクト向けに主に有効です。パブリック/無料プロジェクトの場合、ビルド時間は無料なので、この設定を有効にする必要はありません。GitHubの の価格設定ページ を参照してください。
7. GitHubの設定
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 — App Store Connect API キー 🔺Key ID。
6. APPLE_ISSUER_ID — App Store Connect API キー 🔺Issuer ID。
7. APPLE_KEY_CONTENT — App Store Connect API キー 🔺 キーの内容。 .p8, Capgo のアプリフロー機能を使用して、プロビジョニング プロファイルを自動生成および管理できます。
8. Configure GitHub workflow file
8. GitHub ワークフロー ファイルを設定します。
cd .github/workflows
Capgo のワークフロー ディレクトリを作成します。 workflow ディレクトリ内にファイルを作成し、以下の内容を追加します。 build-upload-ios.yml__CAPGO_KEEP_0__
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 の後でトリガーされるべきです。 タグタグを自動化する必要がある場合は、 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. ワークフローをトリガーする
コミットを作成する
コミットを作成する 8. ワークフローをトリガーする、リポジトリ内でアクティブなワークフローを確認します。
ワークフローをトリガーします。
新しいコミットをブランチにプッシュします。 main または development ワークフローをトリガーします。

はい、できます。簡単です。

関連記事
ワークフローが開始されました。コミット
数分後、アプリストア接続ダッシュボードでビルドが利用可能になります。
テストフライトダッシュボード
CI/CD セットアップ ガイド
- Automatic Capacitor Android Build with GitHub Actions - Android CI/CD セットアップの完了
- Automatic Build and Release with GitHub Actions - CI/CD パイプラインの完全なチュートリアル
- Manage Dev and Prod Builds with GitHub Actions - 環境管理
- Capgo Actions を使用した自動 Capacitor iOS ビルド - Fastlane Match を使用した代替
代替 CI/CD プラットフォーム
- GitLab CI でビルド - GitLab の代替
- CodeMagicでビルド - CodeMagicの設定ガイド
リアルタイム更新とデプロイ
- Capgoリアルタイム更新ドキュメント - アプリにOTA更新を追加
- CI/CD Integration with Capgo - パイプラインにリアルタイム更新を統合
感謝
このブログは以下の記事に基づいています。
- iOS向けの継続的デリバリーをFastlaneとGitHubアクションで
- Fastlaneドキュメント
- このGitHubメッセージは@mrogunlanaからです
- This GitHub documentation
Keep going from Automatic Capacitor IOS build with GitHub actions with certificate
Capgoの自動iOSビルドを使用している場合 Automatic Capacitor IOS build with GitHub actions with certificate CI/CDの自動化を計画するには、CapgoのCI/CDと接続する Capgo CI/CD for the product workflow in Capgo CI/CD, Capgo Native Builds for the product workflow in Capgo Native Builds, Capgo Integrations for the product workflow in Capgo Integrations, CI/CD統合 CI/CD統合の実装詳細について GitHub Actions統合 GitHub Actions統合の実装詳細について