在主项目中创建使用 .plist 的 Cocoapod

Create Cocoapod that uses a .plist in main project

我正在写一个 Cocoapod 需要从应用 运行 中读取一些配置值。

我希望我可以在我的应用程序项目中创建类似 Config.plist 的东西,并让我的 Cocoapod 阅读它......

private lazy var config: [String: String] = parseConfig()

private func parseConfig() -> [String: String] {
        if let path = Bundle.main.path(forResource: "MyConfig", ofType: "plist"), let dict = NSDictionary(contentsOfFile: path) as? [String: String] {
            return dict
        }
        return [:]
    }

然后我可以在代码中的其他地方引用这些值,例如 self.config["clientId"]! 等等。

然而,在构建我的应用程序并尝试调用需要配置的值时,我得到了

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

我认为它找不到文件。

我是否应该做一些额外的事情让我的 pod 从安装应用程序中的 .plist 读取?

我尝试创建一个自定义 .pist 文件,包括到主应用程序项目中,然后从 cocoapod 中引用它,您的代码工作正常。

myConfig.plist 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>testString</key>
    <string>Test</string>
</dict>
</plist>

cocoapod View Controller:

    private lazy var config: [String: String] = parseConfig()

    private func parseConfig() -> [String: String] {
        if let path = Bundle.main.path(forResource: "myConfig", ofType: "plist"), let dict = NSDictionary(contentsOfFile: path) as? [String: String] {
            return dict
        }
        return [:]
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print(config["testString"])
    }

输出:

Optional("Test")

检查 myConfig.plist 文件格式是否正确以及它是否包含在主应用程序目标中