
Come GitLab con fastlane compila, firma e pubblica applicazioni per iOS su App Store.
Recentemente abbiamo avuto con GitLab e . Qui vedremo come compilare e avviare un'app iOS e pubblicarla su TestFlight. Date un'occhiata a quanto è fantastico , prendo la build e ottengo un aggiornamento della versione beta dell'applicazione sullo stesso iPad Pro dove l'ho sviluppata.
Qui prenderemo , con cui ho registrato un video.
Due parole sulla configurazione dell'Apple Store
Avremo bisogno di un'app su App Store, certificati di distribuzione e un profilo di provisioning per mettere tutto insieme.
La cosa più difficile è configurare i diritti di firma su App Store. Spero che possiate farlo da soli. Se siete principianti, vi darò le giuste indicazioni, ma qui non parleremo delle complessità della gestione dei certificati Apple, che peraltro cambiano costantemente. Questo post vi aiuterà a iniziare.
Le mie applicazioni
È necessario un'app su App Store Connect per avere un ID per la configurazione .xcodebuild. Il profilo e l'ID dell'app collegano le build del codice, i prezzi e la disponibilità, oltre alla configurazione di TestFlight per la distribuzione di applicazioni in fase di beta testing agli utenti. Non effettuate test pubblici, va bene anche il privato, se avete un piccolo gruppo, una configurazione semplice e non richiedete autorizzazioni aggiuntive da Apple.
Profilo di provisioning
Oltre alla configurazione dell'app, avrete bisogno di chiavi di distribuzione e sviluppo iOS, create nella sezione Certificates, Identifiers & Profiles (Certificati, identificatori e profili) nella console Apple Developer. Tutti questi certificati possono essere combinati in un profilo di provisioning.
Agli utenti che si autenticheranno è necessaria la possibilità di creare certificati, altrimenti durante le fasi vedrete un errore.
Altre opzioni
Oltre a questo semplice metodo, ci sono altri modi per configurare certificati e profili. Quindi, se lavorate in modo differente, potreste dover ristrutturare. La cosa più importante è che avrete bisogno di una configurazione. .xcodebuild, che indicherà i file necessari, e le chiavi devono essere accessibili sul computer di compilazione per l'utente sotto il cui nome opera il runner. Per la firma digitale utilizziamo fastlane, e se ci sono problemi o se desideri saperne di più, consulta la loro dettagliata .
In questo esempio utilizzo un approccio , ma per un'applicazione reale, probabilmente è meglio utilizzare .
Preparazione di GitLab e fastlane
Preparazione del CI Runner
Raccolti tutti questi dati, passiamo alla configurazione del runner di GitLab sul dispositivo MacOS. Sfortunatamente, è possibile creare applicazioni iOS solo su MacOS. Ma le cose potrebbero cambiare, e se aspetti dei progressi in questo campo, segui i progetti come e , e il nostro task interno .
Configurare il runner è molto semplice. Segui le attuali .
Nota. Il runner deve utilizzare il programma eseguibile shell. Questo è obbligatorio per compilare iOS su macOS, per lavorare direttamente come utente, e non tramite contenitori. Se utilizzi shell, la compilazione e il test vengono eseguiti sotto il nome utente del runner, direttamente sull'host di compilazione. Questo non è sicuro come i contenitori, quindi è meglio dare un'occhiata alla , per non perdere nulla.
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner startIl portachiavi di Apple deve essere configurato su questo host con accesso alle chiavi necessarie a Xcode per la compilazione. Il modo più semplice per testarlo è accedere come utente che eseguirà la compilazione e provare a eseguire manualmente la compilazione. Se il sistema richiede l'accesso al portachiavi, scegli "Consenti sempre" affinché il CI funzioni. Potrebbe essere utile accedere e osservare i primi due pipeline, per assicurarsi che non richiedano più il portachiavi. Il problema è che Apple non semplifica il nostro lavoro in modalità automatica, ma una volta che la configuri, andrà tutto bene.
fastlane init
Per utilizzare fastlane nel progetto, esegui fastlane init. Segui semplicemente , soprattutto nella sezione dedicata a , perché abbiamo bisogno di un avvio rapido e prevedibile attraverso il pipeline CI automatizzato.
Nella directory del progetto esegui questi comandi:
xcode-select --install
sudo gem install fastlane -NV
# In alternativa, usa Homebrew
# brew cask install fastlane
fastlane initfastlane richiederà una configurazione di base e poi creerà nella cartella del progetto una cartella fastlane con tre file:
1. fastlane/Appfile
Qui non c'è nulla di complicato. Controlla semplicemente che l'Apple ID e l'ID dell'app siano indicati correttamente.
app_identifier("com.vontrance.flappybird") # L'identificatore del bundle della tua app
apple_id("your-email@your-domain.com") # Il tuo indirizzo email Apple2. fastlane/Fastfile
Fastfile definisce i passaggi di costruzione. Utilizziamo molte funzionalità integrate di fastlane, quindi anche qui è tutto chiaro. Creiamo una singola linea che riceve i certificati, esegue la costruzione e la carica in TestFlight. Puoi suddividere questo processo in più compiti, se necessario. Tutte queste operazioni (get_certificates, get_provisioning_profile, gym e upload_to_testflight) sono già incluse in fastlane.
Azioni get_certificates e get_provisioning_profile sono correlate all'approccio di firma . Se utilizzi o qualsiasi altra cosa, apporta le modifiche necessarie.
default_platform(:ios)
platform :ios do
desc "Costruisci l'applicazione"
lane :flappybuild do
get_certificates
get_provisioning_profile
gym
upload_to_testflight
end
end3. fastlane/Gymfile
Questo è un file facoltativo, ma l'ho creato manualmente per cambiare la cartella di output predefinita e posizionare i risultati nella cartella corrente. Questo semplifica il CI. Se sei interessato, leggi su gym e le sue opzioni in .
https://docs.fastlane.tools/actions/gym/Il nostro .gitlab-ci.yml
Quindi, abbiamo un runner CI per il progetto e siamo pronti a testare la pipeline. Diamo un'occhiata a cosa abbiamo in .gitlab-ci.yml:
stages:
- build
variables:
LC_ALL: "en_US.UTF-8"
LANG: "en_US.UTF-8"
GIT_STRATEGY: clone
build:
stage: build
script:
- bundle install
- bundle exec fastlane flappybuild
artifacts:
paths:
- . /FlappyBird.ipaTutto perfetto! , utilizziamo la strategia clone con il programma eseguibile shell, in modo che abbiamo uno spazio di lavoro pulito per ogni build, e semplicemente chiamiamo flappybuild fastlane, come si è visto sopra. Alla fine otteniamo la compilazione, la firma e il deploy dell'ultima build in TestFlight.
Otteniamo anche l'artefatto e lo salviamo con la build. Nota che il formato .ipa è un file eseguibile ARM firmato che non può essere eseguito sul simulatore. Se desideri i risultati per il simulatore, basta aggiungere un target di build che lo produca e poi includerlo nel percorso dell'artefatto.
Altre variabili ambientali
Ci sono un paio di variabili ambientali su cui tutto funziona.
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD e FASTLANE_SESSION
Per l'autenticazione nell'App Store e il caricamento in TestFlight è necessaria l'autenticazione per fastlane. A tal fine, crea una password per applicazione che verrà utilizzata nel CI. Maggiori dettagli .
Se hai l'autenticazione a due fattori, crea una variabile FASTLANE_SESSION (le istruzioni sono lì).
FASTLANE_USER e FASTLANE_PASSWORD
Per richiamare il profilo di inizializzazione e i certificati su richiesta, è necessario impostare le variabili FASTLANE_USER e FASTLANE_PASSWORD. Maggiori dettagli . Non è necessario se usi un altro metodo di firma.
In conclusione
Puoi vedere come funziona tutto questo .
Spero che sia stato utile e ti abbia ispirato a lavorare con le build di iOS nel progetto GitLab. Ecco alcuni per fastlane, nel caso tu voglia usarli CI_BUILD_ID (per build incrementali), in modo da .
Un'altra fantastica funzionalità di fastlane è per l'App Store, che sono molto facili da configurare.
Racconta nei commenti la tua esperienza e condividi idee per migliorare GitLab per lo sviluppo di applicazioni iOS.
Fonte: habr.com
