Main.bundle.infoDictionary 返回空字典



在我的项目中,我有一个单独的网络代码模块,我需要在每个请求的标头中设置应用程序的版本号。

在网络管理器的初始化调用期间Bundle.main.infoDictionary?["CFBundleShortVersionString"]因为 infoDictionary 是空的,尽管主捆绑包已加载。

试试这个:

let bundle = Bundle(for: type(of: self))
if let version = bundle.infoDictionary?["CFBundleShortVersionString"] as? String {
        print(version)
}

您可以使用以下扩展名

extension Bundle {
    var versionNumber: String? {
        return infoDictionary?["CFBundleShortVersionString"] as? String
    }
    var buildNumber: String? {
        return infoDictionary?["CFBundleVersion"] as? String
    }
}

然后像这样使用它:

Bundle.main.versionNumber

现在有一个访问器,"object(forInfoDictionaryKey:()",它给你这个:

if let version = Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString") as? String {
  print(version)
}

不过它更长。 :-)

if let version = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
    print(version)
}

你可以试试这个。

最新更新