Swift 在运行时获取“方案名称或 Swift 编译器 - 自定义标志”值

2024-03-10

我有 swift 的 xcode 项目,有 3 个方案。

我有每个方案的 plist 文件,在该 plist 文件中我有字体名称、颜色和徽标名称等常量值。 假设我有3个方案 1. 香蕉 2. 橙色 3.苹果

所以我对于这些所有方案我都有 plist 文件名 1.香蕉计划 2. 橙色计划 3.苹果计划

现在我有一个名为的 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
}

因此,您可以根据编译器标志创建用户定义的变量。

First create a user defined variable in build settings. In this case CURRENT_SCHEME_NAMEenter image description here

然后给每个编译器标志一个不同的值,如下所示:

接下来,您需要将此键值对添加到您的 info.plist 中:

最后,您可以使用以下方法在运行时访问该值:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 在运行时获取“方案名称或 Swift 编译器 - 自定义标志”值 的相关文章

随机推荐