Condividi tramite


Firmare un'app per dispositivi mobili

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Per firmare ed effettuare il provisioning di un'app per dispositivi mobili per sistemi operativi Android o Apple, è necessario gestire i certificati di firma e i profili di provisioning Apple. Questo articolo descrive come gestire in modo sicuro certificati e profili per la firma e il provisioning dell'app in Azure Pipelines.

Nota

Per eseguire una compilazione o una versione, è necessario almeno un agente. È possibile usare un agente di compilazione Linux, macOS o Windows ospitato da Microsoft oppure configurare il proprio agente. Per altre informazioni, vedere Creare e rilasciare agenti.

Firmare l'app Android

Seguire questa procedura per firmare l'app Android mantenendo protetto il certificato di firma.

Caricare il file dell'archivio chiavi

  1. Ottenere un file dell'archivio chiavi contenente il certificato di firma. La documentazione di Android descrive il processo di generazione di un file dell'archivio chiavi e della relativa chiave corrispondente.

  2. In Azure Pipelines passare a Librerie Proteggere i>file. Selezionare + Secure file (+ Secure file ) e caricare il file dell'archivio chiavi nella libreria di file protetti. Durante il caricamento, l'archivio chiavi viene crittografato e archiviato in modo sicuro.

Aggiungere l'attività di firma alla pipeline

Aggiungere l'attività AndroidSigning@3 alla pipeline YAML dopo il passaggio che compila l'app. Nell'attività AndroidSigning@3 :

  • <apkFiles> è obbligatorio ed è il percorso e i nomi dei file APK da firmare. Il valore predefinito è **/*.apk.
  • <apksign> deve essere true, ovvero l'impostazione predefinita.
  • <keystore-file> è 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.

È possibile impostare e usare le variabili in YAML oppure è possibile impostare le variabili usando la scheda Variabili nell'interfaccia utente di Azure Pipelines e farvi riferimento in YAML.

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

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.

Firmare l'app Apple iOS, macOS, tvOS o watchOS

Per firmare ed effettuare il provisioning dell'app, la compilazione Xcode o Xamarin.iOS deve accedere al certificato di firma P12 e a uno o più profili di provisioning. I passaggi seguenti illustrano come ottenere questi file.

Ottenere il certificato di firma P12

  1. 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. Passare a Xcode Preferences Accounts (Account preferenze>Xcode).>

      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. Nella finestra di dialogo immettere il nome del certificato, il percorso per salvare il file e una password per proteggere il certificato.

    • In alternativa, usare la procedura descritta in Firma iOS per seguire un processo simile usando l'app Keychain Access in macOS o generare un certificato di firma in Windows.

  2. Caricare il file P12 nella libreria di file protetti di Azure Pipelines. Durante il caricamento, il certificato viene crittografato e archiviato in modo sicuro.

  3. Nella pipeline passare alla scheda Variabili e aggiungere una variabile denominata P12password con la password del certificato come valore. Assicurarsi di selezionare l'icona di blocco per proteggere la password e nasconderla nei log.

Ottenere il profilo di provisioning

Se l'app non usa la firma automatica, è possibile scaricare 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 passare a Xcode Preferences Accounts (Account preferenze>Xcode).> 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

Per firmare ed effettuare il provisioning dell'app, è possibile installare il certificato e il profilo durante ogni compilazione o preinstallare i file in un agente di compilazione macOS.

Installare il certificato e il profilo durante ogni compilazione

Installare il certificato e il profilo durante ogni compilazione quando non si ha accesso permanente all'agente di compilazione, ad esempio quando si usano agenti macOS ospitati. Il certificato E il profilo di provisioning P12 vengono installati all'inizio della compilazione e rimossi al termine della compilazione.

  • Aggiungere l'attività InstallAppleCertificate@2 alla pipeline YAML prima dell'attività Xcode o Xamarin.iOS. Nel codice sostituire <secure-file.p12> con il nome del file con estensione p12 caricato. Usare la variabile per l'oggetto protetto P12password.

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

    Nota

    Nell'attività InstallAppleCertificate@2 il deleteCert parametro viene impostato per impostazione predefinita su true, che rimuove il certificato dopo la compilazione.

  • Aggiungere l'attività InstallAppleProvisioningProfile@1 al file YAML prima dell'attività Xcode o Xamarin.iOS. Sostituire <secure-file.mobileprovision> con il nome del file del profilo di provisioning.

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

    Nota

    Nell'attività InstallAppleProvisioningProfile@1 il removeProfile parametro viene impostato per impostazione predefinita su true, che rimuove il profilo dopo la compilazione.

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

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

Anziché installare il certificato di firma e i profili di provisioning durante la compilazione, è possibile preinstallarli in un agente di compilazione macOS. I file sono quindi disponibili per l'uso continuo da parte delle compilazioni. Usare questo metodo solo quando si considera attendibile le persone e i processi che hanno accesso al keychain macOS nel computer dell'agente.

Preinstallare il certificato P12

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

    sudo security import <certificate.p12> -P <password>
    
  2. Aggiungere una nuova variabile alla pipeline denominata KEYCHAIN_PWD. Impostare il valore come password sul keychain predefinito, che in genere è la password per l'utente che avvia l'agente. Assicurarsi di selezionare l'icona di blocco per proteggere la password.

Preinstallare il profilo di provisioning

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

  2. Per installare il profilo di provisioning nel computer agente, eseguire il comando seguente da una finestra del terminale macOS. Sostituire <profile> con il percorso del file del profilo di provisioning e 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
    

Aggiungere attività di firma e provisioning che usano il keychain predefinito

  • Aggiungere l'attività InstallAppleCertificate@2 alla pipeline YAML prima dell'attività Xcode o Xamarin.iOS. Nel codice impostare i valori seguenti:

    • certSecureFile: nome del file con estensione p12 caricato.
    • certPwd: variabile per l'oggetto protetto P12password.
    • signingIdentity: nome completo dell'identità di firma.
    • keychain: defaultper consentire l'accesso al portachiavi predefinito.
    • keychainPassword: variabile KEYCHAIN_PWD .
    • deleteCert: falseper 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 l'attività InstallAppleProvisioningProfile@1 . Nel codice:

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

L'agente di compilazione macOS può ora firmare ed effettuare il provisioning sicuro dell'app per tutte le compilazioni senza ulteriore gestione del certificato o del profilo.

Fare riferimento ai file protetti nell'attività di compilazione Xcode o Xamarin.iOS

Per usare il certificato e il profilo sicuri nelle pipeline, configurare le impostazioni seguenti nelle attività di compilazione Xcode o Xamarin.iOS.

I riferimenti ai file protetti nelle attività di compilazione usano variabili per signingIdentity e provisioningProfileUuid. Queste variabili vengono impostate automaticamente dalle attività Installa certificato Apple e Installa profilo di provisioning Apple per il certificato e il profilo di provisioning selezionati.

Per Xcode:

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

Per Xamarin.iOS:

- task: XamariniOS@2
    inputs:
      solutionFile: '**/*.iOS.csproj'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'

L'agente di compilazione della pipeline firma e effettua ora il provisioning sicuro dell'app senza ulteriore gestione del certificato o del profilo nel computer di compilazione stesso.

Per altre informazioni: