macOS appのCloudKitでカスタムコンテナを使う時に気をつけること
環境:Xcode 8.3.3 / Swift 3.1
追記
デフォルトコンテナとカスタムコンテナが一致している場合はCKContainer.default()
が使えて、
一致していない場合はコンテナ名を指定する必要がある、、、ということでした。
問題
macOS appでCloudKitを使う際、Capabilitiesでカスタムコンテナを1つだけ指定してから
CKContainer.default()
でレコードを保存しようとすると下記エラーが出ました。
"Server Rejected Request" (15/2001); "Request failed with http status code 500"
コードはこんな感じです。
let database = CKContainer.default().privateCloudDatabase let record = CKRecord(recordType: "Memo") record.setValue("Hello!", forKey: "message") database.save(record) { _, _ in }
解決方法
どうやらmacOS appでカスタムコンテナを使う場合、
CKContainer
のインスタンスを作る時にコンテナ名を指定しないといけないようです。
let database = CKContainer(CUSTOM_CONTAINER_NAME).privateCloudDatabase
なお、iOSでカスタムコンテナを使う場合はCKContainer.default()
が問題なく使用できます。
勘違いでした。CKContainer.default()
だとCapabilitiesのカスタムコンテナの指定は無視され、
Use default containerを指定した場合と同じコンテナが使われます。
macOS appだとデフォルトコンテナが自動作成されないようで、そのためにエラーが発生していました。
リファレンス等で確認できませんでしたが、ハマったのでメモとして残しておきます。