使用UIApplicationDelegateAdaptor接收userDidAcceptCloudKitShareWith回调失效
SwiftUI App结构下监听CloudKit共享接受回调方案
回调未触发的根因
iOS 13引入Scene场景机制后,userDidAcceptCloudKitShareWith回调默认触发在UIWindowSceneDelegate协议的对应方法中,而非UIApplicationDelegate的同名方法,所以最初通过UIApplicationDelegateAdaptor适配AppDelegate无法接收到回调。
现有实现的优化点
更新后的SceneDelegate代理方案是可行的,只需补充以下注意点即可正常运行:
- 替换代码中
CKContainer(identifier: "iCloud.com...")的占位符,填写项目实际配置的iCloud容器ID - 补全所有
UIWindowSceneDelegate协议方法的转发逻辑,将未自定义实现的方法全部转发给originalDelegate,避免破坏SwiftUI原有场景生命周期逻辑,示例补充如下:
func sceneDidBecomeActive(_ scene: UIScene) { originalDelegate?.sceneDidBecomeActive?(scene) } func sceneDidEnterBackground(_ scene: UIScene) { originalDelegate?.sceneDidEnterBackground?(scene) } // 其余未自定义的协议方法都按照上述格式补全转发即可
- 测试前确认Xcode项目的「Signing & Capabilities」中已经开启iCloud能力,勾选CloudKit选项,并且配置的容器ID和代码中保持一致。
内容的提问来源于stack exchange,提问作者GarySabo
相关产品推荐
相关产品推荐

