保存、更新或对 iCloud 的任何操作不适用于 ad-hoc 或 appstore 配置文件
Posted
技术标签:
【中文标题】保存、更新或对 iCloud 的任何操作不适用于 ad-hoc 或 appstore 配置文件【英文标题】:Saving, Updating or any operation to iCloud is not working with ad-hoc or appstore profiles 【发布时间】:2017-03-26 14:51:42 【问题描述】:在我的应用程序中,以发布模式(使用临时构建,应用商店配置文件)将 CKRecords 保存或更新到 iCloud 不起作用。
在功能中创建了默认容器,并在下面找到了截图。
let container = CKContainer.default
var privateDatabase: CKDatabase?
var currentRecord: CKRecord?
var photoURL: URL?
var recordZone: CKRecordZone?
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
privateDatabase = container().privateCloudDatabase
recordZone = CKRecordZone(zoneName: "HouseZone")
privateDatabase?.save(recordZone!,
completionHandler: (recordzone, error) in
if (error != nil)
self.notifyUser("Record Zone Error",
message: "Failed to create custom record zone.")
else
print("Saved record zone")
)
@IBAction func saveAction(_ sender: Any)
if let img = selImageView.image
photoURL = self.saveImageToFile(img)
let asset = CKAsset(fileURL: photoURL!)
let myRecord = CKRecord(recordType: "Houses",
zoneID: (recordZone?.zoneID)!)
myRecord.setObject(addressTextField.text as CKRecordValue?,
forKey: "address")
myRecord.setObject(descriptionTextView.text as CKRecordValue?,
forKey: "comment")
myRecord.setObject(asset, forKey: "photo")
let modifyRecordsOperation = CKModifyRecordsOperation(
recordsToSave: [myRecord],
recordIDsToDelete: nil)
if #available(ios 10.0, *)
modifyRecordsOperation.timeoutIntervalForRequest = 10
else
// Fallback on earlier versions
// modifyRecordsOperation.timeoutIntervalForRequest = 10
modifyRecordsOperation.modifyRecordsCompletionBlock =
records, recordIDs, error in
if let err = error
self.notifyUser("Save Error", message:
err.localizedDescription)
else
DispatchQueue.main.async
self.notifyUser("Success",
message: "Record saved successfully")
self.currentRecord = myRecord
privateDatabase?.add(modifyRecordsOperation)
以上代码在调试模式下工作。当我使用 Ad-hoc 配置文件生成构建时不起作用。
提交应用到appstore,试过了,还是不行。 请建议,
【问题讨论】:
您找到解决方案了吗?我也面临同样的问题 【参考方案1】:好的,所以我现在重复了两次错误 - 对我来说,这是因为我向 CKRecord 添加了新字段,但没有将 Development CloudKit 数据库部署到生产环境。
原因是当 CKRecord 有新字段时,开发数据库会自动更新,但在您进行显式部署之前不会进入生产环境。因此,在 Prod 环境中,由于未知字段,对数据库的写入将被拒绝。
要修复它,请转到 CloudKit 仪表板,确保它在开发环境中,然后单击部署,您应该会看到要部署的新字段。部署后它应该可以立即工作。
【讨论】:
以上是关于保存、更新或对 iCloud 的任何操作不适用于 ad-hoc 或 appstore 配置文件的主要内容,如果未能解决你的问题,请参考以下文章