Немного больше информации о вашей схеме cloudkit может помочь, но, если вы используете publicDB для хранения информации, для пользователя будет создана уникальная запись, когда он впервые выполнит действие, которое сохраняет данные в cloudkit.
Таким образом, вы можете проверить и посмотреть метку времени createDate объекта User в cloudkit и сравнить с текущим временем (немного неуклюже, но возможно).
Пример кода для извлечения пользователя:
iCloudUserIDAsync { (recordID: CKRecord.ID?, error: NSError?) in
if let userID = recordID?.recordName {
self.loggedInUserID = userID
self.loggedInWithiCloud = true
} else {
self.loggedInWithiCloud = false
print("Fetched iCloudID was nil")
}
}
В качестве альтернативы и более элегантно, вы можете записать логический флаг в пользовательский объект CloudKit (или локально в CoreData) при первом запуске. Затем при любом запуске получите весь пользовательский объект для вошедшего в систему пользователя iCloud, затем вы можете инициализировать его, а затем действовать оттуда к своей логической переменной.
Пример кода для получения полного пользователя и его локальной инициализации:
CKContainer.default().publicCloudDatabase.fetch(withRecordID: userRecordID) { (results, error ) in
if results != nil {
//now that you have the user, you can perform your checks
self.currentUser = MyUser(record: results!)
}
if let error = error {
print("couldn't set user reference")
}
DispatchQueue.main.async {
completion(nil)
}
}