2011-01-20 20 views
48

Non ho trovato nulla su questo (forse sto usando solo i termini di ricerca sbagliati ..):
Stiamo provando a creare un'impostazione di integrazione continua sensibile per le nostre app. Per avere un'implementazione REALMENTE ragionevole, il server di build dovrebbe essere in grado di aggiornare automaticamente i profili di provisioning utilizzati da Apple. Simile a ciò che fa l'organizzatore X-Code, ma automagicamente tramite la riga di comando.
Qualsiasi indizio se è possibile?Riga di comando Aggiornamento dei profili di provisioning

+1

Grazie per questa domanda. Fino ad ora, la mia soluzione da riga di comando era '$ open vnc: // server' ;-) – mpontillo

+0

Dai un'occhiata al seguente URL;
http://stackoverflow.com/questions/4369119/how-to-install-developer-certificate-private-key-and-provisioning-profile-for-ios Penso che sarà d'aiuto. – jfalexvijay

risposta

53

Ecco il mio script di bash per questo, in cui il primo argomento dello script ($ 1) è la posizione dei nuovi profili.

rm -Rf ~/Library/MobileDevice/Provisioning\ Profiles/* 
cp "$1"/*.* ~/Library/MobileDevice/Provisioning\ Profiles/ 

In sostanza, qualsiasi cosa in quel ~/Library/MobileDevice/Prevenzione Profili/cartella può essere utilizzata per costruire con (e apparirà in Xcode).

Se stai cercando un sistema CI, recentemente ho tenuto un discorso sull'utilizzo di Hudson per questo, e ho inserito alcune diapositive e note over here. La mia e-mail è sul mio sito se avete domande su di esso.

+2

cool, grazie per la risposta. Ma hai qualche idea di come ottenere $ 1? Come si ottengono i profili sulla macchina di compilazione in primo luogo? – LordT

+5

Il mio lavoro si sta principalmente contraendo e ogni cliente ha il proprio account iTunes Connect, quindi ho delegato di nuovo a loro. Formati su come aggiornare i profili di provisioning con i nuovi UDID e ho condiviso una cartella Dropbox.com con ognuno di essi dove mantengono i loro specifici profili di provisioning. Il primo passo del mio processo di compilazione è l'aggiornamento dei profili di provisioning con quelli specifici del client su Dropbox, quindi le build usano sempre le ultime. Il caricamento di un nuovo profilo è anche un attivatore di build, in modo che possano aggiungere nuovi dispositivi e ottenere una nuova build senza il mio intervento. –

+0

ok, questo ha senso. Come si attiva una nuova build utilizzando una casella personale? Folderactions? O c'è un'opzione specifica per fare questo? – LordT

1

Provare a utilizzare apple_dev_center.rb da https://github.com/lacostej/apple-dev

Si analizza le informazioni dal sito web degli sviluppatori di Apple e scaricare i profili per voi per copiarli nella posizione corretta automaticamente.

16

Aggiornamento: Cupertino non funzionerà più sull'ultimo iTunes. Considerare di usare sigh invece


Suona come l'interfaccia a riga di comando vi aiuterà fuori tempo grande:

https://github.com/nomad/cupertino

che permette di scaricare tutti i profili di distribuzione in questo modo (@tdubik grazie):

ios profiles:download:all --type distribution

Un altro approccio sarebbe utilizzare un Ente licenza di sviluppo rprise ($ 300/anno) che consente di creare i dispositivi senza il provisioning! In questo modo puoi creare la tua app e inviarla a un dispositivo senza dover mai accedere al centro Apple Dev o registrare nuovi dispositivi.

Nota che questo non ti permetterebbe di distribuire la tua app nell'appstore, ma se sei una casa di sviluppo che costruisce tonnellate di app per i clienti, potrebbe facilitare il tuo processo di "compilazione e invio ai clienti" piuttosto pezzo! Non sono sicuro che questo sia nelle politiche di utilizzo legittimo di Apple o no, quindi per favore verificalo prima di considerare questa opzione. Ma potrebbe essere qualcosa da considerare per i prototipi, ecc., E quando in realtà vogliono spedirli, si ottiene loro di ottenere la propria licenza per i programmi per sviluppatori.

+3

Le licenze aziendali non sono destinate alla distribuzione dell'App Store, quindi è necessario disporre di un altro account sviluppatore con Apple per utilizzarlo in modo produttivo (supponendo che si preveda di spedire le app all'App Store). – danieljimenez

+0

Buon punto ... Ho dimenticato di dirlo ... grazie! –

+2

Grazie per il link github! La migliore risposta qui. Tuttavia, non raccomanderei l'uso di Enterprise per la creazione di app per i client: a Apple non piace. L'azienda è "per la distribuzione interna solo all'interno dell'azienda" e ritengo che l'accordo affermi che è necessario avere il controllo di tutti i dispositivi utilizzati con Enterprise. – Sperr

0

Ho cercato di fare questo lavoro per qualche tempo. Finalmente fatto !!

È possibile utilizzare fastlane sospiro per scaricare e installare solo il profilo provvisorio necessario.

fastlane sigh renew --adhoc -n "provisional_profile_name" 
--app_identifier "your_app_identifier" -u "apple_login _username" --ignore_profiles_with_different_name 

Nota: Questo comando serve qualsiasi profilo provvisorio delle app già installato nel sistema. Ha gettato un errore per me altrimenti.

provisional_profile_name = Solo il nome del nome profilo, non necessario estensione.

1

Sigh in grado di gestire i profili di provisioning per voi. Tuttavia, non supporta l'installazione di profili che hai già recuperato. Tuttavia, ho ancora trovato prezioso per guardare il loro source for how they actually install a profile once they've downloaded it.

Per fortuna, è molto simile a James J's answer:

def self.install_profile(profile) 
    UI.message "Installing provisioning profile..." 
    profile_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/" 
    uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"] 
    profile_filename = uuid + ".mobileprovision" 
    destination = profile_path + profile_filename 

    # If the directory doesn't exist, make it first 
    unless File.directory?(profile_path) 
    FileUtils.mkdir_p(profile_path) 
    end 

    # copy to Xcode provisioning profile directory 
    FileUtils.copy profile, destination 

    if File.exist? destination 
    UI.success "Profile installed at \"#{destination}\"" 
    else 
    UI.user_error!("Failed installation of provisioning profile at location: #{destination}") 
    end 
end 

Ho uno script per eseguire questa installazione locale per me:

#!/bin/bash -euo pipefail 

BASH_SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

cd "$BASH_SOURCE_DIR" 

# by default bash passes the glob characters if nothing matched the glob 
# disable that 
# http://stackoverflow.com/a/18887210/9636 
shopt -s nullglob 
# this creates a proper bash array, which we need since our profiles 
# have funny characters in them 
MOBILE_PROVISIONS=(*.mobileprovision) 
# re-enable default nullglob behavior 
shopt -u nullglob 

# On a brand new machine that has never run any app on a development device 
# the ~/Library/MobileDevice/"Provisioning Profiles" directory doesn't exist 
mkdir -p ~/Library/MobileDevice/"Provisioning Profiles" 

for mobileprovision in "${MOBILE_PROVISIONS[@]}" 
do 
    uuid=$(./uuid-from-mobileprovision.bash "${mobileprovision}") 
    cp "${mobileprovision}" ~/Library/MobileDevice/"Provisioning Profiles"/"${uuid}".mobileprovision 
done 

che dipende da un altro uuid-from-mobileprovision.bash script:

#!/bin/bash -euo pipefail 

if [ ! -f "${1}" ] 
then 
    echo "Usage: $0 <path/to/mobileprovision/file>" 1>&2 
    exit 1 
fi 

UUID=$(grep --text --after-context=1 UUID "${1}" | grep --ignore-case --only-matching "[-A-Z0-9]\{36\}") 
if [ -z "${UUID}" ] 
then 
    echo "Invalid mobileprovision file: ${1}" 1>&2 
    exit 2 
else 
    echo "${UUID}" 
fi 
Problemi correlati