Configurare la CI/CD per le Capacitor applicazioni può essere complesso e richiede molto tempo. Ecco cosa devi sapere:
Consigliato per Nuove Costruzioni: Utilizza Capgo Build
Ora raccomandiamo di utilizzare Capgo Build con il Capgo CLI per le costruzioni native Capacitor. Questa guida Fastlane è mantenuta per i team che mantengono pipeline di azioni GitHub esistenti, ma nuove costruzioni iOS dovrebbero utilizzare il Capgo CLI in modo da non dover mantenere Fastlane, i runner Xcode, i certificati e gli script di caricamento.
Capgo Build per la CI/CD da Capgo
Evita di mantenere Fastlane, il runner Xcode, i certificati, i profili di provisioning e gli script di caricamento. Capgo Build esegue costruzioni native iOS firmate dal tuo pipeline di CI/CD esistente:
- Lavora con il tuo pipeline: Trascina Capgo Build da GitHub Actions, GitLab CI, Jenkins o script locali dopo la costruzione web e
npx cap sync. - Autenticazione da segreti CI: Mantieni le chiavi App Store Connect, i certificati, i profili di provisioning, le password e gli ID di team nei tuoi segreti CI.
- Nessuna manutenzione del runner nativo: Capgo Build provides maintained Apple build environments, so you do not have to manage macOS runners, Xcode images, or Fastlane lanes.
- Articoli e sottoscrizione: Scarica gli articoli firmati per la QA o sottoscrivi i rilasci tramite il Capgo CLI.
Prezzi
- : I piani Capgo iniziano da 12€/mese
- : Includono aggiornamenti OTA e circa 15 build native al mese
- : I minuti di build extra sono fatturati per minuto attraverso crediti
: Configura il Capgo Build nei CI/CD
: Guida di configurazione manuale
Ecco cosa devi fare:
Continuous Delivery per iOS utilizzando Fastlane e GitHub Azioni e certificato
Prerequisiti
Prima di continuare con il tutorial:
- Assicurati di avere Fastlane installato su il tuo computer di sviluppo.
- Assicurati di essere parte del programma di sviluppo iOS.
Informazioni importanti sul prezzo

https://github.com/features/actions
La servizio è ‘gratuito fino al limite, a seconda della macchina scelta.
Utilizzeremo una macchina macOS macchina macOS, potete vedere nel screenshot il suo prezzo e i limiti (prezzi validi alla creazione del tutorial, potrebbero subire cambiamenti in futuro)
Dopo aver avvertito le richieste e i prezzi, continuiamo.
Nota: Nel post suppongo che tu abbia già creato l'app in App Store Connect. L'informazione importante verrà copiata da Fastlane!
Cosa imparerai in questo tutorial
I passaggi da seguire in questo post
- Utilizzare App Store Connect API con Fastlane
- Requisiti:
- Creare una chiave App Store Connect API
- Utilizzando una chiave App Store Connect API
- Requisiti:
- Copia i file Fastlane
- Configura GitHub azioni
1. Utilizza App Store Connect API con Fastlane
Dal febbraio 2021, l'autenticazione a due fattori o la verifica a due passaggi è richiesta per tutti gli utenti per accedere a App Store Connect. Questo strato di sicurezza aggiuntivo per il tuo ID Apple aiuta a garantire che tu sia l'unica persona che può accedere al tuo account.
Dal Sostegno Apple
Requisiti
Per poter utilizzare App Store Connect API con Fastlane per caricare il tuo'app, devi fornire i seguenti tre cose:
- ID rilasciatore
- ID di chiave
- File di chiave o Contenuto di chiave
Ottenimento di una chiave API di App Store Connect
Per generare le chiavi, è necessario avere le autorizzazioni di amministratore in App Store Connect. Se non si hanno queste autorizzazioni, si può indirizzare la persona competente a questo articolo.
-
Accedi a App Store Connect.
-
Seleziona Utenti e accesso.

3 — Seleziona la scheda di integrazione.

- Clicca su Genera chiave API o sul pulsante Aggiungi (+).

- Inserisci un nome per la chiave. Il nome è solo per la tua referenza e non fa parte della chiave stessa.

6 — Sotto Accesso, seleziona il ruolo per la chiave. I ruoli che si applicano alle chiavi sono gli stessi ruoli che si applicano agli utenti del tuo team. Vedi ruoli di autorizzazione. Consigliamo di selezionare amministratore dell'app.
- Clicca su Genera.
Un'API chiave non può avere accesso limitato a specifiche app.
Il nome della nuova chiave, l'ID della chiave, un link di download e altre informazioni vengono visualizzati sulla pagina.

Qui puoi prendere tutte e tre le informazioni necessarie.
<1> ID della richiesta. (APPLE_ISSUER_ID <2> ID della chiave. (
<3> Clicca su “Scarica la chiave __CAPGO_KEEP_0__” per scaricare la tua chiave __CAPGO_KEEP_1__ privata. Il link di download compare solo se la chiave privata non è stata ancora scaricata. Apple non conserva una copia della chiave privata. Pertanto, puoi scaricarla solo una volta.APPLE_KEY_ID Conserva la tua chiave privata in un luogo sicuro. Non dovresti mai condividere le tue chiavi, archiviare le chiavi in un __CAPGO_KEEP_0__ repository o includere le chiavi nel codice client-side __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. Mostrerò questo metodo perché penso che sia la modalità più facile da utilizzare con la maggior parte dei CI, dove puoi impostare le variabili di ambiente. Per favore converti il file p8 che hai scaricato in Base64 e memoralo come un segreto (]}] } ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]} ]
Utilizzo una chiave __CAPGO_KEEP_0__ di App Store Connect per creare il token JWT di autorizzazione. Ci sono diverse modalità in cui questa informazione può essere passata in Fastlane. Ho scelto di utilizzare l'azione nuova di Fastlane. Puoi imparare altre modalità in documentazione di Fastlane. Mostrerò questo metodo perché penso che sia la modalità più facile da utilizzare con la maggior parte dei CI, dove puoi impostare le variabili di ambiente. Per favore converti il file p8 che hai scaricato in Base64 e memoralo come un segreto (APPLE_KEY_CONTENT).
base64 -i APPLE_KEY_CONTENT.p8 | pbcopy
Now possiamo gestire App Store Connect con Fastlane utilizzando la chiave API, fantastico!
2. Certificati
Apre XCode e vai a Impostazioni > Conti > ID Apple > Team e seleziona il tuo team.

Clicca su Gestisci i certificati.
Se non hai già creato un certificato, puoi crearne uno nuovo.
Clicca su + E seleziona Distribuzione Apple

Poi devi andare a keychain per scaricare il certificato come un .p12 file.
Per farlo, devi andare a keychain, passare alla chiave di accesso e poi alla scheda My Certificati.

Seleziona quindi il certificato che desideri scaricare. (Cerca per la data del certificato)
E poi fai clic destro sul chiave privata del certificato e seleziona Esporta.
Scegli il formato del file Scambio di informazioni personali (.p12).
Questo scaricherà il certificato come un .p12 file.
Per favore apri il file in un terminale e utilizza il seguente comando per convertirlo in Base64:
base64 -i BUILD_CERTIFICATE.p12 | pbcopy
Questo diventerà il tuo BUILD_CERTIFICATE_BASE64 segreto. Inoltre, quando richiesto, si prega di fornire la password del certificato. Questa password sarà il tuo P12_PASSWORD segreto.
3. Profili di provisioning
Apri Developer Apple e seleziona il team giusto.
Poi crea un nuovo profilo, cliccando su +

E seleziona App Store Connect.

Poi devi selezionare l'app giusta, attenzione, altrimenti il firmatario fallirà.

Scegli il certificato giusto che hai creato prima (cerca la data di scadenza, dovrebbe essere lo stesso giorno e mese di oggi) e clicca su Continua.

Infine inserisci il nome del profilo e clicca su Genera.
Il nome verrà utilizzato per identificare il profilo in Fastlane, sotto il valore di
APPLE_PROFILE_NAME.

Potrai scaricare il profilo come un .mobileprovision file.

Per favore converti il profilo in Base64 e memorizzalo come un segreto (BUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
4. Copia i file di Fastlane
Fastlane è una libreria Ruby creata per automatizzare le attività comuni di sviluppo mobile. Utilizzando Fastlane, puoi configurare percorsi personalizzati "lanes" che raggruppano una serie di "azioni" che eseguono compiti che normalmente eseguiresti utilizzando Android Studio. Puoi fare molto con Fastlane, ma per scopi di questo tutorial, utilizzeremo solo una manciata di azioni fondamentali.
Creare il folder Fastlane alla radice del tuo progetto Capacitor/Ionic e aggiungere il Fastfile lì:
- Cartella:
<project-root>/fastlane/ - File:
<project-root>/fastlane/Fastfile
Questo è lo stesso livello di package.json, capacitor.config.*, e il ios/ folder. Non crearlo all'interno di 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. Configurazione dei segreti
GitHub Le azioni di Actions utilizzano i segreti del repository che configuri nel passaggio successivo. Hai bisogno di un file locale solo se desideri eseguire o testare Fastlane dal tuo computer. .env Per il testing locale, crea
accanto al <project-root>/fastlane/.env 5. Impostazione dei segreti Fastfile. Non commettere modifiche a questo file. Aggiungi fastlane/.env al tuo .gitignore primo (o verifica che sia già ignorato). Ecco un esempio:
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=
Ottenere l'ID del team di App Store Connect
Vai a Centro per sviluppatori e scorri verso il basso fino alla Membership details sezione.
Team ID è il valore che devi impostare nella APP_STORE_CONNECT_TEAM_ID segreta.
Ottenere l'identificatore del bundle
- Apri Xcode
- Doppio clic sul
Appnel navigatore dei progetti - Clicca quindi sul
Signing and Capabilities - Copia il valore di
Bundle identifier. Questo è il valore che devi impostare nelBUNDLE_IDENTIFIERsegreto.
6. Elaborazione dei processi
In GitHub Actions, sei fatturato in base ai minuti che hai utilizzato per eseguire il tuo workflow CI/CD. Dalla mia esperienza, ci vogliono circa 10-15 minuti prima che un build possa essere elaborato in App Store Connect.
For progetti privati, il costo stimato per build può arrivare fino a $0.08/min x 15 min = $1.2, o più, a seconda della configurazione e delle dipendenze del tuo progetto.
Se sei preoccupato per i costi per progetti privati, puoi impostare skip_waiting_for_build_processing su true. Ciò salverà minuti di build non aspettando che App Store Connect completi il processo di build.
Tuttavia, ci sono un trade-off - dovrai aggiornare manualmente le informazioni di conformità dell'app in App Store Connect prima di poter distribuire il build ai utenti.
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 per maggiori dettagli. 7. Configura le azioni di
7. Setup GitHub Actions
GitHub
Per favore copia i segreti dal .env file e incollali nel repository GitHub segreti.
Vai a Impostazioni > Segreti e variabili > azioni > Nuovo segreto repository
2. BUILD_CERTIFICATE_BASE64 - Certificato codificato in Base64.
3. BUILD_PROVISION_PROFILE_BASE64 - Profilo di provisioning Base64 codificato.
4. BUNDLE_IDENTIFIER - l'identificatore del pacchetto della tua app.
5. APPLE_KEY_ID — Chiave API di App Store Connect 🔺ID Chiave.
6. APPLE_ISSUER_ID — Chiave API di App Store Connect 🔺ID emittente.
7. APPLE_KEY_CONTENT — Chiave API di App Store Connect 🔺 Contenuto della chiave. .p8, verificare.
8. Configura il file di flusso GitHub.
Creare un directory di flusso GitHub.
cd .github/workflows
all'interno del workflow folder, crea un file denominato build-upload-ios.ymle aggiungi il seguente.
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
Questa workflow dovrebbe essere attivata dopo ogni GitHub etichettase hai bisogno di automatizzare le etichette, si prega di fare riferimento a Costruzione automatica e rilascio con GitHub azioni in primo luogo.
Quindi questa workflow caricherà i tuoi dipendenze NodeJS, li installerà e costruirà il tuo'applicazione JavaScript.
Ogni volta che invii un nuovo commit, verrà costruito un rilascio in TestFlight.
La tua App non ha bisogno di utilizzare Ionic, è sufficiente che abbia la base Capacitor obbligatoria, può avere vecchi moduli Cordova, ma è preferibile il plugin Capacitor JS.
8. Attiva la workflow
Crea un Commit
Fai un commitVedrete l'elenco dei flussi di lavoro attivi nel repository.
Attiva il flusso di lavoro
Puoi attivare il flusso di lavoro main o development Oppure puoi attivare il flusso di lavoro

Per attivare il flusso di lavoro

Dopo pochi minuti, il build dovrebbe essere disponibile nel tuo dashboard App Store Connect.
Pannello di Testflight
9. Posso distribuire dal mio computer locale?
Sì, puoi farlo e non è difficile affatto. Puoi utilizzare Xcode per costruire e firmare il tuo app, come sempre.
Guida di configurazione CI/CD
- Build automatico di Capacitor per Android con GitHub - Guida completa di configurazione CI/CD per Android
- Build e rilascio automatico con GitHub - Tutorial completo del flusso di lavoro CI/CD
- Gestione dei build per sviluppatori e produzione con GitHub - Gestione degli ambienti
- Build automatico di Capacitor per iOS con Match - Alternativa utilizzando Fastlane Match
Alternative piattaforme CI/CD
- Build con GitLab CI - Alternativa di GitLab
- Costruisci con CodeMagic - Guida di configurazione di CodeMagic
Aggiornamenti in Tempo Reale & Distribuzione
- Capgo Documentazione degli Aggiornamenti in Tempo Reale - Aggiungi aggiornamenti OTA al tuo app
- Integrazione CI/CD con Capgo - Integra gli aggiornamenti in tempo reale nel tuo pipeline
Grazie
Questo blog si basa sugli articoli seguenti:
- Distribuzione continua per IOS utilizzando Fastlane e GitHub azioni
- Documentazione Fastlane
- Questo GitHub messaggio da @mrogunlana
- Questa GitHub documentazione
Continua con l'Automatic Capacitor build IOS con GitHub azioni con certificato
Se stai utilizzando Automatic Capacitor build IOS con GitHub azioni con certificato per pianificare l'automazione CI/CD, connettilo con Capgo CI/CD per il flusso di lavoro del prodotto in Capgo CI/CD, Capgo Costruzioni native per il flusso di lavoro del prodotto in Capgo Costruzioni native, Capgo Integrazioni per il flusso di lavoro del prodotto in Capgo Integrazioni, Integrazione CI/CD per i dettagli di implementazione nella integrazione CI/CD, e GitHub Integrazione delle azioni per i dettagli di implementazione nella GitHub Integrazione delle azioni.