CloudKit – アカウントの状態を確認する

Apple, CloudKit, Swift, プログラミング

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.privateCloudDatabaseCKContainer.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")
        }
    }
}

ドキュメント

Apple Developer Documentation