2010-10-19 10 views
23

Se ho aggiunto un'impostazione definita dall'utente nella mia configurazione di build, come posso leggere quell'impostazione nel mio codice Objective-C?Come posso accedere a un'impostazione di Xcode definita dall'utente?

Ho due file nel mio progetto, debug.plist e release.plist. Voglio il mio file MainApp.m per leggere uno di questi file in base a quale configurazione di build è in esecuzione. Ho impostato un'impostazione definita dall'utente denominata "nome file" in entrambe le configurazioni Debug e Release per puntare al file appropriato. Ma non so come il mio file MainApp.m possa leggere la variabile filename dalla configurazione corrente in esecuzione.

risposta

8

Il tuo codice non può leggere impostazioni di configurazione arbitrarie. È necessario utilizzare macro preprocessore.

MODIFICA: Ad esempio, nelle impostazioni di destinazione per la configurazione di Debug, è possibile aggiungere DEBUGGING=1 nell'impostazione di creazione Macro di preprocessore e non definire DEBUGGING nella configurazione di rilascio. Poi nel codice sorgente che si possa fare cose come:

#if DEBUGGING 
    use this file 
#else 
    use the other one 
#endif 
+0

Grazie, JWWalker, puoi mostrarmi come definire un macro del preprocessore specifico per il progetto xcode? –

+0

OK, ho aggiunto un esempio alla mia risposta. – JWWalker

+3

P.S. Esiste un modo per utilizzare un'impostazione definita dall'utente: selezionare "Espandi impostazioni di costruzione nel file Info.plist", quindi è possibile utilizzare $ MYSETTING nel file Info.plist. – JWWalker

34

Ecco quello che ho fatto, io non sono sicuro al 100% se questo è quello che cercate:

  1. andare in impostazioni di generazione pannello e scegliere l'icona dell'ingranaggio in basso a sinistra: aggiungere definita dall'utente impostazione
  2. Crea il tuo impostazione definita dall'utente, ad esempio:

    MY_LANG -> en_us 
    
  3. Poi, nella cornice del Macro preprocessore, è possibile fare riferimento tale valore:

    LANGCODE="$(MY_LANG)" 
    

Ora è possibile fare riferimento a langCode in tutti i tuoi file di origine, e sarà ciò che avete compilato nel vostro ambiente di generazione personalizzata . Mi rendo conto che qui c'è un livello di riferimento indiretto, ma nel mio caso è intenzionale: il mio progetto XCode contiene una serie di diversi target/configurazioni con le proprie macro del preprocessore. Non voglio dover entrare in tutti questi, solo per cambiare il codice della lingua. In effetti, definisco il codice della lingua a livello di progetto. Io uso anche MY_LANG in un paio di script, quindi solo non farebbe una macro per il preprocessore. Potrebbe esserci un modo più intelligente, ma questo funziona per me.

+1

ok, posso seguire i primi due passaggi, tuttavia non riesco a capire cosa intendi per impostazione Macro preprocessore nel passaggio tre. Ho provato ad aggiungerlo a GCC_PREPROCESSOR_DEFINITIONS come descritto in http://stackoverflow.com/questions/367368/how-to-define-a-preprocessor-symbol-in-xcode, tuttavia ciò non ha funzionato –

+6

Un altro modo per farlo è dopo hai creato un'impostazione utente, vai alla scheda Fasi di creazione e per il file sorgente in cui è intedita l'impostazione, aggiungi: '-D'LANGCODE = @" $ (MY_LANG) "'". –

+0

Se si definisce la macro per una ** stringa ** nelle impostazioni di generazione, non dimenticare di sfogliare virgolette come questo 'LANGCODE = @ \" $ (MY_LANG) \ "' – DanSkeel

6

Ho provato il suggerimento zmippie ma non ha funzionato per me.

ho preso a lavorare con questo:

${MY_LANG} 
5

Puoi accedere al tuo impostazione a run-time (come suggerito in un commento di @JWWalker) Anno di costruzione definito dall'utente

  1. Aggiungi un ingresso al file Info.plist, e impostarlo per il vostro costruire definito dall'utente Impostazione

    MySetting -> ${MYSETTING} 
    
  2. Leggi il suo valore dal codice

    [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"]; 
    
0

Nel caso in cui nessun altro è ancora bloccato alla ricerca di come fare le macro del preprocessore, cercare l'Apple LLVM - Pre-elaborazione sezione Impostazioni costruire. Sotto di esso, vedrai una sezione chiamata Macro preprocessore.

Questo è dove per impostazione predefinita, Xcode inserisce la macro DEBUG = 1 per la configurazione di build di debug.

È possibile aggiungere il proprio qui e fornire valori diversi per il debug, il rilascio e qualsiasi configurazione personalizzata che si possa avere.

Per aggiungerne uno, fare doppio clic sull'elenco di valori corrente per la configurazione desiderata e verrà visualizzato un piccolo editor con una macro su ciascuna riga. Basta aggiungere il proprio nome macro e dargli un valore nello stesso modo in cui è fatto il DEBUG.

Questi possono essere controllati durante la fase di compilazione del preprocessore utilizzando #if, #ifdef ecc. Per fornire codice o valori condizionali.

Spero che questo aiuti.

Problemi correlati