在Xcode 11 Beta5和Swiftui上深入链接



我想通过SwiftUI和Deep-Linking播放,并在两个应用程序之间传递数据。但这似乎不起作用。

我构建了两个小应用程序。第一个带有文本字段和按钮的应用程序,第二个带有标签和按钮的应用程序。当我按第一个应用中的按钮时,它通过给定的URL方案调用第二个应用程序,反之亦然。

第一个应用看起来像...

struct ContentView: View {
    @State var message: String = ""
    var body: some View {
        Group {
            TextField("Enter message...", text: $message).textFieldStyle(.roundedBorder).padding()
            Button(action: {
                // go to second app
                let application = UIApplication.shared
                let secondAppPath = "second://(self.message)"
                let appUrl = URL(string: secondAppPath)!
                application.open(appUrl, options: [ : ], completionHandler: nil)
                }) { Text("Go to second app")}
                .padding()
                .border(Color.black, width: 2)
        }
    }
}

和info.plist ...

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>second</string>
</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>first</string>
        </array>
    </dict>
</array>

第二个应用程序info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>first</string>
</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>second</string>
        </array>
    </dict>
</array>

,当我按下第一个应用程序中的按钮时,第二个应用中的此功能应像:" second://sosings fromtheTextfield"

打印出URL。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    print(url)
    return true
}

但不这样做。第二个应用程序启动,但没有打印任何东西。现在我想知道,我做错了什么吗?无论如何,它在Xcode beta和swiftui上是否有效?

尝试在SceneDelegate中使用以下方法:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    print("(URLContexts.first!.url)")
}

相关内容

  • 没有找到相关文章

最新更新