CI/CDの設定は Capacitor アプリケーションに複雑で時間のかかる作業です。ここでは、必要なことを知っておくことが重要です。
推奨:新しいビルドの場合、Capgo ビルドを使用します。
今後は、__CAPGO_KEEP_0__ ビルドと __CAPGO_KEEP_1__ __CAPGO_KEEP_2__ を使用することをお勧めします。 Capgo Capgo で CLI をビルド このFastlaneガイドは、既存の Capacitor Actionsパイプラインを維持しているチーム向けに残されていますが、新しい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 CI/CD用ビルドに Capgo を使用
__CAPGO_KEEP_0__ ビルド Capgo ビルド CI/CD Pipeliningを使用して、iOSネイティブビルドを自動化します。
- CI/CD Pipeliningと一緒に使います。: Capgo ビルドを GitHub Actions、GitLab CI、Jenkins、またはローカルスクリプトからトリガーします。Webビルド後に
npx cap sync. - CIシークレットから署名します。: App Store Connectのキー、証明書、プロビジョニングプロファイル、パスワード、チームIDをCIシークレットに保存します。
- ネイティブランナーの管理は不要です。: Capgo ビルドは、macOSランナー、Xcodeイメージ、Fastlaneのレーンの管理を必要とせずに、Appleのビルド環境を提供します。
- アーティファクトと提出: QA用に署名されたアーティファクトをダウンロードしたり、Capgo CLIを使用してリリースビルドを提出します。
価格
- Capgo プランは 1 か月あたり 12 ドルから
- 自動 OTA 更新と約 15 つのネイティブ ビルド毎月
- 分単位でクレジットを通じて課金される追加ビルド時間
手動設定ガイド
ここで行う必要があります
iOS向け継続的デリバリーのFastlaneとGitHubアクション、証明書
前提条件
このチュートリアルに進む前に
- Fastlaneが開発環境にインストールされていることを確認 installed 価格に関する重要な情報
- 重要な情報について
重要な情報

https://github.com/features/actions
サービスは ‘無料’ 制限まで無料ですが、選択したマシンに依存します。
このチュートリアルでは、macOSマシンを使用します。スクリーンショットには価格と制限が表示されています (価格はこのチュートリアルの作成時点のもので、将来の変更が可能です) macOS 注意: この投稿では、App Store Connectでアプリを作成していることを前提としています。重要な情報はFastlaneによってコピーされます。
このチュートリアルで学びます
この投稿で従う手順
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
- 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
- キーID
- キーファイルまたはキー内容
App Store ConnectのAPIキーを取得する
キーを生成するには、App Store Connectで管理者権限が必要です。管理者権限がない場合は、この記事を参照してもらうように指示してください。
-
ログイン アプリストア接続.
-
ユーザーとアクセス App Store Connectユーザーアクセス.

3 —

- Capgoでキーを生成するには、"Generate API Key"ボタンをクリックしてください。

- App Store Connect

Enter a name for the key. App Store Connectを生成します。 6 —.
- role permissions
Capacitor の API キーのアクセスは、特定のアプリに制限できません。
新しいキー名、キーID、ダウンロードリンク、他に関する情報がページに表示されます。

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

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

次に、キーチェーンに移動して証明書をファイルとしてダウンロードする必要があります。 .p12 file.
そのためには、キーチェーンにアクセスし、 ログイン キーチェーンのタブに移動し、 マイ・サertificate.

次に、ダウンロードしたい証明書を選択できます。 (証明書の日付を確認してください)
次に、証明書のプライベートキーに右クリックし、 エクスポート.
ファイル形式を選択 パーソナル・インフォメーション・エクスチェンジ(.p12).
証明書をファイルとしてダウンロードします。 .p12 ファイル
ファイルを開いて、ターミナルで以下のコマンドを実行してBase64に変換してください。
base64 -i BUILD_CERTIFICATE.p12 | pbcopy
これがあなたの BUILD_CERTIFICATE_BASE64 シークレットです。 また、証明書のパスワードを求められたら、パスワードを提供してください。 これがあなたの P12_PASSWORD シークレットです。
3. プロビジョニング プロファイル
オープン Apple Developer と適切なチームを選択してください。
次に、新しいプロファイルを作成し、 +

をクリックしてください。 そして、.

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

前に作成した正しい証明書を選択してください(有効期限の日付を確認してください。今日と同じ日と月でなければなりません)とクリックしてください。 Continue.

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

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

プロファイルをBase64に変換して、シークレットとして保存してください(BUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
4. Fastlaneファイルをコピーする
Fastlaneは、Androidスタジオで実行する一般的なモバイル開発タスクを自動化するために作成されたRubyライブラリです。Fastlaneを使用すると、カスタムの「レーン」を構成できます。これらのレーンには、「アクション」が含まれます。これらのアクションは、通常のAndroidスタジオで実行するタスクを実行します。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は、次のステップで設定するリポジトリシークレットを使用します。ローカルに .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を取得する
Go to セクションまでスクロールします。
必要な値は、 Membership details section Team ID value APP_STORE_CONNECT_TEAM_ID 秘密。
BUNDLE IDENTIFIER を取得する
- Xcode を開く
- プロジェクトナビゲータでダブルクリック
Appプロジェクトナビゲータで - タブをクリック
Signing and Capabilities - 値をコピーする。 これは、Xcode で設定する必要がある値です。
Bundle identifierBUNDLE IDENTIFIER (Xcode)BUNDLE_IDENTIFIER秘密。
targetLanguage
GitHub アクションで あなたは使用した分数に基づいて請求されます。 プライベートプロジェクトの場合、ビルドあたりの推定コストは
$0.08/分 x 15分 = $1.2 、または、プロジェクトの構成と依存関係に応じて、さらに高くなります。コストの懸念がある場合は、
を設定できます。これにより、App Store Connectがビルドを処理するのを待たずにビルド時間を節約できます。 skip_waiting_for_build_processing to trueこの最適化は、ビルド時間がコストがかかるプライベートプロジェクト向けに主に有効です。無料のパブリックプロジェクトでは、ビルド時間は無料なので、この設定を有効にする必要はありません。__CAPGO_KEEP_0__の
価格設定ページ
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 を参照してください。 詳細はこちら。
7. GitHub Actionsの設定
GitHub のシークレットを設定
ファイルからシークレットをコピーし、__CAPGO_KEEP_0__ リポジトリのシークレットにペーストしてください。 .env ファイルとGitHubリポジトリのシークレットに貼り付けてください。
設定 > シークレットと変数 アクション シークレットと変数 Actions シークレットと変数 新しいリポジトリのシークレット
2. BUILD_CERTIFICATE_BASE64 - Base64エンコードされた証明書。
3. BUILD_PROVISION_PROFILE_BASE64 - Base64エンコードされたプロビジョニングプロファイル。
4. BUNDLE_IDENTIFIER - アプリのバンドルID。
5. APPLE_KEY_ID — App Store Connect API Key 🔺Key ID。
6. APPLE_ISSUER_ID — App Store Connect API Key 🔺Issuer ID。
7. APPLE_KEY_CONTENT — App Store Connect API Key 🔺 Key の内容。 .p8, 確認してください。
8. GitHub ワークフロー ファイルを設定します。
GitHub ワークフロー ディレクトリを作成します。
cd .github/workflows
Inside the workflow ファイルを作成し、CapacitorのiOSビルドを自動化するGitHubアクション 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
Capgoのワークフローは、各GitHub後にトリガーされるべきです。 タグ自動化タグの場合、以下のリンクを参照ください。 自動ビルドとリリースの実行に GitHub アクションを使用します。 最初。
ノードJSの依存関係を取得し、インストールし、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 HTMLテキストのフラグメント

ページ/エリア:Capacitorライブアップデートの代替比較ページ。役割:長いマーケティングまたは法的文章。見つける:ページalternatives.astro。Capgo製品/ブランドと開発者用語を完全に保持する。

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