Я пытался сохранить запись в личной базе данных пользователя iCloud и в следующий раз, если эта запись найдена, сохранить ее на сервере. Сейчас в разработке icloud все работает нормально, но при переходе на производство ничего не работает. Я развернул схему разработки icloud в продукте, а затем попытался извлечь запись с идентификатором записи, получив следующую ошибку:
<CKError 0x28327c5a0: "Unknown Item" (11/2003); server message = "Record not found";
, поэтому я попытался создать ее, но ошибка ниже:
Cannot create new type LoginDetail in production schema
Ниже приведен код, который я делаю:
func anonymousSignIn(vc : UIViewController, lat : String, long : String) {
AppLoader.showLoader()
let artworkRecordID : CKRecord.ID = CKRecord.ID(recordName: "MyWord")
let logRecord : CKRecord = CKRecord(recordType: "LoginDetail", recordID: artworkRecordID)
let publicDatabase : CKDatabase = CKContainer(identifier: "iCloud.com.myword.com").privateCloudDatabase
publicDatabase.fetch(withRecordID: artworkRecordID) { (artworkRecord, error) in
if (error != nil){
Utils.printDebug(error?.localizedDescription ?? "")
if let errorMsg = error?.localizedDescription, (errorMsg == "This request requires an authenticated account") || (errorMsg == "This operation has been rate limited") || (errorMsg == "Received a didCompleteWithError without receiving a response from the server"){
DispatchQueue.main.async {
Utils.showAlert(message: "You need to log into iCloud.", vc: vc)
AppLoader.hideLoader()
}
}else{
self.generateAndSyncIdWithCloud(logRecord: logRecord, publicDatabase: publicDatabase, lat: lat, long: long)
}
}else{
if let record = artworkRecord {
let vendorId = record["login_device_token"]
Utils.printDebug(vendorId as? String ?? "")
if let venderId = vendorId as? String{
Utils.storeUniqueID(uuid : venderId)
self.sigInApi(lat: lat, long: long)
}else {
AppLoader.hideLoader()
Utils.showAlert1(message: "venderId : \(record)")
}
}else{
self.generateAndSyncIdWithCloud(logRecord: logRecord, publicDatabase: publicDatabase, lat: lat, long: long)
}
}
}
}
//MARK: - Save record to user's icloud account -
func generateAndSyncIdWithCloud(logRecord : CKRecord,publicDatabase : CKDatabase, lat : String, long : String ) {
guard let venderId = UIDevice().identifierForVendor?.uuidString else {return}
logRecord["login_device_token"] = venderId
Utils.storeUniqueID(uuid : venderId)
Utils.printDebug(venderId )
publicDatabase.save(logRecord) { (record, error) in
if let error = error{
Utils.printDebug(error.localizedDescription)
AppLoader.hideLoader()
}else{
Utils.printDebug("record saved successfully")
self.sigInApi(lat: lat, long: long)
}
}
}
Спасибо