CloudKit – アカウントの状態を確認する
CloudKit を使うにあたって、まずはアカウントの状態を確認します。
特に “Private Database や Shared Database にアクセスする前に確認をしなさい” と Apple Developer Documentation にも書かれています。
環境
- Apple Swift version 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3)
- Xcode Version 10.2 (10E125)
アカウントの状態を確認する
デバイスの CloudKit のアカウントの状態を確認するには CKContainer
のインスタンスメソッド、accountStatus(completionHandler:)
を使用します。
特に Private Database や Shared Database を使用するときは、デバイスに利用可能な iCloud アカウントが無ければ、CKContainer.privateCloudDatabase
、CKContainer.sharedCloudDatabase
を正しく get できますが、それを利用しようとするときにエラーが返されます。
サンプルコード
let container = CKContainer.default()
container.accountStatus { (status, error) in
if let error = error {
// エラーハンドリング
} else {
switch status {
case .available:
print("CKAccountStatus.available")
// デバイスで iCloud アカウントが利用可能
case .couldNotDetermine:
print("CKAccountStatus.couldNotDetermine")
// アカウントの状態を確認しようとしたときにエラーが発生
case .noAccount:
print("CKAccountStatus.noAccount")
// iCloud アカウントが無い(= デバイスが iCloud にサインインしていない)
case .restricted:
print("CKAccountStatus.restricted")
// ペアレンタルコントロールか MDM によって制限されていて iCloud アカウントを利用できない
@unknown default:
print("unknown error")
}
}
}