Analizzare i file mobileprovision in bash?

Sto costruendo un sistema php / bash / mysql per automatizzare la distribuzione ad hoc per le app di iPhone. Ma voglio leggere la chiave identificativo dell’applicazione nel file mobileprovision dei progetti e cambiarlo in un file info.plist in base a quello.

Attualmente posso creare file ipa da php SE la chiave cfbundleidentifer è uguale al suo file di provisioning.

Ho trovato un codice come questo https://gist.github.com/711794 ma voglio che lo script bash lo integri nel mio sistema.

Grazie

Se lo stai eseguendo su una macchina con mac os x, puoi usare quanto segue:

/usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision) 

Se si desidera estrarre il plist dalla mobileprovision in modo corretto e non fare affidamento su grepping / sedding / etc., È ansible utilizzare OpenSSL come segue:

 openssl smime -inform der -verify -noverify -in file.mobileprovision 

Un esempio completo nel tuo caso potrebbe essere:

 openssl smime -inform der -verify -noverify -in file.mobileprovision > tmp.plist /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' tmp.plist 

La parte OpenSSL dovrebbe funzionare su qualsiasi piattaforma, anche se finora l’ho fatto solo su un Mac. PlistBuddy è solo su Mac, ma è ansible trovare altre utilità per leggere / scrivere file di elenchi di proprietà.

Una soluzione tra tante …

Usa egrep con l’opzione -a, che tratta i file binari come i file di testo e ‘-A 2’ che visualizzeranno le due righe dopo la stringa che vuoi associare: ApplicationIdentifierPrefix.

Successivamente, taglia la linea di parentesi e spazi bianchi usando sed.

Utilizzando una serie di tubi:

 egrep -a -A 2 ApplicationIdentifierPrefix file.mobileprovision | grep string | sed -e 's///' -e 's/<\/string>//' -e 's/ //' 

Ho creato una funzione bash basata sulla risposta di jlawrie per elencare tutti gli ID bundle di .mobileprovision dalla cartella ~/Library/MobileDevice/Provisioning Profiles .

Salvalo nel tuo .bash_profile e chiamalo semplicemente con list_xcode_provisioning_profiles da un terminale.

 list_xcode_provisioning_profiles() { while IFS= read -rd '' f; do 2> /dev/null /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin \ <<< $(security cms -D -i "$f") done < <(find "$HOME/Library/MobileDevice/Provisioning Profiles" -name '*.mobileprovision' -print0) } 

È leggermente noioso, dal momento che una .mobileprovision è “dati firmati PKCS # 7” o giù di lì.

Fortunatamente, puoi probabilmente farla franca con grep 🙂

Ho usato il codice dal repository mobileprovision-read per essere in grado di estrarre informazioni dal file mobileprovision. Questo utilizza API macOS per leggere il file.

Ecco l’utilizzo dall’esecuzione del programma generato:

 mobileprovision-read -- mobileprovision files querying tool. USAGE mobileprovision-read -f fileName [-o option] OPTIONS type – prints mobileprovision profile type (debug, ad-hoc, enterprise, appstore) appid – prints application identifier Will print raw provision's plist if option is not specified. You can also use key path as an option. EXAMPLES mobileprovision-read -f test.mobileprovision -o type Prints profile type mobileprovision-read -f test.mobileprovision -o UUID Prints profile UUID mobileprovision-read -f test.mobileprovision -o ProvisionedDevices Prints provisioned devices UDIDs mobileprovision-read -f test.mobileprovision -o Entitlements.get-task-allow Prints 0 if profile doesn't allow debugging 1 otherwise