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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage