2015-09-30 11 views
32

Sto configurando Jenkins per automatizzare il processo di compilazione. In particolare, per le mie esigenze, mi piacerebbe essere in grado di impostare diversi identificatori di bundle.Xcode 7: modifica dell'identificatore del bundle del prodotto

Sto usando il plugin Xcode Jenkins per impostare l'identificatore bundle:

Jenkins Xcode plugin - Code signing & OS X keychain options

Il problema è che questo cambierà l'identificatore fagotto nel file Info.plist e in MyTarget> Generale> Bundle Identifier. Ma non cambierà l'identificatore del bundle in Impostazioni di compilazione> Confezione> Identificatore pacchetto prodotto.

La stessa cosa succede se lo faccio manualmente. creo un nuovo progetto in Xcode 7. Per impostazione predefinita, i tre valori sono:

Info plist beforetarget general beforepackaging

quando cambio il valore nel file Info.plist in questo modo:

Info plist changed

Gli altri due valori saranno:

target general after packaging after

Così come si può vedere il valore in Impostazioni di costruzione non sta cambiando. Se sono in Xcode, cambio quel valore manualmente, ma se sto costruendo il progetto in Jenkins questo è un problema bis.

Qualcuno ha riscontrato lo stesso problema? Come lo affronta?

Grazie!

+0

Incontrare lo stesso problema da oggi. Io uso il comando shell 'plistbuddy' per cambiare l'identificatore del bundle. Cambia 'info.plist' ma non modifica l'identificatore del bundle all'interno delle impostazioni di generazione in xCode. –

+0

Grande grazie, non ho capito che deve essere cambiato in 3 posti! – JOM

risposta

24

Di fronte allo stesso problema.

PRODUCT_BUNDLE_IDENTIFIER è una variabile nel file project.pbxproj. Modificalo in base a ciò che desideri e rifletterà sia nel tuo Info.plist che nelle impostazioni del progetto.

+0

quindi dovrei passare 'PRODUCT_BUNDLE_IDENTIFIER = $ CB_APP_ID' ​​a xcodebuild, giusto? –

+0

che ha funzionato. Per la cronaca, sto passando 'PRODUCT_BUNDLE_IDENTIFIER = $ CB_APP_ID' ​​al comando' xcodebuild'. –

23

udit's answer è corretto. La best practice è nel set plist set Valore ID come $ PRODUCT_BUNDLE_IDENTIFIER. Poi, nel impostazioni di generazione, utilizzare configurazioni diverse (debug, .etc di uscita) per impostare diversi ID pacco da richieste: enter image description here

Non è necessario plug xCode cambiare più fascio id ma è necessario specificare la configurazione in là.

enter image description here

+1

nella maggior parte dei casi è la migliore pratica, sono d'accordo. Ma voglio che tutti questi parametri siano personalizzabili. Fondamentalmente voglio avere un'interfaccia web dove il cliente può aggiungere file p12, profilo di provisioning mobile, identificatore di bundle e otterrà un file personalizzato .ipa –

+1

@Aoke Li- Questo sembra un approccio migliore. Ho solo un dubbio con questo. Quando utilizzo identificatori di bundle diversi a seconda delle configurazioni di build, quale valore rifletterà nel riquadro generale di riepilogo Xcode? –

+0

@Rashmi Ranjan mallick- Quindi dopo aver configurato il file di configurazione e creato localmente, noterai che l'ID del bundle nel riquadro generale è stato aggiornato. E poiché non vi è nulla da iniettare nel tempo di costruzione di jekins per quest'area, lo schiavo funzionerà esattamente come la tua macchina dev. –

11

Consultare this per una soluzione semplice per sostituire $ PRODUCT_BUNDLE_IDENTIFIER utilizzando il comando di shell come -

sed -i '' 's/com.example.oldbundleid/com.example.newbundleid/g' project.pbxproj

È possibile passare le variabili di conseguenza utilizzando Jenkins/Shell.

Un approccio alternativo per fare questo è utilizzare mod-pbxproj.

python -m mod_pbxproj -b -af PRODUCT_BUNDLE_IDENTIFIER=com.example.newbundleid -rf PRODUCT_BUNDLE_IDENTIFIER=com.example.oldbundleid project.pbxproj All

// modifica

Vecchio fascio id può essere recuperato da -

awk -F '=' '/PRODUCT_BUNDLE_IDENTIFIER/ {print $2; exit}' project.pbxproj

Questo può essere memorizzato in una stringa variabile e utilizzato al posto di com.example.oldbundleid

+1

Sarebbe più bello con una soluzione che non fosse necessario conoscere il vecchio identificatore del bundle. – turingtested

+0

Aggiornato la mia soluzione. Esso recupera il valore dell'ID del bundle memorizzato da '.pbxproj' a sostituito. @turingtested –

+0

Grande! Sicuramente conosci Bash, grazie! – turingtested

3

per xcode 8.x

Cambiare il nome dell'app in Targets> your_app_name - Info> l'aggiunta di una nuova chiave di proprietà non apporta modifiche complete del nome dell'app ovunque in tutto il progetto.

Quando si esegue questa operazione, il progetto si esegue senza intoppi nel proprio Mac (ovvero, nel sistema in cui si sono utilizzati questi cambiamenti, poiché tutte le chiavi di proprietà & identità verranno salvate nel sistema). Quando si tenta di utilizzare il progetto in un altro sistema, si otterrà questo strano errore che il progetto manca in caso di utilizzo dei pod nel progetto.

Quindi, per ovviare a questo, è necessario apportare alcune modifiche alle impostazioni di creazione , lasciando la scheda Generale e la scheda Informazioni inalterate.

Under Obiettivi> Impostazioni costruire, scorrere fino a Packaging.

Cambia la tua Nome del prodotto al desiderato nome & prodotto fascio identificatore a quello nuovo. Una volta eseguita questa operazione, automaticamente il nome visualizzato del progetto & modifica l'ID del pacchetto a quello nuovo nella scheda Generale.

Problemi correlati