Как добавить предварительно скомпилированный заголовок в xcode 11 - PullRequest
0 голосов
/ 18 июня 2020

Я хотел определить несколько пользовательских значений в pre-compiled header для разных целей моего приложения. Я пробовал следующее, чтобы определить заголовки, но ни один из них не работал:

  1. путем добавления заголовка из Editor -> Add Build Setting -> Add User Defined setting и назначения пары значений ключа.
  2. Установить Preprocess info.plist файл на ДА в Build Settings и установите файл заголовка (.h) в Info.plist Preprocessor Prefix file.

Как мне добавить и установить ключ pch, чтобы я мог установить true для цели UAT и false для Производственная цель с использованием #if?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Если единственной целью является установка разных значений для разных сред - development, QA, UAT, Production, можно использовать файлы xcconfig.

Никакие условные операторы не требуются, но в зависимости от конфигурации они будут принимать соответствующие значения.

Необходимые шаги:

  1. Добавить другие Схема и различные конфигурации сборки.

  2. Добавьте файл настроек конфигурации, выбрав File-> New-> File и "Configuration Settings file" -> Development.xcconfig, UAT.xcconfig, Production.xcconfig et c

enter image description here

Добавьте настраиваемые ключи по вашему выбору в файл конфигурации и их соответствующие значения в пару «ключ-значение» как:

endpointUrl = "Production_Url" для Production.xcconfig

endpointUrl = "UAT_Url" для UAT.xcconfig

enter image description here

Добавьте соответствующие файлы plist и укажите ключи из файла .xcconfig в файл .plist. Создайте UAT.plist для файла UAT.xcconfig и аналогичный способ для других поддерживаемых конфигураций.

enter image description here

Задайте соответствующий путь к списку файлов для каждой конфигурации сборки в разделе Project -> Info -> Configurations

enter image description here

Создайте файл .swift для чтения файла конфигурации, например:

publi c enum PlistKey {case EndpointURL

func value() -> String {
    switch self {
    case .EndpointURL:
        return "endpointUrl"
    }
} }

publi c struct Environment {

    fileprivate var infoDict: [String: Any]  {
        get {
            if let dict = Bundle.main.infoDictionary {
                return dict
            }else {
                fatalError("Plist file not found")
            }
        }
    }
    public func configuration(_ key: PlistKey) -> String {
        switch key {
        case .EndpointURL:
            return infoDict[PlistKey.EndpointURL.value()] as? String ?? "noValue"
        }
    }
}
Назовите URL как:

let server_url = Environment().configuration(PlistKey.EndpointURL)

Более подробная версия на: https://www.freecodecamp.org/news/managing-different-environments-and-configurations-for-ios-projects-7970327dd9c9/

0 голосов
/ 18 июня 2020

Если вы используете swift. Затем вы можете добавить собственные быстрые флаги. В разделе «Параметры сборки» -> «Компилятор Swift» - «Пользовательские флаги».

, а затем в коде используйте

#if YourFlag
....
#else
...