Condividi tramite


Firma dell'app per dispositivi mobili

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Questo articolo descrive in che modo Azure Pipelines gestisce in modo sicuro i certificati e i profili per la firma e il provisioning delle app per dispositivi mobili. Per firmare ed effettuare il provisioning di un'app per dispositivi mobili, le pipeline devono fornire certificati di firma per i sistemi operativi Android o Apple e i profili di provisioning per Apple.

Firma dell'app Android

Il processo seguente firma un'app Android mantenendo il certificato di firma sicuro.

Ottieni il file keystore

Seguire la documentazione di Android per generare un file dell'archivio chiavi e la relativa chiave corrispondente. Il file dell'archivio chiavi contiene il certificato di firma.

In Azure Pipelines Librerie>File protetti, selezionare + File protetto e caricare il file dell'archivio chiavi nella libreria dei file protetti. Durante il caricamento, l'archivio chiavi viene crittografato e archiviato in modo sicuro.

Aggiungere l'attività di firma alla pipeline

Nella pipeline YAML per un'app Android, definire le seguenti variabili keystore-password, key-alias e key-password. In alternativa, è possibile impostare le variabili usando l'interfaccia utente delle variabili della pipeline.

variables:
  keystore-password: <keystore file password>
  key-alias: <key alias for the signing certificater>
  key-password: <password for the key associated with the alias>

Aggiungere l'attività AndroidSigning@3 alla pipeline dopo il passaggio del build. Nell'attività AndroidSigning@3 :

  • <apkFiles> è il percorso e il nome obbligatori dei file APK da firmare. Il valore predefinito è **/*.apk.
  • <apksign> deve essere true, ovvero l'impostazione predefinita.
  • <apksignerKeystoreFile> è il nome del file dell'archivio chiavi caricato nella libreria di file protetti.
  • <apksignerKeystorePassword> è la password del file dell'archivio chiavi non crittografato.
  • <apksignerKeystoreAlias> è l'alias della chiave per il certificato di firma.
  • <apksignerKeyPassword> è la password per la chiave associata all'alias specificato.
steps:
- task: AndroidSigning@3
  displayName: 'Signing and aligning APK file(s) **/*.apk'
  inputs:
    apkFiles: '**/*.apk'
    apksign: true
    apksignerKeystoreFile: <keystore-filename.keystore>
    apksignerKeystorePassword: $(keystore-password)
    apksignerKeystoreAlias: $(key-alias)
    apksignerKeyPassword: $(key-password)

Qualsiasi agente di compilazione può ora firmare in modo sicuro l'app senza alcuna gestione dei certificati nel computer di compilazione stesso.

Firma dell'app Apple iOS, macOS, tvOS o watchOS

Per firmare e effettuare il provisioning di un'app Apple, la build di Xcode deve accedere al certificato di firma P12 e a uno o più profili di provisioning.

Ottenere il certificato di firma P12

Esportare il certificato di firma di sviluppo o distribuzione in un file con estensione p12 usando Xcode o l'app Keychain Access in macOS. Per esportare con Xcode:

  1. Vai su Xcode>Preferenze>Account.

  2. Nella colonna a sinistra selezionare l'ID Apple.

  3. Sul lato destro selezionare l'account personale o del team e selezionare Gestisci certificati.

  4. CTRL+Selezionare il certificato da esportare e selezionare Esporta certificato dal menu.

    Screenshot dell'esportazione di un certificato con Xcode.

  5. Immettere il nome del certificato, un percorso per salvare il file e una password per proteggere il certificato.

Per esportare usando l'app Keychain Access in macOS o per generare un certificato di firma in Windows, usare la procedura descritta in Firma iOS.

Caricare il file P12 e aggiungere la variabile password

In Azure Pipelines Librerie, >File protetti, selezionare + File protetto e caricare il file P12 nella libreria di file protetti di Azure Pipelines. Durante il caricamento, il certificato viene crittografato e archiviato in modo sicuro.

Nell'interfaccia utente Variabili per la pipeline di compilazione dell'app aggiungere una variabile denominata P12password con la password del certificato come valore. Selezionare l'icona di blocco per proteggere la password e nasconderla nei log.

Ottieni il profilo di provisioning

Se l'app non usa la firma automatica, scarica il profilo di provisioning dell'app dal portale Apple Developer. Per altre informazioni, vedere Modificare, scaricare o eliminare i profili di provisioning.

È anche possibile usare Xcode per accedere ai profili di provisioning installati nel Mac. In Xcode, vai a Xcode>Preferenze>Account. Selezionare l'ID Apple e il team e quindi selezionare Scarica profili manuali.

In Azure Pipelines, caricare il profilo di provisioning nella libreria di file protetti. Durante il caricamento, il file viene crittografato e archiviato in modo sicuro.

Aggiungere le attività di firma e provisioning alla pipeline

È necessario almeno un computer agente per eseguire una pipeline di compilazione o versione di Azure Pipelines. È possibile usare gli agenti ospitati da Microsoft o configurare agenti self-hosted. Per ulteriori informazioni, vedere gli agenti di Azure Pipelines.

Per la firma e il provisioning delle app Apple negli agenti macOS ospitati o se non si vuole consentire l'accesso al keychain dell'agente, è possibile installare i certificati e i profili necessari durante ogni compilazione. Se si utilizza un agente autogestito e si ritengono affidabili le persone e i processi che possono accedere al portachiavi dell'agente, è possibile preinstallare il certificato e i profili sull'agente di compilazione macOS.

Installare il certificato e il profilo durante ogni compilazione

Se non si ha accesso permanente all'agente di compilazione, ad esempio quando si usano agenti ospitati da Microsoft, è possibile installare il certificato e il profilo durante ogni compilazione. La pipeline installa il certificato P12 e il profilo di provisioning all'inizio di ogni compilazione e li rimuove al termine della compilazione.

Nella pipeline di compilazione YAML per l'app aggiungere l'attività InstallAppleCertificate@2 prima dell'attività Xcode@5 . Nel codice sostituire <secure-file.p12> con il nome del file con estensione p12 caricato. Per certPwd, usa la variabile sicura P12password che hai creato.

- task: InstallAppleCertificate@2
    inputs:
      certSecureFile: '<secure-file.p12>'
      certPwd: '$(<P12password>)'

Aggiungere anche l'attività InstallAppleProvisioningProfile@1 alla pipeline prima dell'attività Xcode@5 . Sostituire <secure-file.mobileprovision> con il nome del file del profilo di provisioning.

- task: InstallAppleProvisioningProfile@1
    inputs:
      provProfileSecureFile: '<secure-file.mobileprovision>'

Nota

Nelle attività InstallAppleCertificate@2 e InstallAppleProvisioningProfile@1, il parametro removeProfile è di default impostato su true, che rimuove il certificato e il profilo dopo ogni compilazione.

Qualsiasi agente di compilazione può ora firmare in modo sicuro l'app senza che sia necessaria alcuna gestione del certificato o del profilo nel computer di compilazione stesso.

Preinstallare il certificato e il profilo in un agente di compilazione macOS

In alternativa, è possibile preinstallare il certificato di firma e i profili di provisioning negli agenti di compilazione macOS self-hosted per un uso continuo da parte delle compilazioni. Usare questo metodo solo quando si considerano attendibili le persone e i processi che hanno accesso al Portachiavi macOS sui computer degli agenti.

Aggiungere la variabile password del portachiavi alla pipeline

Aggiungere una nuova variabile alla pipeline di compilazione denominata KEYCHAIN_PWD. Imposta il valore come password predefinita del portachiavi macOS, che normalmente corrisponde alla password dell'utente che avvia l'agente. Selezionare l'icona di blocco per proteggere la password.

Installare il certificato P12 nell'agente

Per installare il certificato P12 nel keychain predefinito, eseguire il comando seguente da una finestra del terminale macOS nel computer agente. Sostituire <certificate.p12> con il percorso e il nome del file P12 e sostituire <password> con la password di crittografia del file P12.

sudo security import <certificate.p12> -P <password>

Installare il profilo di provisioning nell'agente

Trovare il nome completo dell'identità di firma immettendo security find-identity -v -p codesigning in una finestra del terminale macOS. Viene visualizzato un elenco di identità di firma nel formato iPhone Developer/Distribution: Developer Name (ID). Se un'identità non è valida, viene visualizzato qualcosa come (CSSMERR_TP_CERT_REVOKED) dopo l'identità.

Per installare il profilo di provisioning nell'agente, eseguire il comando seguente dalla finestra del terminale macOS. Sostituire <profile> con il percorso del file del profilo di provisioning. Sostituire <UUID> con l'UUID del profilo di provisioning, ovvero il nome file del profilo di provisioning senza l'estensione .mobileprovision .

sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision

Aggiungi attività di firma e di provisioning che utilizzano il portachiavi predefinito

Nella pipeline di compilazione YAML aggiungere l'attività InstallAppleCertificate@2 prima dell'attività Xcode@5 . Nel codice impostare i valori seguenti:

  • certSecureFile: Il nome del file .p12 che hai caricato.
  • certPwd: variabile per l'oggetto protetto P12password.
  • signingIdentity: nome completo dell'identità di firma.
  • keychain: default per consentire l'accesso al portachiavi predefinito.
  • keychainPassword: la variabile KEYCHAIN_PWD.
  • deleteCert: false per conservare il certificato tra le compilazioni.
- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: '<secure-file.p12>'
    certPwd: '$(P12password)'
    signingIdentity: <full-signing-identity>
    keychain: default
    keychainPassword: `$(KEYCHAIN_PWD)
    deleteCert: false

Aggiungere anche l'attività InstallAppleProvisioningProfile@1 prima di l'attività Xcode@5. Nel codice:

  • Impostare provProfileSecureFile sul nome del file del profilo di provisioning.
  • Impostare removeProfile su false per mantenere il profilo tra le compilazioni.
- task: InstallAppleProvisioningProfile@1
    inputs:
      provProfileSecureFile: '<secure-file.mobileprovision>'
      removeProfile: false

L'agente di compilazione macOS può ora firmare e fornire in modo sicuro l'app per tutte le compilazioni senza richiedere un'ulteriore gestione del certificato o del profilo.

Configurare l'attività di compilazione Xcode per fare riferimento ai file protetti

L'attività di compilazione Xcode (Xcode@5) fa riferimento a signingIdentity e alle provisioningProfileUuid variabili. Queste variabili vengono impostate automaticamente per il certificato selezionato e il profilo di provisioning in base alle attività precedenti Installa certificato Apple e Installa profilo di provisioning Apple .

Aggiungere il seguente codice alla attività della pipeline di compilazione Xcode (Xcode@5).

- task: Xcode@5
  inputs:
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

L'agente di compilazione della pipeline firma e ora effettua il provisioning sicuro della tua app senza la necessità di ulteriore gestione dei certificati o dei profili sulla macchina di compilazione o nella pipeline di compilazione.