Swift: come usare PREPROCESSOR Flags (come `#if DEBUG`) per implementare le chiavi API?

In Objective-C è stato talvolta utile utilizzare costanti di stringa statiche per definire chiavi API alternative (ad esempio per distinguere tra le chiavi RELEASE e DEBUG per i pacchetti di analisi, come MixPanel, Flurry o Crashlytics):

 #if DEBUG static NSString *const API_KEY = @"KEY_A"; #else static NSString *const API_KEY = @"KEY_B"; #endif 

e poi…

 [Analytics startSession:API_KEY]; 

Come si traduce in Swift, dal momento che il compilatore Swift non utilizza più un preprocessore?

Apple ha incluso il supporto completo per i flag del preprocessore Swift a partire da Xcode 8 , quindi non è più necessario impostare questi valori in “Altri Swift Flags”.

La nuova impostazione è denominata “Condizioni di compilazione triggers”, che fornisce il supporto di livello superiore per l’equivalente Swift dei flag del preprocessore. Lo usi esattamente nello stesso modo in cui faresti “Altri Swift Flags”, tranne che non è necessario anteporre il valore a “-D” (quindi è solo un po ‘più pulito).

Dalle note di rilascio di Xcode 8 :

Active Compilation Conditions è una nuova impostazione di build per il passaggio di flag di compilazione condizionale al compilatore Swift. Ogni elemento del valore di questa impostazione passa a swiftc preceduto da - D, nello stesso modo in cui gli elementi delle Preprocessor Macros di Preprocessor Macros passano a clangare con lo stesso prefisso. (22457329)

inserisci la descrizione dell'immagine qui

Si utilizza l’impostazione sopra in questo modo:

 #if DEBUG let accessToken = "DebugAccessToken" #else let accessToken = "ProductionAccessToken" #endif 

AGGIORNATO: Xcode 8 ora lo supporta automaticamente, vedi la risposta di @ DanLoewenherz sopra.

Prima di Xcode 8, puoi ancora utilizzare Macro allo stesso modo:

 #if DEBUG let apiKey = "KEY_A" #else let apiKey = "KEY_B" #endif 

Tuttavia, per poter essere raccolti da Swift, devi impostare “Altri Swift Flags” nelle impostazioni di costruzione del tuo objective:

  • Apri le impostazioni di costruzione per il tuo objective
  • Cerca “altre bandiere veloci”
  • Aggiungi i macro che desideri utilizzare, preceduti dal flag -D

inserisci la descrizione dell'immagine qui