Подтвердить что ты не робот

Swift: как использовать флаги PREPROCESSOR (например, `#if DEBUG`) для реализации ключей API?

В Objective-C иногда полезно использовать статические строковые константы для определения альтернативных ключей API (например, чтобы различать ключи RELEASE и DEBUG для пакетов аналитики, например MixPanel, Flurry или Crashlytics):

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

а затем...

[Analytics startSession:API_KEY];

Как это перевести на Swift, поскольку компилятор Swift больше не использует препроцессор?

4b9b3361

Ответ 1

Apple включила полную поддержку флагов препроцессора Swift от Xcode 8, поэтому больше не нужно устанавливать эти значения в "Other Swift Flags",.

Новая настройка называется "Активные условия компиляции", которая обеспечивает поддержку верхнего уровня для эквивалента Swift препроцессорных флагов. Вы используете его точно так же, как и "Другие быстрые флаги", за исключением того, что нет необходимости добавлять значение с помощью "-D" (так что это всего лишь немного чище).

Из примечания к выпуску Xcode 8:

Active Compilation Conditions - это новый параметр сборки для передачи условных флагов компиляции компилятору Swift. Каждый элемент значения этого параметра переходит к swiftc с префиксом - D, таким же образом, что элементы Preprocessor Macros переходят к clang с тем же префиксом. (22457329)

введите описание изображения здесь

Вы используете приведенную выше настройку следующим образом:

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

Ответ 2

ОБНОВЛЕНО: Xcode 8 теперь поддерживает это автоматически, см. Ответ @DanLoewenherz выше.

До Xcode 8 вы все равно можете использовать макросы таким же образом:

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

Однако для того, чтобы их подхватили Swift, вам нужно установить "Другие быстрые флаги" в настройках вашей целевой настройки:

  • Откройте настройки сборки для своей цели
  • Искать "другие быстрые флаги"
  • Добавьте макросы, которые вы хотите использовать, которым предшествует флаг -D

enter image description here