Ich habe meinen Xcode 8 heute auf Beta 2 aktualisiert und versuche, Daten zwischen App und Today Extension auszutauschen. Ich stehe vor dieser Protokollwarnung:
2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Benutzerstandards] Fehler beim Lesen der Werte in CFPrefsPlistSource <0x1700f1280> (Domäne: group.xpto, Benutzer: kCFPreferencesAnyUser, ByHost: Ja, Container: (null)) : Die Verwendung von kCFPreferencesAnyUser mit einem Container ist nur für Systemcontainer zulässig, die von cfprefsd getrennt werden
Kann mir jemand helfen?
ios
xcode
ios10
ios-app-group
Klevison
quelle
quelle
Antworten:
Dies ist tatsächlich eine falsche Warnung, die in iOS 10 und macOS 10.12 eingeführt wurde:
Wenn Sie Ihre Team-ID voranstellen, wird die Warnung stummgeschaltet, es werden jedoch auch neue leere Benutzerstandards erstellt. Dies führt dazu, dass zuvor gespeicherte Daten nicht mehr lesbar sind.
Die Lösung besteht vorerst darin, sie zu ignorieren.
Auch Apple-Mitarbeiter CFM in den Foren :
quelle
So verwenden Sie UserDefaults mit App-Gruppen, um Daten zwischen Ihrer Haupt-App und Ihrer Erweiterung zu übertragen:
Wählen Sie in Ihrer Haupt-App Ihr Projekt im Projektnavigator aus.
Wählen Sie Ihr Hauptziel für die App aus und wählen Sie die Registerkarte Funktionen.
Schalten Sie den App Groups-Schalter auf ON. Dadurch wird mit dem Entwicklerportal kommuniziert, um eine Reihe von Berechtigungen zu generieren.
Erstellen Sie einen neuen Container. Laut Apple muss Ihre Container-ID mit "group" beginnen, daher ist ein Name wie "group.io.intrepid.myapp" perfekt.
Wählen Sie Ihr Erweiterungsziel aus und wiederholen Sie den Vorgang zum Aktivieren von App-Gruppen. Erstellen Sie keine neue App-Gruppe, sondern wählen Sie einfach die Gruppe aus, die gerade im Haupt-App-Ziel erstellt wurde.
Greifen Sie beim Lesen oder Schreiben von UserDefaults in Ihrer App oder Ihrer Erweiterung nicht darauf zu
UserDefaults.standard
. Verwenden Sie stattdessenUserDefaults(suiteName: "group.io.intrepid.myapp")
. Hinweis: Der Suite-Name ist der Name Ihres App-Gruppen-Containers, der in Schritt 4 erstellt wurde.Stellen Sie sicher, dass die Gruppe aktiviert und dieselbe Gruppen-ID sowohl für den Erweiterungs- als auch für den App-Funktionsbereich verwendet wird!
Das Guthaben geht an http://blog.intrepid.io/ios-app-extensions
quelle
Hatte auch das gleiche Problem mit meiner macOS App.
Gelöst durch: Starten Sie das Gerät neu!
https://stackoverflow.com/a/39876271
quelle
Der SuiteName (Postfix) darf nicht die Haupt-Bundle-ID sein.
quelle
Ändern Sie Ihren Gruppennamen in Xcode-Berechtigungen von:
group.com.mycompany.myapp
Zu
group.MYTEAMID.com.mycompany.myapp
ps: Sie finden Ihre MYTEAMID in der Mitgliedschaft bei developer.apple.com
quelle
Die Lösung für mich bestand darin, nicht denselben Bezeichner für den Bundle-Bezeichner der Anwendung und den Teil nach "Gruppe" zu verwenden.
Angenommen, die App-Bundle-ID lautet "com.app.id", und die Gruppen-ID "group.com.app.id" verursacht Probleme. Nachdem ich es in "group.com.app.id.something" geändert habe, wird es gestoppt.
quelle
Wenn Sie mit Xcode 8.1 Beta erstellen, wird dieselbe Warnung angezeigt, aber Sie erhalten auch den Wert.
quelle
Ich habe das gleiche Problem, wenn ich versuche, initWithSuiteName zu verwenden. Scheint, dass dies ein Fehler von Apple ist. Die einzige Lösung / Problemumgehung, die ich gefunden habe, besteht darin, alle Einstellungen des Geräts zurückzusetzen. Gehen Sie zu Einstellungen -> Allgemein -> Zurücksetzen -> Alle Einstellungen zurücksetzen.
Dadurch werden keine Inhalte auf dem iPhone gelöscht, sondern alle Einstellungen gelöscht. Nach dem Zurücksetzen der Einstellung funktionierte alles einwandfrei. Lassen Sie mich wissen, ob es Ihnen auch hilft.
quelle
Wenn Sie dieses Problem haben, wenn Sie versuchen, Daten mithilfe von in der Erweiterungs-APP zu speichern
userDefault
, haben Sie möglicherweise diesen Code geschrieben:[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];
Dieser Code setzt die Standardeinstellungen zurück
userDefault
.Eigentlich ist der richtige Code:
[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"];
http://www.jianshu.com/p/e782104c3bc3
quelle
Wechsel von
[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];
zu
[[NSUserDefaults alloc] initWithSuiteName:@"nnnnnnnnnn.group.com.xxx.xxx"];
Wo
nnnnnnnnn
ist Ihre Teamnummer, die Sie zum Signieren Ihres Codes verwenden?Getestet unter Xcode 8 GM und iOS 10 GM und funktioniert!
quelle