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.

questionAnswers(2)

yourAnswerToTheQuestion