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

Nul*_*ion 0 xcode plist ios info-plist swift

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

NSUserTrackingUsageDescription = "虚拟";

它是一个本地化 InfoPlist.strings文件,可以是多种语言。在本例中,该文件夹en.lproj适用于英语。

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

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

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

编辑

我尝试使用以下代码:

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

但它不起作用,因为它输入了 else 并打印了以下内容:

LauncherViewController.requestAppTrackingTransparencyPermission():131

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

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

Don*_*Mag 7

最好的方法是使用:

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

苹果文档中的注释:

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