首页 > 解决方案 > 如何在运行时从 InfoPlist.string 获取值?

问题描述

Project/SupportingFiles/en.lproj/InfoPlist.strings我有这个值:

NSUserTrackingUsageDescription = "虚拟";

这是一个本地化 InfoPlist.strings文件,可以是多种语言。在这种情况下,该文件夹en.lproj是英文的。

例如,假设在编译之前我可以写入NSUserTrackingUsageDescription一个值,并且我需要确保它在运行时是否为“虚拟”。

是否可以在 Swift 运行时检查 Swift 是否NSUserTrackingUsageDescription为“dummy”或另一个字符串?

我正在做一项研究,但我找不到任何 Swift 代码来检查它。

编辑

我试过这段代码:

let string = Bundle.main.infoDictionary!["NSUserTrackingUsageDescription"] as! String
    
if (string == "dummy"){
     logger.debug("NSUserTrackingUsageDescription is dummy")
}else{
     logger.debug("NSUserTrackingUsageDescription is \(string)")
}

但它不起作用,因为它进入 else 并打印:

LauncherViewController.requestAppTrackingTransparencyPermission():131

  • NSUserTrackingUsageDescription 是虚拟的,替换为来自 InfoPlist.strings 的翻译

我不知道为什么系统添加, replaced with translation from InfoPlist.stringsdummy.

标签: iosswiftxcodeplistinfo-plist

解决方案


最好的方法是使用:

guard let string = Bundle.main.object(forInfoDictionaryKey: "NSUserTrackingUsageDescription") as? String 
    else { fatalError("not found") }

Apple文档中的注释:

使用此方法优于其他访问方法,因为它会在可用时返回键的本地化值。


推荐阅读