我尚未提及的一项内容涉及Xcode 11 beta 5(11M382q),涉及更新应用程序的info.plist文件。
就我的情况而言,我要使用现有的基于Swift和UIKit的应用程序并将其完全迁移为iOS 13和纯SwiftUI应用程序,因此向后兼容性对我而言不是问题。
对AppDelegate进行必要的更改后:
func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration",
sessionRole: connectingSceneSession.role)
}
并添加一个SceneDelegate类:
import UIKit
import SwiftUI
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: HomeList())
self.window = window
window.makeKeyAndVisible()
}
}
}
我遇到一个未调用我的SceneDelegate的问题。通过将以下内容添加到我的info.plist文件中,可以解决此问题:
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneClassName</key>
<string></string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneStoryboardFile</key>
<string>LaunchScreen</string>
</dict>
</array>
</dict>
</dict>
和截图看:
要保持同步的主要项目是:
- 委托类名称,以便Xcode知道在哪里可以找到您的
SceneDelegate
文件
- 配置名称,以便AppDelegate中的调用可以加载正确的
UISceneConfiguration
完成此操作后,我便可以加载新创建的HomeList视图(一个SwiftUI对象)
UIViewRepresentable
似乎相反,将aUIView
添加到SwiftUI
层次结构中