保存、更新或对 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 配置文件的主要内容,如果未能解决你的问题,请参考以下文章

iCloud日历删除事件请求不适用于caldav

在 icloud 钥匙串中保存密码

Kafka Connect - 不适用于更新操作

Rails 5:更新操作不适用于 AJAXified 表单

用于保存音频文件的 iCloud - 几个问题

位置更新不适用于允许运行时权限