Warum funktioniert NSUserDefaults nicht zwischen meiner App und meiner Freigabeerweiterung?
Ich habe eine iOS-App mit einer Freigabeerweiterung. Ich versuche, Daten mit NSUserDefaults und App Groups zwischen ihnen auszutauschen, aber ich kann in das NSUD-Objekt schreiben, es lesen undsynchronize()
ohne Fehler führt das Einlesen der Erweiterung immer zunil
.
Ich habe eine App-Gruppe, die Literalzeichenfolge "group.net.foo.bar", für die sowohl die App als auch die Erweiterung unter Funktionen -> App-Gruppen konfiguriert wurden. Diese Zeichenfolge befindet sich in einer Konstantenstruktur in meiner App:
struct Forum {
static let APP_GROUP = "group.net.foo.bar"
static let AUTH_KEY = "AUTH_KEY"
}
In der Haupt-App erstelle ich ein UserDefaults-Objekt und schreibe darauf:
fileprivate lazy var userDefaults: UserDefaults = {
let defaults = UserDefaults()
defaults.addSuite(named: Forum.APP_GROUP)
return defaults
}()
// later
userDefaults.set(apiKey, forKey: Forum.AUTH_KEY)
userDefaults.synchronize()
Nachher ein neues NSUD-Objekt erstellensynchronize()
und das Abrufen des AUTH_KEY funktioniert. In der Erweiterung erstelle ich eine NSUD und versuche, den Wert ohne Erfolg abzurufen:
private lazy var userDefaults: UserDefaults = {
let defaults = UserDefaults()
defaults.addSuite(named: Forum.APP_GROUP)
return defaults
}()
// later
private func getApiKey() -> String? {
return userDefaults.string(forKey: Forum.AUTH_KEY)
}
// returns nil
In all meinen Lektüren der Apple-Dokumente und den bedrückend ähnlichen Fragen hier zu Stack Overflow kann ich nicht sagen, was ich falsch gemacht habe.
Xcode Version 8.0 (8A218a), ebenfalls mit Xcode 8.1 Beta 2 getestet. Gleiches Verhalten auf Simulator und meinem iPhone 6s mit iOS 10.