ios - 如何在运行时从 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.strings
到dummy
.
解决方案
最好的方法是使用:
guard let string = Bundle.main.object(forInfoDictionaryKey: "NSUserTrackingUsageDescription") as? String
else { fatalError("not found") }
Apple文档中的注释:
使用此方法优于其他访问方法,因为它会在可用时返回键的本地化值。
推荐阅读
- android - 将一个文件移动到另一个包后,aidl 文件不起作用
- jexcelapi - 如何在 JExcel 单元格中传递批量值以重置
- asp.net - 网络表单中的多租户
- javascript - 如何在 MongoDB 中以字段名作为键创建自定义对象作为输出?
- gitkraken - 有什么方法可以更改 GitKraken 中的默认终端?
- java - 尽管我在 Java 中使用 JLayeredpane,但为什么我的对象不会显示在框架中?
- android - 无法从包外部访问电话身份验证卡
- c++ - 通过 Cisco 连接到 OPC UA 服务器,但不是通过 Sinema RC 客户端
- gulp - 将 v-4 中的 Gulp 任务与包装相结合?
- macos - 时间命令的非法选项