如何在运行时从 InfoPlist.string 获取值?
Posted
技术标签:
【中文标题】如何在运行时从 InfoPlist.string 获取值?【英文标题】:How to get a value from InfoPlist.string at runtime? 【发布时间】:2021-06-09 11:54:36 【问题描述】:在Project/SupportingFiles/en.lproj/InfoPlist.strings
我有这个值:
NSUserTrackingUsageDescription = "虚拟";
这是一个本地化 InfoPlist.strings
文件,它可以是多种语言。在这种情况下,文件夹en.lproj
是英文的。
例如,假设在编译之前我可以向NSUserTrackingUsageDescription
写入一个值,并且我需要确保它在运行时是否为“虚拟”。
如果NSUserTrackingUsageDescription
是“dummy”或其他字符串,是否可以在 Swift 运行时检查 Swift?
我正在研究,但找不到任何 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
。
【问题讨论】:
在你的代码库中搜索 "replaced with translation from" 。具体来说,也许这个后缀是由“logger”类出于某种原因添加的 “NSUserTrackingUsageDescription 可以有多个值”,你确定吗? 您是否在此 Plist 中为“NSUserTrackingUsageDescription”添加了多个值? @JoakimDanielson 我的意思是我需要知道这个价值。如果我在那里执行一个带有 dummy 的项目,我想在那里阅读 dummy。 @ManuRaphy 阅读我之前的评论 【参考方案1】:最好的方法是使用:
guard let string = Bundle.main.object(forInfoDictionaryKey: "NSUserTrackingUsageDescription") as? String
else fatalError("not found")
来自 Apple 的 docs:
使用此方法优于其他访问方法,因为它会在键可用时返回键的本地化值。
【讨论】:
以上是关于如何在运行时从 InfoPlist.string 获取值?的主要内容,如果未能解决你的问题,请参考以下文章