2017-03-26 7 views
1

私のアプリケーションでは、CKRコードをiCloudでリリースモード(アドホック、アプリストアプロファイルでビルド)に保存または更新できません。iCloudへの保存、更新、または操作は、アドホックまたはアプリストアのプロファイルでは機能しません。

デフォルトのコンテナを機能に作成し、下記のスクリーンショットを見つけます。上記のコード

enter image description here

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に送信して試しましたが、まだ動作していません。 示唆してください、OK

+0

ソリューションを見つけましたか?私は同じ問題に直面している – hyouuu

答えて

0

はので、私は二回今間違いを繰り返してきた - 私はCKRecordに新しいフィールドを追加したので、私にとって、それはでしたが、生産に開発CloudKitデータベースを展開していませんでした。

なぜなら、開発データベースは、CKRecordの新しいフィールドがあるときに自動的に更新されます。なぜなら、明示的なデプロイメントを行うまで、開発データベースは本番に移行しないからです。その結果、Prod環境では、未知のフィールドのためデータベースへの書き込みが拒否されます。

修正するには、CloudKit Dashboardを開き、開発環境にあることを確認してから[展開]をクリックします。展開する新しいフィールドが表示されます。展開後、すぐに動作するはずです。

関連する問題