UserDefaults имеют разные значения в одной группе приложений

У меня есть приложение + расширение, и я сделал общее хранилище, как это

extension UserDefaults {
    static let suiteName = "group.myApp"
    static let extensions = UserDefaults(suiteName: suiteName)!

    private enum Keys {
        static let personNames = "personNames"
    }

    var personNames: [String] {
        get {
            guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
                return []
            }
            return array
        }
        set {
            UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
        }
    }}

Но когда я отлаживаю приложение, я вижу адрес памяти A и правильные значения (потому что я помещаю значения через Основное приложение, но когда я отлаживаю расширение, у меня есть адреса памяти B и никаких значений внутри.

Я использую одну и ту же группу приложений как в основном приложении, так и в приложении Extension, и у меня такой доступ к данным

   let personNames = UserDefaults.extensions.personNames

Это проблема, что я использую бесплатный аккаунт Apple Id? У меня есть возможность создавать группы с этим аккаунтом, поэтому я сомневаюсь.

2 ответа

Решение

Хорошо, я нашел решение. Я создал новую группу в формате goup.com.company.appName.sharedStorage, а также использую ее как suitName, и все работает.

Поэтому, возможно, из-за бесплатной учетной записи Apple возникла проблема с созданием групп приложений (потому что это происходит автоматически) или, возможно, из-за того, что формат group.appName недопустим.

РЕДАКТИРОВАТЬ:
Да, вам может понадобиться платная учетная запись разработчика Apple, поскольку вам нужно включить функцию группы приложений, связанную с идентификатором вашего приложения.

Оригинальный ответ:
Вам может понадобиться позвонить synchronize() записать ваши данные немедленно на диск.

var personNames: [String] {
    get {
        guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
            return []
        }
        return array
    }
    set {
        UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
        UserDefaults.extensions.synchronize()
    }
}}
Другие вопросы по тегам