Я пытаюсь решить эту проблему уже несколько дней. В настоящее время я сохраняю идентификатор пользователя и идентификатор устройства в связке ключей, поэтому, если пользователь устанавливает приложение на другое устройство, он / она может получить доступ к данным из нашего бэкэнда без проблем.
Я занимаюсь разработкой на iPhone, а вторым устройством является iPad. Когда я впервые протестировал синхронизированные ключи, iPad загрузил их, как и ожидалось, и все работало нормально. Но затем синхронизация остановилась, когда я начал удалять или обновлять ключи.
В настоящее время оба устройства не могут получать обновления от Apple.
Я думал, что это проблема инфраструктуры. Я использовал KeychainSwift , потому что это проще. Поэтому я изменил его на KeychainAccess . В обеих платформах состояние одинаковое, синхронизация между устройствами отсутствует.
Я попытался отключить / включить связку ключей для iCloud на обоих устройствах, выйти и снова, сбросить настройки и войти в систему. Кажется, ничего не работает. Я не могу продолжать работу над приложением.
Вот как я инициализирую использование KeychainAccess:
// Reading
static func read (key: SettingKey, syncronizable: Bool = true) -> Data? {
let keychain = Keychain(service: Settings.service,
accessGroup: Settings.accessGroup)
.accessibility(.afterFirstUnlock)
.synchronizable(syncronizable)
do {
return try keychain.getData(key.rawValue)
} catch (let error) {
appLog("? Keychain error: \(error.localizedDescription)")
}
return nil
}
// Writing
static func write (key: SettingKey, value: Data, syncronizable: Bool = true) -> Void {
let keychain = Keychain(service: Settings.service,
accessGroup: Settings.accessGroup)
.accessibility(.afterFirstUnlock)
.synchronizable(syncronizable)
keychain[data: key.rawValue] = value
}
SettingKey
- это строковое перечисление. Settings.service
и Settings.accessGroup
- это постоянные c константы, определенные как строки. appLog
- метод отладочной печати.
Я застрял с этой проблемой. Любая помощь приветствуется.