Pubblicare applicazioni iOS su App Store con GitLab e fastlane

Pubblicare applicazioni iOS su App Store con GitLab e fastlane

Come GitLab con fastlane compila, firma e pubblica applicazioni per iOS su App Store.

Recentemente abbiamo avuto un articolo su come compilare e avviare rapidamente un'app Android con GitLab e fastlane. Qui vedremo come compilare e avviare un'app iOS e pubblicarla su TestFlight. Date un'occhiata a quanto è fantastico sto apportando una modifica su iPad Pro con GitLab Web IDE, prendo la build e ottengo un aggiornamento della versione beta dell'applicazione sullo stesso iPad Pro dove l'ho sviluppata.

Qui prenderemo una semplice applicazione per iOS in Swift, 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 cert e sigh 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 documentazione sulla firma digitale.

In questo esempio utilizzo un approccio cert e sigh, ma per un'applicazione reale, probabilmente è meglio utilizzare match.

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 xcbuild e isign, e il nostro task interno gitlab-ce#57576.

Configurare il runner è molto semplice. Segui le attuali istruzioni per la configurazione del GitLab Runner su macOS.

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 documentazione sulla sicurezza, 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 start

Il 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 le istruzioni per l'installazione e l'avvio di fastlane, soprattutto nella sezione dedicata a Gemfile, 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 init

fastlane 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 Apple

2. 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 cert e sigh. Se utilizzi match 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
end

3. 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 documentazione.

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.ipa

Tutto perfetto! Impostiamo il formato UTF-8 per fastlane, come richiesto, 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 qui.

Se hai l'autenticazione a due fattori, crea una variabile FASTLANE_SESSION (le istruzioni sono lì).

FASTLANE_USER e FASTLANE_PASSWORD

Per cert e sigh richiamare il profilo di inizializzazione e i certificati su richiesta, è necessario impostare le variabili FASTLANE_USER e FASTLANE_PASSWORD. Maggiori dettagli qui. Non è necessario se usi un altro metodo di firma.

In conclusione

Puoi vedere come funziona tutto questo nel mio semplice esempio.

Spero che sia stato utile e ti abbia ispirato a lavorare con le build di iOS nel progetto GitLab. Ecco alcuni consigli su CI per fastlane, nel caso tu voglia usarli CI_BUILD_ID (per build incrementali), in modo da incrementare automaticamente la versione.

Un'altra fantastica funzionalità di fastlane è gli screenshot automatici 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster