2011-10-18 10 views
6

Ho un progetto Xcode relativamente grande che produce una singola app. Tuttavia, ho molti clienti/clienti che richiedono una profonda personalizzazione e branding di detta app. Queste configurazioni includono grafica diversa, alcune interfacce e implementazioni diverse e, forse la cosa più importante, i file .xcconfig.Qual è il modo migliore per scambiare i contenuti Xcode per progetti destinati a molti clienti?

Il mio progetto Xcode ha un gruppo dedicato che punta a una cartella di personalizzazione di un particolare client su disco, quindi aprendo il progetto Xcode e creando, si ottiene una build della singola app con le personalizzazioni del client corrente. Per passare a un altro cliente, cambio dove quel gruppo punta su disco. (Ho anche cambiato e reinserito le impostazioni "Based On" di xcconfig nel pannello Info del progetto per ricaricare l'ereditarietà completa di xcconfig: cambiare semplicemente il gruppo contenente uno o più file xcconfig non lo ricarica!) Questo ha funzionato benissimo per 100 + clienti È un po 'noioso passare questa cartella ogni volta che è necessario creare l'app per un client diverso e assicurarsi che xcconfig sia corretto, ma funziona.

Ora sono in procinto di automatizzare build tramite la riga di comando e si sono verificati problemi. La soluzione rapida e sporca per puntare il suddetto gruppo Xcode in una diversa cartella di personalizzazione era copiare il file ProjectName.xcodeproj/project.pbxproj in ProjectName.xcodeproj/project-template.pbxproj e inserire segnaposto all'interno di questo file che può essere scaricato e sostituito con il nome e il percorso della cartella di personalizzazione desiderata. Quindi, sovrascrivere temporaneamente project.pbxproj con project-template.pbxproj modificato e creare per ottenere l'app corretta.

Come probabilmente osservato, project.pbxproj è stato duplicato e modificato e pertanto non verrà più sincronizzato poiché gli sviluppatori modificano l'originale e dimenticano di aggiornare anche il modello. Inoltre, in questo modo non dovrei davvero scherzare con i file pbxproj - sono le cose private di Xcode.

Quindi, c'è un modo migliore per dire a Xcode di una cartella piena di risorse, codice e file di configurazione, magari durante la fase di costruzione con uno script o una variabile di ambiente, piuttosto che a livello di gruppo di progetto? Il bit più complicato sembra essere la catena xcconfig, poiché ogni client ha il proprio file xcconfig che eredita dai file xcconfig di Debug, Development e Distribution della singola app.

Ci scusiamo per la prolissità di questa domanda, ma è un po 'complicato! Ogni suggerimento sarà molto apprezzato!

+0

vedo sono passati 4 anni da quando hai fatto questa domanda - ha trovato una buona soluzione?se è così, sarebbe bello se puoi postarlo! –

+1

@AviramNetanel Non l'ho mai fatto. L'ultima volta che ci ho lavorato, il progetto si è ancora basato sullo scambio di alcuni dettagli nel file 'pbxproj', quindi chiamando' xcodebuild'. –

risposta

2

Penso che fareste meglio a usare la funzione Target in Xcode. Avere un progetto e le risorse di ogni client in quel progetto.

È quindi possibile duplicare il target già presente (fare clic con il pulsante destro del mouse sul target, selezionando il file di progetto in Project Navigator di Xcode).

Tutti i target verranno compilati con lo stesso codice. Devi solo modificare le risorse in Fasi di compilazione> Copia risorse del pacchetto per creare app diverse create per ciascun target. Non c'è bisogno di guardare i file interni di Xcode.

È anche possibile modificare il codice nei file di origine aggiungendo una macro di preprocessore nelle opzioni di compilazione (qualcosa come FIRST_CLIENT=1) e quindi cercare tali definizioni nel file con #if FIRST_CLIENT.

ho set-up un progetto come questo e funziona piuttosto bene:

http://f.cl.ly/items/3G0b0P35261x3O263h14/Screen%20Shot%202011-10-18%20at%2013.55.55.PNG

+0

Darò uno scatto, penso che funzionerà! Ci vorrà un po 'di setup, ma il risultato finale sarà sicuramente meglio che cercare nelle budella di Xcode. –

Problemi correlati