Swift get `Имя схемы или Swift Compiler - флаги Custome` во время выполнения - PullRequest
0 голосов
/ 17 октября 2019

У меня есть проект xcode в swift с 3 схемами.

У меня есть plist-файлы для каждой из этих схем, в этом plist-файле у меня есть значения констант, такие как имя шрифта, цвет и название логотипа и т. Д. Предположим, у меня есть3 схемы 1. Банан 2. Апельсин 3. Apple

Так что для всех этих схем у меня есть имена файлов plist как 1. BananaScheme 2. OrangeScheme 3. AppleScheme

Теперь у меня есть один файл swiftВ этом файле он называется SchemeConfig. Мне нужно прочитать этот файл plist и вернуть значение константы.

Для чтения файла plist у меня есть один метод, как показано ниже

private func getConfigFile() -> [String: Any]? {
        var configFileName: String = ""
        #if Banana
            configFileName = "BananaScheme"
        #elseif Orange
            configFileName = "OrangeScheme"
        #elseif Apple
            configFileName = "AppleScheme"
        #endif

//        let targetName = Bundle.main.infoDictionary?["TargetName"] as! String
        if let url = Bundle.main.url(forResource: "\(configFileName)", withExtension: "plist"),
            let dict = NSDictionary(contentsOf: url) as? [String:Any] {
            return dict
        }
        return nil
    }

Он работает отлично, нопроблема в том, что я не хочу проверять условие #if Могу ли я получить это значение Swift Compiler - Custome Flags во время выполнения?

Как это let targetName = Bundle.main.infoDictionary?["TargetName"] as! String?

Что я хочу,удалить #if условие для проверки схемы.

private func getConfigFile() -> [String: Any]? {
    var configFileName: String = ""

    let schemename = //Code to get scheme name
    if let url = Bundle.main.url(forResource: "\(schemename)Scheme", withExtension: "plist"),
        let dict = NSDictionary(contentsOf: url) as? [String:Any] {
        return dict
    }
    return nil
}

1 Ответ

2 голосов
/ 17 октября 2019

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

Сначала создайте пользовательскую переменную в настройках сборки. В этом случае CURRENT_SCHEME_NAMEenter image description here

Затем присвойте каждому флагу компилятора другое значение, например:

enter image description here

Далее вы хотите добавить эту пару значений ключа в ваш info.plist:

enter image description here

Наконец, вы можете получить доступ к этому значению во время выполнения, используя:

let schemeName = Bundle.main.infoDictionary!["CURRENT_SCHEME_NAME"] as! String

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...