2014-12-03 15 views
8

Come posso distinguere tra due target Xcode con Swift? L'idea è di creare una versione gratuita e una versione a pagamento di un'app con lo stesso codice in Xcode.Distingue tra due target Xcode con Swift

Con l'obiettivo C, è possibile utilizzare macro del preprocessore ma con Swift non sono disponibili.

risposta

0

Poiché Xcode 8 è possibile impostare le condizioni di compilazione nelle Impostazioni di compilazione per ciascun obiettivo in Condizioni di compilazione attiva.

Active Compilation Conditions Screenshot

a quelle definite è possibile utilizzare:

#if FREE 
    //do something 
#endif 

Per maggiori dettagli si vedano i commenti i40west answer e.

20

In Xcode, passare alla configurazione di build per un obiettivo. Trova la sezione chiamata Swift Compiler - Bandiere personalizzate, che contiene un'impostazione denominata Altre bandiere Swift.

Aggiungi un flag da riga di comando per il compilatore per aggiungere un flag, proprio come faresti con il compilatore C.

Swift Compiler Flags

Ora hai -D Something essere passato al compilatore Swift. Nel codice Swift, è ora possibile fare questo:

#if Something 
    let foo = "bar" 
#endif 

Sembra un po 'come il preprocessore C, ma a differenza di C, tutto il codice in tutte le sezioni condizionali deve essere sintatticamente corretto o il programma non verrà compilato. Quindi, puoi impostare un flag su ciascun target nelle impostazioni di build e usarlo nel tuo codice.

+3

Ancora più importante, tutto il codice in un '# se', attivo o no, deve anche essere un'unità sintattica * completa *. Quindi non puoi, ad esempio, mettere un # # if/# else/# endif' attorno a una dichiarazione 'func' e lasciare il corpo della funzione all'esterno di' # if'. – rickster

+0

è questo lavoro nello storyboard, voglio cambiare l'immagine in base all'obiettivo nello storyboard –

+0

Non capisco. non dovrebbe essere 'if Something == QA' else if Something == Stage' ... Nel modo in cui lo hai scritto, sembra che ** l'esistenza ** di quella bandiera sia tutto ciò che è necessario. Cosa accadrebbe se due build hanno la stessa bandiera ?! – Honey

Problemi correlati