Почему 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.