Nota: aggiornamento per macOS 12/Monterey e Xcode 13. Per Xcode 12 e precedenti, vedere questo post del blog.
Con Monterey (macOS 12), si consiglia vivamente di autenticare le applicazioni distribuite su una rete pubblica. Un numero significativo di sviluppatori trasferisce le proprie applicazioni utilizzando un dispositivo di archiviazione collegato o tramite la condivisione di file; la notarizzazione non è necessaria in questi casi in cui l’utente si fida già dello sviluppatore. La notarizzazione ha lo scopo di assicurare agli utenti che l’applicazione non è dannosa ed è necessaria solo per le applicazioni scaricate da un sito web.
Utilizzando la nostra funzione di firma integrata durante la creazione delle applicazioni con 4D v18, l’applicazione è pronta per essere autenticata. Questo processo si svolge al di fuori di 4D. Si tratta di aggiungere una firma elettronica alla domanda e di inviare la domanda firmata a un servizio di controllo automatico. Ecco tutto quello che c’è da sapere:
PREREQUISITI
XCODE
La notarizzazione richiede Xcode 13 o successivo e macOS 12 o successivo.
Se sul vostro Mac è installata più di una versione di Xcode, potete usare l’utility Xcode-select per scegliere la versione appropriata:
sudo xcode-select -s /path/to/Xcode13.app
Anche se di solito non utilizzate direttamente Xcode, dovreste avviarlo almeno una volta. Se vi avvisa di scaricare gli “Strumenti per sviluppatori”, accettate.
Se chiede di confermare le condizioni di licenza, accettarle.
Non è una cattiva idea ripetere questo passaggio dopo aver installato una versione più recente di Xcode. Di solito è necessario accettare le modifiche alla licenza, altrimenti l’autenticazione fallirà.
In alcuni casi, è necessario accedere a https://appleid.apple.com/account/home per accettare le nuove condizioni dell’Apple Store; in caso contrario, l’autenticazione potrebbe fallire (anche se non si desidera pubblicare sull’App Store).
AUTENTICAZIONE A DUE FATTORI
È inoltre necessario aver attivato l’autenticazione a due fattori sul proprio ID Apple.
Se non siete sicuri di aver impostato l’autenticazione a due fattori, accedete alla pagina dell’account dell’ID Apple, cercate l’opzione Autenticazione a due fattori nella sezione Sicurezza e verificate se la funzione è attiva o meno.
Panoramica del processo
Per l’autenticazione notarile è necessaria un’impostazione. Questa operazione deve essere eseguita una sola volta. Poi, per ogni build, è necessario zippare, caricare, attendere i risultati, timbrare e zippare di nuovo. Questo vale per ogni applicazione (client, server, utente singolo, componente) e per ogni build.
Questo post del blog descrive prima ogni fase in dettaglio per aiutare a capire il processo e infine spiega come utilizzare un metodo 4D per automatizzare completamente il lavoro.
Configurazione per una sola volta
Per l’autenticazione sono necessari i seguenti elementi:
- Il vostro account ID Apple, di solito il vostro indirizzo e-mail
- Il vostro team-id aziendale Apple. Vedere sotto “Ottenere i team-id” come recuperarlo.
- Per una password specifica dell’app, vedere di seguito come recuperarla
Con questi dati, possiamo registrare la password nel portachiavi. Questo ci permetterà di autenticare tramite la riga di comando (o automaticamente da 4D) senza fornire la password in chiaro.
Generare una password specifica per l’applicazione
- Accedere ad apple.com.
- Nella sezione Accesso e sicurezza, fare clic su Password specifiche per le app.
- Fare clic su Genera una password specifica per l’app o fare clic su “+”, quindi seguire i passaggi visualizzati sullo schermo.
- Si consiglia di chiamare la nuova password “notarytool”.
- Copiate il codice visualizzato.
Ottenere i team-id
Dovreste aver già richiesto e registrato i certificati Apple per il codesign della vostra applicazione. Di solito ce ne sono due (quattro includendo iOS) quando lo si fa. Uno inizia con Apple Development: il vostro nome (user-id), l’altro con Developer ID Application: nome della società (team-id).
Avviate il portachiavi Apple, selezionate i certificati e verificate se vedete Developer ID Application: company name. In caso affermativo, il numero tra parentesi () è il vostro id.
In caso contrario, eseguite quanto segue nel Terminale:
xcrun altool --list-providers -u "AC_USERNAME" -p secret_2FA_password
sostituite AC_USERNAME con il nome utente del vostro account Apple, il vostro indirizzo e-mail e inserite il codice/2FA copiato in precedenza.
Il terminale risponderà con il vostro team-id.
Maggiori dettagli qui.
Memorizzare le credenziali
Nel Terminale, eseguite quanto segue:
xcrun notarytool store-credentials "notarytool" --apple-id "AC_USERNAME" --team-id <WWDRTeamID> --password <secret_2FA_password>
Mantenete le virgolette (sostituite solo il contenuto), ma non utilizzate i segni <>, ma solo l’id o la password.
Creare / zippare / autenticare / timbrare
Ora, dopo il processo di preinstallazione (una sola volta), è il momento di fare il vero lavoro di compilazione.
Utilizzate il comando o la finestra di dialogo BUILD APPLICATION e create il vostro componente o la vostra applicazione. Utilizzare la funzione di certificazione per firmare automaticamente l’applicazione creata. Se la compilazione fallisce a causa di un errore di firma, occorre prima risolverlo. La certificazione fallirà per le applicazioni non firmate.
Se il componente include eseguibili nella cartella delle risorse o l’applicazione contiene componenti o plugin, questi devono essere validi e firmati in anticipo.
Zip
Una volta terminata la costruzione, il passo successivo è quello di zippare l’applicazione:
Nel Terminale, inserire quanto segue:
/usr/bin/ditto -c -k --keepParent "$APP_PATH" "$ZIP_PATH"
Il modo più semplice per inserire i percorsi corretti è copiarli e incollarli nel Terminale:
/usr/bin/ditto -c -k --keepParent "
Nota: c’è uno spazio dopo keepParent e il segno di virgolette singole.
Ora trascinate l’applicazione o il componente nel Terminale e aggiungete un altro carattere di virgolette per ottenere qualcosa di simile:
/usr/bin/ditto -c -k --keepParent "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.4dbase"
Aggiungere uno spazio, un carattere di virgolette, trascinare e rilasciare la cartella di destinazione, quindi digitare il nome dello zip richiesto, seguito da uno spazio.
La riga finale dovrebbe assomigliare a questa:
/usr/bin/ditto -c -k --keepParent "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.4dbase" "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip"
Premere Invio per eseguire il comando e ottenere lo zip.
Importante: non eseguire questa operazione con altri strumenti di zip, incluso il Finder. Per far funzionare l’autenticazione, è necessario utilizzare il comando ditto.
Carica
Nel Terminale, digitate il seguente comando (attenzione: potete trascinare e rilasciare il percorso del file per facilitare l’operazione):
xcrun notarytool submit /Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip --keychain-profile notarytool --wait
La risposta che si ottiene è la seguente:
Esecuzione dei controlli preliminari per FileTransfer.zip e avvio della connessione al servizio notarile Apple…
ID di invio ricevuto
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
File caricato con successo
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
percorso: /Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip
In attesa del completamento dell’elaborazione.
Stato attuale: Accettato…………..
Elaborazione completata
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
stato: Accettato
Se lo stato è “Invalido”, si può chiedere il motivo digitando:
xcrun notarytool log fb4a2e8f-e2fe-4689-b38f-f6a840abfeb6 --keychain-profile "notarytool" developer_log.json
Il numero dietro il log è l’id della risposta inviata. L’ultimo nome, developer_log.json, è il nome o il percorso di un file di risultati sul disco, scelto a piacere.
Risponde con:
Scaricato con successo il log dell’invio
id: fb4a2e8f-e2fe-4689-b38f-f6a840abfeb6
posizione: /Users/thomas/developer_log.json
Verificare il motivo del fallimento:
cat /Users/thomas/developer_log.json
Automatizzare il processo
Questo lavoro deve essere ripetuto per ogni build; ha senso automatizzarlo. Giusto? Ecco tutto ciò che serve per farlo:
- Copiare e incollare la classe “_build” nella propria applicazione: https://github.com/ThomasMaul/Classes/blob/main/Project/Sources/Classes/_build.4dm
- Documentazione: https://github.com/ThomasMaul/Classes/blob/main/Documentation/Classes/_build.md
- Esempio di utilizzo per la compilazione di Client/Server: https://github.com/ThomasMaul/Classes/blob/main/Project/Sources/Methods/Example_build.4dm
Un altro caso d’uso è la creazione di componenti. I componenti compilati per Silicon Mac devono essere notarizzati, il che rende scomoda la pubblicazione di componenti tramite Github.
Il componente: https://github.com/ThomasMaul/FileTransfer_Class include un metodo “_buildComponent”, che compila, costruisce, firma, autentica, spilla e zippa il componente. Tutto questo è automatico al momento dell’esecuzione.
L’ultimo passo è caricare lo zip come “Release” su GitHub.
Spero che questo suggerimento vi aiuti a notarizzare la vostra prossima applicazione. Non esitate a contattarci sul forum 4D se avete bisogno di ulteriore assistenza.