Почему NSUserDefaults не работает между моим приложением и расширением общего доступа?

У меня есть приложение для iOS с расширением общего доступа. Я пытаюсь обмениваться данными между ними, используя NSUserDefaults и группы приложений, но, хотя я могу записать в объект NSUD, прочитать его, иsynchronize() без ошибок чтение в расширении всегда приводит кnil.

У меня есть группа приложений, буквальная строка «group.net.foo.bar», для которой и приложение, и расширение настроены в разделе Возможности -> Группы приложений. Эта строка находится в структуре констант в моем приложении:

struct Forum {
    static let APP_GROUP = "group.net.foo.bar"
    static let AUTH_KEY = "AUTH_KEY"
}

В основном приложении я создаю объект UserDefaults и пишу в него:

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()

Создание нового объекта NSUD после этогоsynchronize() и получение AUTH_KEY работает. В расширении я создаю NSUD и пытаюсь получить значение, но безрезультатно:

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

Во всех моих чтениях документов Apple и удручающе похожих вопросов здесь, о переполнении стека, я не могу предсказать, что я сделал неправильно.

Версия Xcode 8.0 (8A218a), также протестированная с Xcode 8.1 Beta 2. Такое же поведение на симуляторе и на моем iPhone 6 с iOS 10.

Ответы на вопрос(2)

Ваш ответ на вопрос