如何在运行时从 InfoPlist.string 中获取值?

How to get a value from InfoPlist.string at runtime?

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

NSUserTrackingUsageDescription = "dummy";

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

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

如果 NSUserTrackingUsageDescription 是“虚拟”或其他字符串,可以在运行时使用 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 is dummy, replaced with translation from InfoPlist.strings

我不知道为什么系统要将, replaced with translation from InfoPlist.strings添加到dummy

最好的方法是使用:

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

来自 Apple docs 的注释:

Use of this method is preferred over other access methods because it returns the localized value of a key when one is available.