Por que o NSUserDefaults não funciona entre meu aplicativo e a extensão de compartilhamento?
Eu tenho um aplicativo iOS com uma extensão de compartilhamento. Estou tentando compartilhar dados entre eles usando NSUserDefaults e App Groups, mas, enquanto posso escrever no objeto NSUD, lê-lo esynchronize()
sem erro, a leitura na extensão sempre resulta emnil
.
Eu tenho um grupo de aplicativos, a string literal "group.net.foo.bar" para a qual o aplicativo e a extensão foram configurados em Recursos -> Grupos de aplicativos. Essa string está em uma estrutura de constantes no meu aplicativo:
struct Forum {
static let APP_GROUP = "group.net.foo.bar"
static let AUTH_KEY = "AUTH_KEY"
}
No aplicativo principal, crio um objeto UserDefaults e escrevo para ele:
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()
Criando um novo objeto NSUD depois dissosynchronize()
e recuperar o AUTH_KEY funciona. Na extensão, crio um NSUD e tento recuperar o valor, sem sucesso:
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
Em toda a minha leitura dos documentos da Apple e perguntas deprimente semelhantes aqui no Stack Overflow, não posso adivinhar o que fiz de maneira incorreta.
Xcode versão 8.0 (8A218a), também testado com o Xcode 8.1 Beta 2. O mesmo comportamento no simulador e no meu iPhone 6s executando o iOS 10.