マッチを使った自動GitHub iOS ビルドの__CAPGO_KEEP_1__アクション
CapacitorアプリのCI/CD設定は複雑で時間がかかることがあります。ここでは、必要なことを知っておくことがおすすめです。
新しいビルドの推奨: Capgo ビルドを使用
今後は__CAPGO_KEEP_0__ ビルドを使用することをお勧めします。 Capgo ビルドとCapgo CLI Capacitor ビルドのためのネイティブCapacitor ビルドに適しています。 このFastlane Matchガイドは、既存のGitHub Actionsパイプラインを維持しているチーム向けに残されていますが、新しいiOSビルドの場合はCapgo CLIを使用することをお勧めします。そうすることで、Fastlane、Matchリポジトリ、Xcodeランナー、証明書、アップロードスクリプトの管理を自分で行う必要がなくなります。
Capgo Build for CI/CD by Capgo
Fastlane Match、Xcodeランナー、証明書、プロビジョニングプロファイル、アップロードスクリプトの管理をスキップしてください。 Capgo ビルド CI/CD pipelineから署名されたネイティブiOSビルドを実行します。
- あなたのpipelineと一緒に動作します。: Capgo BuildをGitHub Actions、GitLab CI、Jenkins、またはローカルスクリプトからトリガーします。ウェブビルド後に
npx cap sync. - CIシークレットから署名: App Store Connectのキー、証明書、プロビジョニングプロファイル、パスワード、チームIDをあなたのCIシークレットに保持します。
- ネイティブランナーのメンテナンスなし: Capgo BuildはAppleのビルド環境を維持しているので、macOSランナー、Xcodeイメージ、Fastlane、またはMatchリポジトリを管理する必要はありません。
- アーティファクトと提出: QA用に署名されたアーティファクトをダウンロードするか、Capgo CLIを通じてリリースビルドを提出します。
料金
- Capgo プランは月額$12から始まります。
- OTA更新と約15のネイティブビルドを含みます。
- 分単位でクレジットを通じて課金される追加ビルド時間
手動セットアップガイド
ここで行う必要があります:
Fastlane と GitHub Actions を使用した iOS の継続的デリバリー
前提条件
このチュートリアルに進む前に…
- 開発環境に Fastlane がインストールされていること iOS 開発者プログラムのメンバーであること 読む気分です…
- Extra build minutes are billed by minute through credits
- Set up __CAPGO_KEEP_0__ Build in CI/CD
- 多くの開発者がチームを組む場合、別のオプションとしては fastlane cert シンプルなワークフローを実現するために
価格について重要な注意事項

https://github.com/features/actions
サービスは、選択したマシンに応じて、一定の制限まで無料です。
このチュートリアルで使用するのは macOS マシンの価格と制限を確認できます (価格はこのチュートリアルの作成時点のもので、将来の変更があってもかまいません)
🔴 価格や要件については注意しておきました。続けたい場合は、続きます…
📣 このチュートリアルでは、iTunes Connectでアプリを作成し、Appleのエコシステムの証明書を取得していることを前提としています。Fastlaneで全てをコピーします!
Let's dive in
この記事の手順
- App Store Connectの使用APIとFastlane Match
- 必要なもの
- App Store ConnectのAPIキーを作成する
- App Store ConnectのAPIキーを使用する
- Fastlaneファイルをコピーする
- Fastlane matchを設定する
1. App Store ConnectのAPIとFastlane Matchを使用する
2021年2月以降、すべてのユーザーがApp Store Connectにサインインするには、2要素認証または2段階認証が必要になります。Apple IDの追加セキュリティ層により、自分のアカウントにアクセスできるのはあなただけであることを保証します。
から Appleサポート
matchを始めるには、既存の証明書を取り消す必要があります。ただし、心配する必要はありません。新しい証明書は直接取得できます。
要件
App Store Connect API を使用するには、Fastlane が必要なのは 3 つです。 発行者ID
- キーID
- キーファイルまたはキー内容
- App Store Connect __CAPGO_KEEP_0__ キーの作成
Creating an App Store Connect API Key
1 — App Store Connect にログインする
App Store Connect __CAPGO_KEEP_0__.
2 — 選択 ユーザーとアクセス.

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

4 — Generate API キーまたは追加 (+) ボタンをクリック

5 — キーの名前を入力します。名前はあなたの参照用であり、キー自体の部分ではありません。

6 — アクセス下で、キーのロールを選択します。キーのロールは、チームのユーザーに適用されるロールと同じです。詳細は ロールの権限を参照してください。キーのロールを アプリマネージャー.
7 — Generate をクリックします。
API キーのアクセスは特定のアプリに制限できません。
__CAPGO_KEEP_0__ キーの名前、キーアイディ、ダウンロードリンク、他情報がページに表示されます。

ここで必要な3つの情報をすべて取得できます。
1. Issue ID
2. Key ID
<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.
🔴 プライベートキーを安全な場所に保存してください。キーを共有しないでください、キーを code リポジトリに保存しないでください、または code に含めることはできません。
API キーを使用する
API キー (ダウンロードした p8 ファイル)、キーアイディ、発行者 ID が JWT トークンを作成するために必要です。Fastlane の新しいアクションを使用して、これらの情報を Fastlane に入力する方法は複数あります。 app_store_connect_api_key. iOSアプリの自動ビルドのためのCapacitorのGitHubアクションをMatchで使う Fastlaneのドキュメント. CIで環境変数を設定できるので、最も簡単な方法だと思います。
FastlaneをApp Store ConnectのAPIキーで管理できるようになりました!
2. Fastlaneファイルをコピー
Fastlaneは、Android Studioで実行することができるiOSアプリの開発タスクを自動化するRubyライブラリです。Fastlaneを使うことで、カスタムの「レーン」を設定し、複数の「アクション」を組み合わせてタスクを実行することができます。
プロジェクトのルートディレクトリにFastlaneフォルダを作成し、以下のファイルをコピーしてください: Fastfile
default_platform(:ios)
DEVELOPER_APP_IDENTIFIER = ENV["DEVELOPER_APP_IDENTIFIER"]
DEVELOPER_APP_ID = ENV["DEVELOPER_APP_ID"]
PROVISIONING_PROFILE_SPECIFIER = ENV["PROVISIONING_PROFILE_SPECIFIER"]
TEMP_KEYCHAIN_USER = ENV["TEMP_KEYCHAIN_USER"]
TEMP_KEYCHAIN_PASSWORD = ENV["TEMP_KEYCHAIN_PASSWORD"]
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
GIT_USERNAME = ENV["GIT_USERNAME"]
GIT_TOKEN = ENV["GIT_TOKEN"]
def delete_temp_keychain(name)
delete_keychain(
name: name
) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db")
end
def create_temp_keychain(name, password)
create_keychain(
name: name,
password: password,
unlock: false,
timeout: 0
)
end
def ensure_temp_keychain(name, password)
delete_temp_keychain(name)
create_temp_keychain(name, password)
end
platform :ios do
lane :build do
build_app(
configuration: "Release",
workspace: "./ios/App/App.xcworkspace",
scheme: "App",
export_method: "app-store",
export_options: {
provisioningProfiles: {
DEVELOPER_APP_ID => "#{PROVISIONING_PROFILE_SPECIFIER}"
}
}
)
end
lane :refresh_profiles do
match(
type: "development",
force: true)
match(
type: "adhoc",
force: true)
end
desc "Register new device"
lane :register_new_device do |options|
device_name = prompt(text: "Enter the device name: ")
device_udid = prompt(text: "Enter the device UDID: ")
device_hash = {}
device_hash[device_name] = device_udid
register_devices(
devices: device_hash
)
refresh_profiles
end
lane :closed_beta do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_connect_api_key(
key_id: APPLE_KEY_ID,
issuer_id: APPLE_ISSUER_ID,
key_content: APPLE_KEY_CONTENT,
duration: 1200,
in_house: false
)
match(
type: 'appstore',
git_basic_authorization: Base64.strict_encode64("#{GIT_USERNAME}:#{GIT_TOKEN}"),
readonly: true,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
gym(
configuration: "Release",
workspace: "./ios/App/App.xcworkspace",
scheme: "App",
export_method: "app-store",
export_options: {
provisioningProfiles: {
DEVELOPER_APP_ID => "#{PROVISIONING_PROFILE_SPECIFIER}"
}
}
)
pilot(
apple_id: "#{DEVELOPER_APP_ID}",
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
skip_waiting_for_build_processing: true,
skip_submission: true,
distribute_external: false,
notify_external_testers: false,
ipa: "./App.ipa"
)
delete_temp_keychain(keychain_name)
end
lane :submit_review do
version = ''
Dir.chdir("..") do
file = File.read("package.json")
data = JSON.parse(file)
version = data["version"]
end
deliver(
app_version: version,
submit_for_review: true,
automatic_release: true,
force: true, # Skip HTMl report verification
skip_metadata: false,
skip_screenshots: false,
skip_binary_upload: true
)
end
end
Appfile
app_identifier(ENV["DEVELOPER_APP_IDENTIFIER"])
apple_id(ENV["FASTLANE_APPLE_ID"])
itc_team_id(ENV["APP_STORE_CONNECT_TEAM_ID"])
team_id(ENV["DEVELOPER_PORTAL_TEAM_ID"])
FastlaneのMatchを設定
Fastlane MatchはiOSの__CAPGO_KEEP_0__署名の新しいアプローチです。Fastlane Matchは、iOSアプリの必要な証明書とプロビジョニングプロファイルを管理するチームに簡単にできるようにします。 is a new approach to iOS’s code signing. Fastlane match makes it easy for teams to manage the required certificates and provisioning profiles for your iOS apps.
新しいプライベートリポジトリを作成します。 certificates例えば、GitHub の個人アカウントまたは組織で。
Fastlane match を iOS アプリ用に初期化します。
fastlane match init
次に、オプション #1 (Git Storage) を選択します。
[01:00:00]: fastlane match supports multiple storage modes, please select the one you want to use:1. git2. google_cloud3. s3?
新しく作成したリポジトリの URL を割り当てます。
[01:00:00]: Please create a new, private git repository to store the certificates and profiles there[01:00:00]: URL of the Git Repo: <YOUR_CERTIFICATES_REPO_URL>
Fastlane フォルダ内にファイル名が "Matchfile" のファイルが生成されます。 Matchfile ページ/エリア: Capgo マーケティング ウェブサイト。役割: ショート UI ラベルまたはナビゲーション アイテム。見つける場所: page trust.astro。メッセージ キー `and` (And)。
_git_url_HTTPS の証明書リポジトリの URL に設定する必要があります。オプションで、SSH を使用することもできますが、別のステップを実行する必要があります。
# ios/Matchfilegit_url("https://github.com/gitusername/certificates")storage_mode("git")type("appstore")
次に、Fastlane Match で証明書を生成し、入力された資格情報を入力します。
パスフレーズを入力するよう求められます。正しく覚えておいてください。GitHub Actions が後で証明書リポジトリを暗号化するために使用します。
fastlane match appstore
すべてがうまくいった場合、次のようなものが表示されます。
[01:40:52]: All required keys, certificates and provisioning profiles are installed 🙌
あなたが GitHub と必要な権限で問題を経験した場合、この 記事 はあなたにgitの認証トークンを生成するのに役立つかもしれません。
__CAPGO_KEEP_0__ で生成された証明書とプロビジョニング プロファイルは証明書リポジトリのリソース

最後に、リリース構成のアプリのプロビジョニング プロファイルをアップデートするために、Xcode で project XCode 証明書

MATCH
CI/CD が証明書とプロビジョニング プロファイルをインポートするには、証明書リポジトリにアクセスできる必要があります。
あなたは、プライベート リポジトリにアクセスまたは読み取り専用のリポジトリにアクセスできるスコープを持つパーソナル アクセス トークンを生成することでこれを行うことができます。
In GitHub で 設定 → 開発者設定 → パーソナル アクセス トークン → クリック Generate New Token → チェック repo スコープ → その後クリック Generate token.

パーソナル アクセス トークンが生成されたので、後で環境変数として使用するためにコピーしてください。 GIT_TOKEN.
次に、Fastlane フォルダで生成されたマッチ ファイルを置き換えてください Matchfile
CERTIFICATE_STORE_URL = ENV["CERTIFICATE_STORE_URL"]
GIT_USERNAME = ENV["GIT_USERNAME"]
GIT_TOKEN = ENV["GIT_TOKEN"]
FASTLANE_APPLE_ID = ENV["FASTLANE_APPLE_ID"]
git_url(CERTIFICATE_STORE_URL)
storage_mode("git")
type("appstore")
git_basic_authorization(Base64.strict_encode64("#{GIT_USERNAME}:#{GIT_TOKEN}"))
username(FASTLANE_APPLE_ID)
このファイルは、GitHub Actionsによって証明書とプロビジョニング プロファイルをインポートするために使用されます。 そして、GitHub Secretsに変数が設定され、ファイルにハードコードするのではなく、代わりに使用されます。
ビルド処理
In GitHub Actions, ご利用時間に基づいて請求されます。 CI/CD ワークフローを実行するのに使用した分数に基づいて請求されます。実際の経験から、App Store Connect でビルドを処理するには約 10–15 分かかります。
プライベート プロジェクトの場合、ビルドあたりの推定コストは $0.08/分 x 15 分 = $1.2 となります。 、または、プロジェクトの構成または依存関係に応じて、さらに多くかかる可能性があります。私がプライベート プロジェクトの価格設定について懸念しているのと同じ懸念を持っている場合は、を維持できます。
の設定 skip_waiting_for_build_processing の秘密鍵 true.
の依存関係
の構成 の依存関係.
3. Setup GitHub Actions
Configure GitHub secrets
Ever wonder where the values of the ENV are coming from? Well, it’s not a secret anymore – it’s from your project’s secret.

1. APP_STORE_CONNECT_TEAM_ID - the ID of your App Store Connect team in you’re in multiple teams.
2. DEVELOPER_APP_ID - in App Store Connect, go to the app - - your app’s bundle identifier. General Information - the ID of your Developer Portal team if you’re in multiple teams. Apple ID.
3. DEVELOPER_APP_IDENTIFIER - the Apple ID or developer email you use to manage the app.
4. DEVELOPER_PORTAL_TEAM_ID &
5. FASTLANE_APPLE_ID - the Apple ID or developer email you use to manage the app.
6. GIT_USERNAME & GIT_TOKEN - ご利用の Git ユーザー名と個人アクセストークン。
7. MATCH_PASSWORD - Match を初期化したときに割り当てたパスフレーズが、証明書とプロビジョニング プロファイルの暗号化に使用されます。
8. PROVISIONING_PROFILE_SPECIFIER - match AppStore <YOUR_APP_BUNDLE_IDENTIFIER>, 例えば。 match AppStore com.domain.blabla.demo.
9. TEMP_KEYCHAIN_USER & TEMP_KEYCHAIN_PASSWORD - ワークフロー用に一時的なキーチェーン ユーザーとパスワードを割り当てます。
10. APPLE_KEY_ID — App Store Connect API キー 🔺キーアイディ。
11. APPLE_ISSUER_ID — App Store Connect API キー 🔺発行者 ID。
12. APPLE_KEY_CONTENT — App Store Connect API キー 🔺キーファイルまたはキーの内容。 .p8, 確認してください。
13. CERTIFICATE_STORE_URL — Match キーのリポジトリ URL (例: https://__CAPGO_KEEP_0__.com/***/fastlane_match.git) https://github.com/***/fastlane_match.git)
4. 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: 2.7.2
- uses: maierj/fastlane-action@v2.3.0
env:
DEVELOPER_APP_IDENTIFIER: ${{ secrets.DEVELOPER_APP_IDENTIFIER }}
DEVELOPER_APP_ID: ${{ secrets.DEVELOPER_APP_ID }}
PROVISIONING_PROFILE_SPECIFIER: match AppStore ${{ secrets.DEVELOPER_APP_IDENTIFIER }}
TEMP_KEYCHAIN_USER: ${{ secrets.TEMP_KEYCHAIN_USER }}
TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
CERTIFICATE_STORE_URL: https://github.com/${{ secrets.CERTIFICATE_STORE_REPO }}.git
GIT_USERNAME: ${{ secrets.GIT_USERNAME }}
GIT_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
FASTLANE_APPLE_ID: ${{ secrets.FASTLANE_APPLE_ID }}
MATCH_USERNAME: ${{ secrets.FASTLANE_APPLE_ID }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
DEVELOPER_PORTAL_TEAM_ID: ${{ secrets.DEVELOPER_PORTAL_TEAM_ID }}
with:
lane: closed_beta
- name: Upload release bundle
uses: actions/upload-artifact@v2
with:
name: ios-release
path: ./App.ipa
retention-days: 60
このワークフローは、各 GitHub タグの後でトリガーされます。タグを自動化する必要がある場合は、まず Automatic build and release with GitHub actions を参照してください。
次に、このワークフローは、NodeJS の依存関係を取得し、JavaScript アプリをインストールしてビルドします。
コミットを送信するたびに、テストフライトでリリースが作成されます。
あなたのアプリにはIonicを使用する必要はありません。ただし、Capacitorベースは必須です。古いCordovaモジュールを使用してもかまいませんが、CapacitorJSプラグインを使用することをお勧めします。
5. ワークフローをトリガーする
コミットを作成する
コミットする 、あなたはリポジトリでアクティブなワークフローを確認することができます。ワークフローをトリガーする
ブランチに新しいコミットをプッシュする
または main Capgoの製品やブランド、開発者用の用語をそのままにしながら、CapgoのUIの長いマーケティングまたは法的文章を表示します。 development ワークフローをトリガーする

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

ローカルマシンから配布できるか?
はい、できます。とても簡単です。
想像してみてください。プライベート リポジトリがあり、無料プランの分数を使用した後、追加のリリースに新しい料金を支払いたくない場合、またはアプリケーションを手動で提出したい場合など
それでは始めましょう
まず、ファイルを作成する必要があります。 my_project_path/fastlane ファイル名は .env です。 Fastfile と同じパスに置いてください。 同じ環境を設定できます。 path a file called my_project_path/fastlane secret _GitHub
ローカルマシンからデプロイするための.envファイル
現在、ローカルマシンからデプロイするための.envファイル ターミナル ローカルマシンからデプロイするためのFastlane ❌ .envファイルの重要なこと .envファイル
fastlane closed_beta
.gitignoreに追加する必要があるのは、データを公開したくないからです。 ❌ .envファイルの重要なこと .envファイル .gitignoreに追加する必要があるのは、データを公開したくないからです。❌
fastlane/*.env
GitHub Actionsからリモートマシンで実行されるように同じように動作するようにする

ターミナル実行: $ Fastlane closed_beta
あなたがここまで来てくれたら、FastlaneとGitHub Actionsを使用してiOSアプリの完全自動化プロセスを持っていることに対して、祝福を送ります。
毎回コミットを送ると、Google Playコンソールのベータチャンネルでリリースが作成されます。 このブログを改善するためにあなたのフィードバックを待っています。質問や提案がある場合は、メールでお知らせください。 martin@capgo.app
デバイスでビルド
デバイスでビルドする必要がある場合は、プロビジョニングに手動で追加する必要があります。
Macにデバイスを接続し、デバイスメニューを開きます
次に、識別子をコピーしてください
次に、以下のコマンドを実行してください:
fastlane register_new_device
すると、デバイス名と識別子を設定するよう求められます:

問題が発生した場合
開発用デバイスでテストできないなど、問題が発生した場合、通常はこれで解決します。
問題が発生した場合の対処法があります:
fastlane match nuke development
fastlane match development
次のコマンドを実行してください: プロジェクトをクリーンするには、Shift(⇧)+Command(⌘)+Kを押すか、Product > Clean(クリーンビルドフォルダと表示される場合もあります)を選択します。
次に、再度アプリをデバイス上で実行してください。
感謝します。
このブログは、以下の記事に基づいています:
- Continuous delivery for IOS using Fastlane and GitHub actions
- Fastlaneのドキュメント
- この @mrogunlana からの GitHub メッセージ
Automatic Capacitor IOS ビルドの GitHub アクションを使用して Match を使用して進めましょう
自動 __CAPGO_KEEP_0__ IOS ビルドの __CAPGO_KEEP_1__ アクションを使用して Match を使用して進めましょう 自動 Capacitor IOS ビルドの GitHub アクションを使用して Match を使用して進めましょう __CAPGO_KEEP_0__ CI/CD Capgo CI/CD Capgo Native Builds Capgo Native Builds Capgo Integrations Capgo Integrations for the product workflow in Capgo Integrations, CI/CD Integration CI/CD統合の実装詳細について GitHub Actions統合 for the implementation detail in GitHub Actions Integration.