iOS 8 hat gestern eine neue API für App-Gruppen veröffentlicht. Früher war es ziemlich chaotisch, Daten auszutauschen und zwischen Apps zu kommunizieren, und ich glaube, genau das soll App Groups korrigieren.
In meiner App habe ich App-Gruppen aktiviert und eine neue Gruppe hinzugefügt, aber ich kann keine Dokumentation zur Verwendung finden. Dokumentations- und API-Referenzen geben nur an, wie eine Gruppe hinzugefügt wird.
Was sollen App-Gruppen wirklich tun? Gibt es irgendwo eine Dokumentation zur Verwendung?
quelle
Freigeben von NSUserDefaults-Daten zwischen mehreren Apps
Um gemeinsame Standardeinstellungen zwischen einer App und einer Erweiterung oder zwischen zwei Apps zu erhalten, müssen Sie in Ihren Einstellungen mithilfe der folgenden Schritte eine App-Gruppe hinzufügen:
Hinweis: Wenn Sie das Apple Developer Portal (die Apple-Website, auf der alle Ihre Zertifikate, Kennungen, Geräte und Bereitstellungsprofile angezeigt werden) aufrufen und zu Kennungen> App-Gruppen wechseln, sollte diese neue App-Gruppe angezeigt werden.
So speichern Sie Daten:
So rufen Sie Daten ab:
quelle
Anwendungsgruppen sind nach meiner Interpretation der vorhandenen Dokumentation in erster Linie für Erweiterungen gedacht, insbesondere für Widgets. Widgets sind ein eigenes Anwendungspaket, das mit Ihrer App koexistiert. Da es sich um eine separate Anwendung handelt und daher über eine eigene Sandbox verfügt, müssen Sie App-Gruppen verwenden, um Dateien freizugeben.
Nach einigem Durchsuchen der Header fand ich die benötigte API, wurde aber tatsächlich als Teil von iOS 7 eingefügt.
NSFileManager
Es gibt eine Methode,containerURLForSecurityApplicationGroupIdentifier:
mit der Sie die Kennung übergeben können, die Sie beim Aktivieren von App-Gruppen für Ihre Apps erstellt haben:quelle
NSUserDefaults
zur Arbeit kommen. Ich kreide bis zu Beta 1 Bug.NSUserDefaults
Datenbank. Siehe meine Antwort.Eine wichtige Falle, die ich heute angezapft habe, ist die folgende:
In vielen Projekten habe ich ein einzelnes App-Ziel gesehen und für jede Konfiguration dieses Ziels unterschiedliche Bundle-IDs festgelegt. Hier wird es chaotisch. Die Entwickler wollten eine Debug-App für die Debug-Konfiguration und eine Produktions-App für das Release-Ziel erstellen.
In diesem Fall verwenden beide Apps dieselben NSUserDefaults, wenn sie wie folgt eingerichtet werden
Dies verursacht vielerorts Probleme:
Die Lösung für dieses Problem besteht im Allgemeinen darin, den Standardschlüsseln die aktuell erstellte Konfiguration voranzustellen. Sie können die Konfiguration zur Laufzeit leicht erkennen, indem Sie verschiedene Bundle-IDs für Ihre Konfigurationen festlegen. Dann lesen Sie einfach die Bundle-ID von
NSBundle.mainBundle()
. Wenn Sie die gleichen Bundle-IDs haben, müssen Sie verschiedene Präprozessor-Makros wie festlegenIn Swift wird es fast gleich aussehen:
quelle
NSUserDefaults.standardUserDefaults()
für Daten verwenden, die nicht freigegeben werden sollen.Lagern
quelle