2012-09-24 32 views
25

Apple为每个应用引入了新的隐私设置,允许用户决定是否允许应用访问用户的联系人,日历,照片和提醒。当应用程序首次尝试访问其中一个资源时,用户将看到UIAlertView,类似于应用程序想要位置访问时的已知机制。如何本地化iOS 6新Info.plist隐私目的字符串?

也可以设置目的字符串,让用户知道为什么应用程序想要访问。但是,这现在通过Info.plist中的键来完成,例如, “联系人的隐私 - 联系人使用说明”(NSContactsUsageDescription)。

现在我问自己,我该如何定位这些值?对于位置目的文本,我用NSLocalizedString(...)来设置CLLocationManager实例的目的属性。我如何在Info.plist中执行与这些新键类似的操作?

附录: 新的隐私密钥在以下链接中列出,但摘要列不一一列举了为本地化: https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW14

回答

44

将密钥添加到支持文件中的本地化InfoPlist.strings。 它应该是这样的目的:

/* Localized version of location services purpose for Info.plist */ 
NSLocationUsageDescription = "here is your purpose to use location service"; 
+0

如果您仍在处理最初使用Xcode 3.x创建的项目,则不存在“InfoPlist.strings”文件。所以你必须手动添加文件到你的项目。 – Tafkadasoh

+1

在此查找您的给定用途的密钥(2014年2月最后更新 - 在InfoPlist.strings文件中使用**键**值或在常规Info.plist文件中使用** Xcode名称**):[信息属性列表主要参考:Cocoa Keys](https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html) – leanne

11

您可以通过本地化的InfoPlist.strings文件本地化您的Info.plist。

+0

不适用于我。在Info.plist本地化建设失败,并出现以下消息:“无法从'/home/username/Git/iOS/AppName/Resources/AppName-Info.plist'中读取数据:文件”AppName-Info.plist“无法因为没有这样的文件而被打开。“ – Tafkadasoh

+0

这看起来像是你想打开Info.plist文件,而不是.strings文件。字符串文件位于其各自的本地化文件夹中。看看这个示例https://github.com/Abizern/SimpleLocalisationTesting在iOS项目中,您可以看到如何使用本地化.lproj文件夹中的InfoPlist.strings文件为不同的本地化使用不同的应用程序名称。 – Abizern

+0

好的,这适用于CFBundleDisplayName,但只是部分。主屏幕显示来自InfoPlist.strings的本地化字符串,但是如果我想用'[[[NSBundle mainBundle] infoDictionary] objectForKey:@“CFBundleDisplayName”]'以编程方式查询值,这不起作用。关于NSContactsUsageDescription的本地化,我无法测试这是否正常,因为对话框只显示一次。 (原因:删除应用程序并重新安装不会让系统忘记用户的决定,如果应用程序被允许访问联系人。) – Tafkadasoh