如何在新的 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 应用程序生命周期中更改特定视图的状态栏颜色?
如何将 CoreSpotlight 与 Swiftui 应用生命周期进行深度链接?