Mengatur CI/CD untuk aplikasi Capacitor dapat kompleks dan memakan waktu. Berikut adalah hal-hal yang perlu Anda ketahui:
Dianjurkan untuk Pembangunan Baru: Gunakan Capgo Build
Sekarang kami merekomendasikan menggunakan Capgo Build dengan Capgo CLI untuk pembangunan native Capacitor. Panduan Fastlane ini dipertahankan untuk tim yang memelihara pipeline aksi GitHub yang sudah ada, tetapi pembangunan iOS baru harus menggunakan Capgo CLI sehingga Anda tidak perlu memelihara Fastlane, runner Xcode, sertifikat, dan skrip unggah sendiri.
Capgo Build untuk CI/CD oleh Capgo
Lepaskan diri dari pekerjaan memelihara Fastlane, runner Xcode, sertifikat, profil pengaturan, dan skrip unggah. Capgo Build melakukan pembangunan iOS yang ditandatangani secara native dari pipeline CI/CD yang sudah ada:
- Kompatibel dengan pipeline Anda: Aktifkan Capgo Build dari GitHub Actions, GitLab CI, Jenkins, atau skrip lokal setelah pembangunan web Anda
npx cap sync. - Mendaftar dari rahasia CI: Simpan kunci App Store Connect, sertifikat, profil pengaturan, kata sandi, dan ID tim di rahasia CI Anda sendiri.
- Tidak ada perawatan runner asli: Capgo Build menyediakan lingkungan build Apple yang diperbarui, sehingga Anda tidak perlu mengelola runner macOS, gambar Xcode, atau jalur Fastlane.
- Artikel dan pengiriman: Unduh artikel yang ditandatangani untuk QA atau kirimkan rilis build melalui Capgo CLI.
Pengaturan Harga
- Capgo plans mulai dari $12/bulan
- Termasuk pembaruan OTA dan sekitar 15 build asli per bulan
- Menit tambahan build yang dibebankan melalui kredit
Petunjuk Manual Pengaturan
Berikut adalah langkah-langkah yang perlu Anda lakukan:
Pengiriman Terus Menerus untuk iOS menggunakan Fastlane dan Aksi GitHub dan sertifikat
Persyaratan
Sebelum melanjutkan dengan tutorial ini:
- Pastikan Anda telah menginstal Fastlane di mesin pengembangan Anda. Pastikan Anda merupakan anggota program pengembang iOS.
- Informasi penting tentang harga
Harga Aksi __CAPGO_KEEP_0__

https://github.com/features/actions
Sertifikatgratis hingga batas yang ditentukan, tergantung pada mesin yang dipilih.
Kita akan menggunakan sebuah mesin macOS, Anda dapat melihat harga dan batasan (harga pada saat pembuatan tutorial, mereka mungkin mengalami perubahan di masa depan) Setelah Anda diingatkan tentang persyaratan dan harga, mari kita melanjutkan.
Catatan: Dalam postingan ini saya asumsikan Anda telah membuat aplikasi di App Store Connect. Informasi penting akan dikopi oleh Fastlane!
Apa yang akan Anda pelajari dalam tutorial ini
Langkah-langkah yang perlu diikuti dalam postingan ini
Menggunakan App Store Connect __CAPGO_KEEP_0__ dengan Fastlane
- Using App Store Connect API with Fastlane
- Membuat Kunci App Store Connect __CAPGO_KEEP_0__
- Membuat Kunci App Store Connect API
- Menggunakan Kunci API App Store Connect
- Membuat Kunci App Store Connect __CAPGO_KEEP_0__
- Salin File Fastlane
- Konfigurasi Aksi GitHub
1. Menggunakan App Store Connect API dengan Fastlane
Mulai Februari 2021, verifikasi dua faktor atau verifikasi dua langkah diperlukan untuk semua pengguna untuk masuk ke App Store Connect. Layer keamanan tambahan untuk ID Apple Anda membantu memastikan bahwa Anda adalah satu-satunya orang yang dapat mengakses akun Anda.
Dari Dukungan Apple
Persyaratan
Untuk Fastlane dapat menggunakan App Store Connect API untuk mengunggah aplikasi Anda, Anda perlu menyediakan hal-hal berikut tiga hal:
- ID Penerbit
- ID Kunci
- File Kunci atau Konten Kunci
Mendapatkan Kunci API App Store Connect
Untuk menghasilkan kunci, Anda harus memiliki izin Admin di App Store Connect. Jika Anda tidak memiliki izin tersebut, Anda dapat mengarahkan orang yang relevan ke artikel ini.
-
Masuk ke App Store Connect.
-
Pilih Pengguna dan Akses.

3 — Pilih tab Integrasi.

- Klik Generate API Key atau tombol Tambah (+).

- Masukkan nama untuk kunci. Nama ini hanya untuk referensi Anda dan bukan bagian dari kunci itu sendiri.

6 — Di bawah Akses, pilih peran untuk kunci. Peran yang berlaku untuk kunci sama dengan peran yang berlaku untuk anggota tim Anda. Lihat izin akses. Kami merekomendasikan untuk memilih Manajer Aplikasi.
- Klik Buat.
Akses kunci API tidak dapat dibatasi untuk aplikasi tertentu.
Nama kunci baru, ID kunci, tautan download, dan informasi lainnya muncul di halaman.

Anda dapat mengambil semua tiga informasi yang diperlukan di sini.
ID Masalah. (APPLE_ISSUER_ID ID Kunci. (
Klik "Unduh __CAPGO_KEEP_0__ Kunci" untuk mengunduh kunci pribadi __CAPGO_KEEP_1__ Anda. Tautan unduh hanya muncul jika kunci pribadi belum diunduh. Apple tidak menyimpan salinan kunci pribadi. Jadi, Anda hanya dapat mengunduhnya sekali.APPLE_KEY_ID Simpan kunci pribadi di tempat yang aman. Anda tidak boleh berbagi kunci, menyimpan kunci di __CAPGO_KEEP_0__ repository, atau termasuk kunci di __CAPGO_KEEP_1__ sisi klien.
<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_keySaya menunjukkan metode ini karena saya pikir ini adalah cara yang paling mudah untuk bekerja dengan CI yang paling umum, di mana Anda dapat menetapkan variabel lingkungan. Silakan mengonversi file p8 yang Anda download ke Base64 dan simpan sebagai rahasia (Sila konversi file p8 yang Anda download ke Base64 dan simpan sebagai rahasia (
Sila konversi file p8 yang Anda download ke Base64 dan simpan sebagai rahasia (APPLE_KEY_CONTENT).
base64 -i APPLE_KEY_CONTENT.p8 | pbcopy
Sekarang kita bisa mengelola App Store Connect dengan Fastlane menggunakan kunci API, bagus!
2. Sertifikat
Buka XCode dan pergi ke Pengaturan > Akun > ID Apple > Tim dan pilih tim Anda.

Klik pada Kelola sertifikat.
Jika Anda belum menciptakan sertifikat, Anda bisa membuat sertifikat baru.
Klik pada + dan pilih Apple Distribution

Kemudian Anda perlu pergi ke keychain untuk mendownload sertifikat sebagai .p12 file.
Untuk melakukannya, Anda perlu pergi ke keychain, switch ke login keychain dan kemudian tab Sertifikat Saya.

Kemudian Anda dapat memilih sertifikat yang ingin Anda download. (Cari berdasarkan tanggal sertifikat)
Klik kanan pada kunci pribadi pada sertifikat dan pilih __CAPGO_KEEP_0__.
Pilih format file Informasi Pribadi (Personal Information Exchange) (.p12).
Sertifikat tersebut akan didownload sebagai .p12 file.
Silakan membuka file tersebut di terminal dan gunakan perintah berikut untuk mengkonversinya ke Base64:
base64 -i BUILD_CERTIFICATE.p12 | pbcopy
__CAPGO_KEEP_0__ BUILD_CERTIFICATE_BASE64 Juga, ketika diminta, silakan berikan kata sandi sertifikat. Kata sandi ini akan menjadi P12_PASSWORD __CAPGO_KEEP_0__
3. Profil Pengaturan
Buka Apple Developer dan pilih tim yang tepat.
Kemudian buat profil baru, dengan mengklik pada +

Dan pilih App Store Connect.

Kemudian Anda perlu memilih aplikasi yang tepat, berhati-hatilah karena Anda tidak dapat menggunakan wildcard lainnya, jika tidak proses signing akan gagal.

Pilih sertifikat yang tepat yang telah Anda buat sebelumnya (lihat tanggal kadaluarsa, harus sama hari dan bulan dengan hari ini) dan klik pada Lanjutkan.

Masukkan akhirnya nama profil dan klik pada Generate.
Nama ini akan digunakan untuk mengidentifikasi profil di Fastlane, di bawah nilai
APPLE_PROFILE_NAME.

Kamu bisa mengunduh profil sebagai .mobileprovision file.

Silakan mengonversi profil ke Base64 dan simpan sebagai rahasia (BUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
4. Salin file Fastlane
Fastlane adalah sebuah library Ruby yang dibuat untuk mengotomasi tugas pengembangan mobile yang umum. Dengan menggunakan Fastlane, kamu bisa mengonfigurasi jalur kustom yang bundel serangkaian aksi yang melakukan tugas yang biasanya kamu lakukan menggunakan Android Studio. Kamu bisa melakukan banyak hal dengan Fastlane, tetapi untuk tujuan tutorial ini, kita hanya akan menggunakan beberapa aksi inti.
Create the Fastlane folder at the root of your Capacitor/Ionic project and add the Fastfile there:
- Folder:
<project-root>/fastlane/ - File:
<project-root>/fastlane/Fastfile
Ini adalah tingkat yang sama seperti package.json, capacitor.config.*, dan folder. ios/ Jangan membuatnya di dalam 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. Mengatur rahasia
GitHub Aksi menggunakan rahasia repository yang Anda konfigurasi di langkah berikutnya. Anda hanya perlu file lokal .env Jika Anda ingin menjalankan atau menguji Fastlane dari mesin sendiri.
Untuk pengujian lokal, buat <project-root>/fastlane/.env di samping FastfileJangan komit file ini. Tambahkan fastlane/.env ke .gitignore pertama (atau pastikan sudah diabaikan). Contoh sebagai berikut:
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=
Mendapatkan ID TIM APLIKASI APP STORE CONNECT
Buka Pusat Pengembang dan gulir ke bawah ke Membership details Bagian.
Team ID adalah nilai yang Anda perlu atur dalam APP_STORE_CONNECT_TEAM_ID rahasia.
Mendapatkan ID BUNDLE
- Buka Xcode
- Dengan mengklik ganda pada
Appdi navigator proyek - Klik tab kemudian
Signing and Capabilities - Salin nilai dari
Bundle identifierNilai ini yang perlu Anda atur diBUNDLE_IDENTIFIERrahasianya.
6. Pengolahan Proses
Dalam GitHub Aksi, biaya yang Anda bayar berdasarkan menit Anda telah digunakan untuk menjalankan alur kerja CI/CD Anda. Dari pengalaman saya, membutuhkan waktu sekitar 10–15 menit sebelum proses pembangunan dapat diproses di App Store Connect.
Untuk proyek pribadi, biaya perkiraan per pembangunan dapat mencapai $0.08/min x 15 menit = $1.2atau lebih, tergantung pada konfigurasi dan dependensi proyek Anda.
Jika Anda khawatir tentang biaya untuk proyek pribadi, Anda dapat menyetel skip_waiting_for_build_processing untuk trueIni akan menyimpan menit pembangunan dengan tidak menunggu App Store Connect untuk selesai memproses pembangunan.
Namun, ada pertukaran - Anda harus memperbarui informasi kesesuaian aplikasi secara manual di App Store Connect sebelum Anda dapat mendistribusikan pembangunan ke pengguna.
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 Untuk proyek publik/gratis, menit pembangunan gratis jadi tidak perlu mengaktifkan pengaturan ini. Lihat halaman harga __CAPGO_KEEP_0__ untuk informasi lebih lanjut.
7. Konfigurasi GitHub Actions
Konfigurasi rahasia GitHub
Silakan salin rahasia dari .env file dan tempelkan ke dalam rahasia GitHub di repository.
Lihat __CAPGO_KEEP_0__ Pengaturan > Rahasia dan variabel > Aksi > Rahasia repositori baru
2. BUILD_CERTIFICATE_BASE64 - Sertifikat Base64 yang dikodekan.
3. BUILD_PROVISION_PROFILE_BASE64 - Profil pengaturan Base64 yang dikodekan.
4. BUNDLE_IDENTIFIER - Identifikasi paket aplikasi Anda.
5. APPLE_KEY_ID — Kunci API App Store Connect 🔺ID Kunci.
6. APPLE_ISSUER_ID — ID Pengirim API Kunci App Store Connect 🔺.
7. APPLE_KEY_CONTENT — Isi kunci API App Store Connect 🔺. .p8, periksa itu
8. Konfigurasi GitHub file aliran
Buat direktori aliran GitHub.
cd .github/workflows
Dalam direktori tersebut, buat file bernama workflow dan tambahkan kode berikut: build-upload-ios.ymlAliran ini harus diaktifkan setelah setiap __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
This workflow should be triggered after each GitHub , jika Anda perlu otomatisasi tag, silakan lihatAutomatic build dan release dengan __CAPGO_KEEP_0__ aksi Automatic build and release with GitHub actions Kemudian aliran ini akan pull dependensi NodeJS Anda, menginstalnya dan membangun aplikasi JavaScript Anda.
Automatic build dan release dengan __CAPGO_KEEP_0__ aksi
Setiap kali Anda mengirimkan komit baru, rilis akan dibuat di TestFlight.
Aplikasi Anda tidak perlu menggunakan Ionic, hanya dasar Capacitor yang wajib., Aplikasi Anda dapat memiliki modul Cordova yang lama, tetapi plugin JavaScript Capacitor harus dipilih.
8. Aktifkan alur kerja
Buat Komit
Buat komit, Anda harus melihat alur kerja aktif di repository.
Aktifkan alur kerja
Push komit baru ke cabang main atau development untuk mengaktifkan alur kerja.

Setelah beberapa menit, hasil build harus tersedia di dashboard App Store Connect Anda.

9. Apakah saya bisa mengunduh dari mesin lokal?
Ya, Anda bisa, dan itu sangat mudah.
Anda bisa menggunakan Xcode untuk membangun dan menandatangani aplikasi Anda, seperti biasa.
Artikel Terkait
Panduan Pengaturan CI/CD
- Build Otomatis Android dengan Capacitor dan GitHub Actions - Pengaturan CI/CD Android yang lengkap
- Build dan Rilis Otomatis dengan GitHub Actions - Tutorial pipa CI/CD penuh
- Kelola Build Dev dan Prod dengan GitHub Actions - Pengelolaan Lingkungan
- Pembangunan Otomatis Capacitor iOS dengan Match - Penggunaan Alternatif menggunakan Fastlane Match
Platform CI/CD Alternatif
- Pembangunan dengan GitLab CI - Alternatif GitLab
- Pembangunan dengan CodeMagic - Panduan Pengaturan CodeMagic
Pembaruan Hidup & Pengaturan
- Capgo Dokumentasi Pembaruan Hidup - Tambahkan pembaruan OTA ke aplikasi Anda
- Integrasi CI/CD dengan Capgo - Integrasi pembaruan langsung ke dalam pipeline Anda
Terima kasih
Blog ini didasarkan pada artikel berikut:
- Pengiriman terus menerus untuk IOS menggunakan Fastlane dan aksi-aksi GitHub
- Dokumentasi Fastlane
- Pesan GitHub ini dari @mrogunlana
- Dokumentasi GitHub ini
Teruslah dari Pembangunan IOS Otomatis Capacitor dengan aksi-aksi GitHub dengan sertifikat
Jika Anda menggunakan Pembangunan IOS Otomatis Capacitor dengan aksi-aksi GitHub dengan sertifikat untuk merencanakan otomatisasi CI/CD, hubungkannya dengan Capgo CI/CD untuk alur kerja produk di Capgo CI/CD, Capgo Pembangunan Asli untuk alur kerja produk di Capgo Pembangunan Asli, Capgo Integrasi untuk alur kerja produk di Capgo Integrasi, Integrasi CI/CD untuk detail implementasi di Integrasi CI/CD, dan GitHub Integrasi Aksi untuk detail implementasi di GitHub Integrasi Aksi.