2012-09-24 2 views
25

Apple hat neue Datenschutzeinstellungen pro App eingeführt, mit denen Benutzer entscheiden können, ob eine App auf die Kontakte, den Kalender, die Fotos und die Erinnerungen des Benutzers zugreifen darf. Der Benutzer wird eine UIAlertView sehen, wenn eine App zuerst versucht, auf eine dieser Ressourcen zuzugreifen, ähnlich wie bei dem bekannten Mechanismus, wenn eine App den Standortzugriff wünscht.Wie lokalisiere ich iOS 6 neue Info.plist Datenschutzzweckzeichenfolgen?

Es ist auch möglich, Zweckzeichenfolgen festzulegen, damit der Benutzer wissen kann, warum die App zugreifen möchte. Dies wird jedoch jetzt durch Schlüssel in Info.plist, z.B. "Privacy - Contacts Usage description" (NSContactsUsageDescription) für Kontakte.

Jetzt frage ich mich, wie kann ich diese Werte lokalisieren? Für den Standort-Zwecktext habe ich die Zweck-Eigenschaft einer CLLocationManager-Instanz mit NSLocalizedString (...) festgelegt. Wie mache ich etwas Ähnliches mit diesen neuen Schlüsseln in Info.plist?

Nachtrag: Die neuen Datenschutzschlüssel werden unter folgendem Link aufgeführt, aber die Zusammenfassung Spalte listet sie nicht als lokalisierbar zu sein: https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW14

Antwort

44

Fügen Sie den Schlüssel zu lokalisierten InfoPlist.strings in den unterstützenden Dateien hinzu. Es sollte so für den Zweck aussehen:

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

Falls Sie noch an einem Projekt arbeiten, das ursprünglich mit Xcode 3.x erstellt wurde, gibt es keine Datei "InfoPlist.strings". Sie müssen also die Datei manuell zu Ihrem Projekt hinzufügen. – Tafkadasoh

+1

Hier finden Sie die Schlüssel für Ihren bestimmten Zweck (zuletzt aktualisiert im Februar 2014 - verwenden Sie den ** Schlüssel ** Wert in Ihrer InfoPlist.strings Datei oder den ** Xcode Namen ** in Ihrer normalen Info.plist Datei): [Information Property List Schlüsselreferenz: Cocoa Keys] (https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html) – leanne

11

Sie lokalisieren Ihren Info.plist durch die InfoPlist.strings Datei zu lokalisieren.

+0

Funktioniert nicht für mich. Nach lokalisierende Info.plist Build mit der folgenden Meldung fehlschlägt „könnte keine Daten von‚/home/username/Git/iOS/AppName/Resources/AppName-Info.plist‘lesen: Die Datei‚AppName-Info.plist‘kann nicht geöffnet werden, weil es keine solche Datei gibt. " – Tafkadasoh

+0

Das sieht so aus, als ob Sie versuchen, die Info.plist-Datei zu öffnen, nicht die .strings-Datei. Die Zeichenfolgendateien befinden sich in ihrem jeweiligen lokalisierten Ordner. Sehen Sie sich dieses Beispiel an https://github.com/Abizern/SimpleLocalizationTesting Im iOS-Projekt können Sie sehen, wie ich die InfoPlist.strings-Dateien in den lokalisierten .lproj-Ordnern verwende, um unterschiedliche App-Namen für verschiedene Lokalisierungen zu verwenden. – Abizern

+0

Okay, das funktioniert für CFBundleDisplayName, aber nur teilweise. Der Startbildschirm zeigt die lokalisierte Zeichenfolge aus InfoPlist.strings, aber wenn ich den Wert programmatisch mit der abgefragt werden soll ‚[[[NSBundle main] infoDictionary] objectForKey: @‚CFBundleDisplayName‘]‘, das funktioniert nicht. Bezüglich der Lokalisierung der NSContactsUsageDescription kann ich nicht testen, ob das funktioniert, da der Dialog nur einmal angezeigt wird. (Grund: Das Löschen der App und Neuinstallation lässt das System die Entscheidung des Benutzers nicht vergessen, wenn die App auf Kontakte zugreifen darf.) – Tafkadasoh