swift – CKContainer.discoverAllIdentities总是失败

我的CloudKit应用程序中的CKContainer.discoverAllIdentities请求总是失败.它在几天的过程中不断失败.

失败的代码的简化版本(导致相同的错误)是:

private func getContacts(completion: (([CKUserIdentity]?) -> Void)?) {
    container.status(forApplicationPermission: .userdiscoverability) { [weak self] status,error in
        if let error = error {
            print(error)
        }

        switch status {
        case .granted:
            self?.discover(completion: completion)
        default:
            print("status not granted")
        }
    }
}

private func discover(completion: (([CKUserIdentity]?) -> Void)?) {
    let op = CKdiscoverAllUserIdentitiesOperation()
    op.qualityOfService = .userInitiated
    op.discoverAllUserIdentitiesCompletionBlock = { error in
        if let error = error {
            print(error)
        }
    }
    op.userIdentitydiscoveredBlock = { identity in
        print(identity)
    }
    op.start()
}

它会导致错误传递给op.discoverAllUserIdentitiesCompletionBlock.日志中的错误描述是:

< ckerror 0x1c4a51a60:“服务器拒绝请求”(15/2000); server message =“内部服务器错误”; uuid = F67453B9-712D-4E5E-9335-929123E3C978; container ID =“iCloud.com.huntermaximillionmonk.topdraw”>

以前,此操作可以使用,但仅适用于某些iCloud用户.现在不适合我的两个测试用户.

问题:

这是iOS 11.0中的一个问题

根据我的测试:

这在设备上的Xcode 9.2 / iOS 11.2.1中工作正常(不是模拟器)

重置模拟器后第一次工作,随后不起作用,但是在设备上它重复工作.

码:

let queue = OperationQueue()

func requestPermissions(for permissions: CKApplicationPermissions,completionHandler: @escaping (CKApplicationPermissionStatus,Error?) -> ()) {

    CKContainer.default().requestApplicationPermission(permissions) { status,error in

        if let error = error {

            print("Error for requesting \(permissions) - \(error)")
        }

        let statusMessage : String

        switch status {

        case .granted:
            statusMessage = "Granted"
        case .denied:
            statusMessage = "Denied"
        case .CouldNotComplete:
            statusMessage = "Could not complete"
        case .initialState:
            statusMessage = "Initial state"
        }

        print("Permission - \(statusMessage)")

        completionHandler(status,error)
    }
}


private func discoverAllUsers() {

    let operation = CKdiscoverAllUserIdentitiesOperation()

    operation.userIdentitydiscoveredBlock = { userIdentity in

        print("userIdentity = \(userIdentity)")
    }

    operation.discoverAllUserIdentitiesCompletionBlock = { error in

        if let error = error {

            print("discover all users Error: \(error) ")
        }
        else {
            print("discover all users completed successfully")
        }
    }

    queue.addOperation(operation)
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...