Ein Element, das ich noch nicht erwähnt habe und das Xcode 11 Beta 5 (11M382q) beinhaltet, beinhaltet das Aktualisieren der info.plist-Datei Ihrer App.
In meinem Szenario nehme ich eine vorhandene Swift & UIKit-basierte Anwendung und migriere sie vollständig zu einer iOS 13 & reinen SwiftUI-App, sodass die Abwärtskompatibilität für mich kein Problem darstellt.
Nachdem Sie die erforderlichen Änderungen an AppDelegate vorgenommen haben:
func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration",
sessionRole: connectingSceneSession.role)
}
Und Hinzufügen einer SceneDelegate-Klasse:
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()
}
}
}
Ich hatte ein Problem, bei dem mein SceneDelegate nicht aufgerufen wurde. Dies wurde behoben, indem Folgendes in meine info.plist-Datei eingefügt wurde:
<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>
Und ein Screenshot zu sehen:
Die wichtigsten Elemente, die synchron gehalten werden müssen, sind:
- Delegieren Sie den Klassennamen, damit Xcode weiß, wo sich Ihre
SceneDelegate
Datei befindet
- Konfigurationsname, damit der Aufruf in AppDelegate den richtigen laden kann
UISceneConfiguration
Danach konnte ich meine neu erstellte HomeList-Ansicht (ein SwiftUI-Objekt) laden.
UIViewRepresentable
scheint eher das Gegenteil zu tun, was es ermöglicht, aUIView
zu einerSwiftUI
Hierarchie hinzuzufügen