#swift #cloudkit
#swift #cloudkit
Вопрос:
У меня есть приложение для iOS, большая часть функциональности которого зависит от cloudkit. Тем не менее, я, кажется, могу перейти в состояние, когда пользователь частично вошел в систему. Основные проверки входа в cloudkit пройдены, я могу получить свой RecordID, но я не могу читать или записывать в записи, как при полном входе в систему.
Полная информация ниже — есть идеи о том, как определить это состояние без тестирования чтения или записи?
При запуске телефона я получаю предупреждение «Обновить настройки Apple ID», в котором говорится
«Некоторые службы учетной записи будут недоступны, пока вы не выполните повторный вход»
Итак, проблема явно связана с этим (что, похоже, часто встречается в симуляторе …). Если я доберусь до своих настроек и повторно введу свой пароль, все в мире в порядке. Я могу справиться с этим путем обработки ошибок при попытке чтения или записи, но я бы предпочел проверить заранее и соответствующим образом предупредить пользователя.
Как я проверяю сегодня:
При запуске я проверяю, авторизован ли пользователь в cloudkit:
if FileManager.default.ubiquityIdentityToken != nil {
print("User logged in") // IT PASSES IN THIS STATE
}
else {
print("User is not logged in")
}
Пока все хорошо. Тест пройден, пользователь авторизован. Однако, когда я перехожу к чтению или записи, становится ясно, что я НЕ вошел в систему. Например, я получу CKErrorPermissionFailure при попытке записи.
Дополнительное примечание — в текущем «частично»? состояние входа в систему, приведенное ниже, возвращает правильный идентификатор записи для моего пользователя:
let container = CKContainer.default()
container.fetchUserRecordID() { recordID, error in
Есть идеи о том, как программно определить это частичное состояние для cloudkit? Спасибо!
Ответ №1:
Я не нашел ответа, который бы касался этого, но хотел задокументировать две вещи, которые могли бы быть полезны
-
Хотя проверка статуса возвращается активной, если я затем попытаюсь извлечь запись, требующую вашего входа в iCloud, произойдет сбой, и я могу использовать этот сбой для определения статуса выхода.
-
Другая проблема, с которой я столкнулся, — это несколько пользователей, у которых включен iCloud, но по какой-то причине не включен iCloud Drive. Вы можете проверить это с помощью приведенного ниже подхода:
CKContainer.default().accountStatus { (accountstatus, error) in
switch accountstatus {
case .noAccount:
log.error("user logged out of iCloud OR iCloud Drive off")
case .restricted:
print("restricted")
case .available:
print("user logged into iCloud and iCloud drive")
case .couldNotDetermine:
log.warning("could not determine account status")
default:
log.error("New account status returned")
}
}