如何在新的 SwiftUI 应用生命周期中接受 CloudKit 共享?

Posted

技术标签:

【中文标题】如何在新的 SwiftUI 应用生命周期中接受 CloudKit 共享?【英文标题】:How to accept CloudKit shares with the new SwiftUI app lifecycle? 【发布时间】:2020-08-07 06:23:17 【问题描述】:

ios 13 世界中,我有这样的代码:

class SceneDelegate: UIResponder, UIWindowSceneDelegate 
        func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) 
                // do stuff with the metadata, eventually call CKAcceptSharesOperation
        

我正在将我的应用程序迁移到新的 SwiftUI 应用程序生命周期,但不知道将这个方法放在哪里。它曾经存在于 iOS13 之前的 AppDelegate 中,我尝试回到那个,但 AppDelegate 版本永远不会被调用。

似乎没有类似于 UIApplicationDelegateAdaptor 的 SceneDelegateAdaptor 可用,它可以为旧代码提供桥梁。

所以,我迷路了。如何在 SwiftUI 应用程序生命周期中接受 CloudKit 共享? ????

【问题讨论】:

没有人。向 Apple 提交反馈,也许他们会在发布之前将其包含在内……而且,可能现在还不是迁移到 SwiftUI 生命周期的时候。 【参考方案1】:

您仍然可以将 AppDelegate 与 SwiftUI 的新生命周期一起使用,直到 Apple 发布 API 以在 SwiftUI 应用生命周期中本地处理此问题。

class AppDelegate: NSObject, UIApplicationDelegate 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool 
        return true
    


@main
struct MyApp: App 

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene 
        WindowGroup 
            ContentView()
        
    

Read this fore more

【讨论】:

AppDelegate 的一些方法被调用,但不是全部。在 iOS 13 中,一些回调从 AppDelegate 移到了 SceneDelegate。在带有 SwiftUI 的 iOS 14 中,似乎没有调用 userDidAcceptCloudKitShareWith 的 AppDelegate 和 SceneDelegate 版本。 @Jaanus 周围有锻炼吗?我有同样的问题***.com/questions/67541441/… 我知道的唯一解决方法是继续使用 UIKit 应用程序生命周期,直到这在 iOS SDK 中得到修复。 (它在带有 SwiftUI 生命周期的 AppKit 中运行良好,但在 UIKit 中运行良好。)

以上是关于如何在新的 SwiftUI 应用生命周期中接受 CloudKit 共享?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 应用生命周期中更改状态栏样式?

SwiftUI 生命周期不支持 CoreData

如何在 SwiftUI 应用程序生命周期中更改特定视图的状态栏颜色?

如何将 CoreSpotlight 与 Swiftui 应用生命周期进行深度链接?

SwiftUI |如何覆盖 viewWillAppear 等生命周期方法

如何在 SwiftUI 生命周期中删除 macOS 中的最大化、最小化和关闭按钮?