

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Tutorial: firma del codice Apple con Fastlane nell' CodeBuild utilizzo di S3 per l'archiviazione dei certificati
<a name="sample-fastlane"></a>

[fastlane ](https://docs.fastlane.tools/) è un popolare strumento di automazione open source per automatizzare le distribuzioni e le versioni beta delle tue app iOS e Android. Gestisce tutte le attività noiose, come la generazione di schermate, la firma del codice e il rilascio dell'applicazione.

## Prerequisiti
<a name="sample-fastlane-prerequisites"></a>

Per completare questo tutorial, devi prima aver impostato quanto segue:
+ Un Account AWS
+ Un account [ Apple Developer ](https://developer.apple.com/)
+ Un bucket S3 per l'archiviazione dei certificati
+ fastlane installato nel tuo progetto - [ Guida ](https://docs.fastlane.tools/getting-started/ios/setup/) all'installazione di fastlane

## Passaggio 1: configura Fastlane Match con S3 sul tuo computer locale
<a name="sample-fastlane-S3"></a>

[Fastlane Match ](https://docs.fastlane.tools/actions/match/) è uno degli strumenti [ di ](https://fastlane.tools/) Fastlane e consente una configurazione senza interruzioni per la firma del codice sia nell'ambiente di sviluppo locale che in quello esterno. CodeBuild Fastlane Match archivia tutti i certificati di firma del codice e i profili di provisioning in un Git repository/S3 Bucket/Google Cloud Storage e scarica e installa i certificati e i profili necessari quando richiesto.

In questa configurazione di esempio, configurerai e utilizzerai un bucket Amazon S3 per lo storage. 

1. Inizializza match nel tuo progetto:

   ```
   fastlane match init
   ```

1. Quando richiesto, scegli S3 come modalità di archiviazione.

1. Aggiorna il tuo `*Matchfile*` per usare S3:

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## Passaggio 2: configura il tuo Fastfile
<a name="sample-fastlane-S3-fastfile"></a>

Crea o aggiorna il tuo `Fastfile` con la seguente corsia.

Attivato CodeBuild, Fastlane Match dovrà essere eseguito ogni volta che crei e firmi la tua app. Il modo più semplice per farlo è aggiungere l'`match`azione alla corsia che crea la tua app.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**Nota**  
Assicurati di aggiungere qualcosa `setup_ci` alla `before_all ` sezione in modo che `Fastfile` l'azione di abbinamento funzioni correttamente. Ciò garantisce l'utilizzo di un portachiavi Fastlane temporaneo con le autorizzazioni appropriate. Senza utilizzarlo potresti vedere errori di compilazione o risultati incoerenti. 



## Passo 3: Esegui il `comando` fastlane match per generare i rispettivi certificati e profili
<a name="sample-fastlane-S3-certificates"></a>

Il comando fastlane match per il tipo specificato (ad esempio development, appstore, adhoc, enterprise) genererà il certificato e il profilo se non è disponibile nell'archivio remoto. I certificati e i profili verranno archiviati in S3 da fastlane.

```
bundle exec fastlane match appstore
```

L'esecuzione del comando sarà interattiva e fastlane chiederà di impostare una passphrase per decrittografare i certificati.

## Fase 4: Crea il file di candidatura per il tuo progetto
<a name="sample-fastlane-S3-appfile"></a>

Crea o aggiungi il file dell'applicazione in base al tuo progetto.

1. Crea o aggiungi [ Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [ Appfile, [ Snapfile ](http://docs.fastlane.tools/actions/snapshot/#snapfile)](http://docs.fastlane.tools/advanced/Appfile/), [ Deliverfile in ](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) base ai requisiti di compilazione del tuo progetto.

1. Effettua il commit delle modifiche nel tuo repository remoto

## Fase 5: Creare variabili di ambiente in Secrets Manager
<a name="sample-fastlane-S3-secrets"></a>

Crea due segreti per memorizzare il cookie di sessione Fastlane e la passphrase corrispondente. Per ulteriori informazioni sulla creazione di segreti in Secrets Manager, consulta [ Creare un AWS Secrets Manager segreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

1. Accedi al tuo cookie di sessione fastlane come segue.

   1. Chiave segreta - `FASTLANE_SESSION`

   1. Valore segreto: cookie di sessione generato dall'esecuzione del seguente comando sul computer locale.
**Nota**  
Questo valore è disponibile dopo l'autenticazione in un file locale:`~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Password Fastlane Match - Per consentire a Fastlane Match di decrittografare i certificati e i profili archiviati nel bucket S3, è necessario aggiungere la passphrase di crittografia configurata nella fase di configurazione di Match alle variabili di ambiente del progetto. CodeBuild

   1. Chiave segreta - `MATCH_PASSWORD`

   1. Valore segreto -{{<match passphrase to decrypt certificates>}}. La passphrase viene impostata durante la generazione dei certificati nella Fase 3.

**Nota**  
Durante la creazione dei segreti di cui sopra in Secrets Manager, ricordati di assegnare un nome segreto con il seguente prefisso: `/CodeBuild/`

## Fase 6: Creare una flotta di computer
<a name="sample-fastlane-S3-fleet"></a>

Crea la flotta di elaborazione per il tuo progetto.

1. Nella console, accedi CodeBuild e crea una nuova flotta di elaborazione.

1. Scegli «macOS» come sistema operativo e seleziona il tipo di elaborazione e l'immagine appropriati.

## Fase 7: Creare un progetto in CodeBuild
<a name="sample-fastlane-S3-project"></a>

Crea il tuo progetto in CodeBuild.



1. Apri la AWS CodeBuild console all'indirizzo [ https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Creare un progetto di compilazione. Per informazioni, consulta [Creare un progetto di compilazione (console)](create-project.md#create-project-console) e [Esecuzione di una compilazione (console)](run-build-console.md).

1. Configura il tuo fornitore di sorgenti (ad esempio GitHub, CodeCommit). Questo è l'archivio dei sorgenti del progetto iOS e non il repository dei certificati.

1.  In **Environment (Ambiente)**: 
   + Scegli Capacità ** riservata. **
   + Per ** Flotta**, seleziona la flotta creata sopra.
   + Fornisci il nome del ruolo di servizio che CodeBuild verrà creato per te.
   + Fornisci le seguenti variabili di ambiente.
     + Nome:`MATCH_PASSWORD`, Valore:{{<secrets arn>}}, Tipo: Secrets Manager (Secrets ARN creato nel passaggio 5 per MATCH\_PASSWORD)
     + Nome:`FASTLANE_SESSION`, Valore:{{<secrets arn>}}, Tipo: Secrets Manager (Secrets ARN creato nel passaggio 5 per FASTLANE\_SESSION)

1. In ** ** Buildspec, aggiungi quanto segue:

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## Fase 8: Configurare il ruolo IAM
<a name="sample-fastlane-S3-role"></a>

Una volta creato il progetto, assicurati che il ruolo di servizio del CodeBuild progetto disponga delle autorizzazioni per accedere al bucket S3 contenente i certificati. Aggiungi la seguente politica al ruolo:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## Fase 9: Esegui la compilazione
<a name="sample-fastlane-S3-run"></a>

Eseguire la compilazione. Puoi rivedere lo stato della build e accedere CodeBuild.

Una volta completato il lavoro, sarai in grado di visualizzare il registro del lavoro.

## Risoluzione dei problemi
<a name="sample-fastlane-S3-troubleshooting"></a>
+ Se riscontri problemi con il recupero dei certificati, assicurati che le autorizzazioni IAM siano impostate correttamente per l'accesso a S3.
+ Se riscontri problemi con la decrittografia dei certificati, assicurati di impostare la passphrase corretta nella variabile di ambiente MATCH\_PASSWORD.
+ Per problemi di firma del codice, verifica che il tuo account Apple Developer disponga dei certificati e dei profili necessari e che l'identificatore del pacchetto nel tuo progetto Xcode corrisponda a quello nel tuo profilo di provisioning.

## Considerazioni relative alla sicurezza
<a name="sample-fastlane-considerations"></a>

Di seguito sono riportate le considerazioni sulla sicurezza per questo tutorial.
+ Assicurati che il tuo bucket S3 abbia le impostazioni di sicurezza appropriate, inclusa la crittografia a riposo. In particolare, assicurati che il bucket non abbia accesso pubblico e limita l'accesso solo CodeBuild al sistema che deve avere accesso.
+ Prendi in considerazione l'utilizzo AWS Secrets Manager per archiviare informazioni sensibili come MATCH\_PASSWORD e FASTLANE\_SESSION.

Questo esempio fornisce una configurazione per la firma del codice iOS con Fastlane CodeBuild utilizzando Amazon S3 per l'archiviazione dei certificati. Potrebbe essere necessario modificare alcuni passaggi in base ai requisiti e CodeBuild all'ambiente specifici del progetto. Questo approccio sfrutta i AWS servizi per una maggiore sicurezza e integrazione all'interno dell' AWS ecosistema.