Можно ли перенести старый проект Xcode для использования SwiftUI? - PullRequest
4 голосов
/ 09 июня 2019

У меня есть приложение, созданное в Xcode 10 с использованием Main.sotyboard, и я хочу перенести его в новый фреймворк Apple: SwiftUI.
Это уже возможно?

Я уже пытался добавить ключ UIApplicationSceneManifest в Info.plist, я изменил AppDelegate.swift для использования сцен, я создал SceneDelegate.swift и даже тогда яне мог

Ответы [ 2 ]

4 голосов
/ 09 июня 2019

Я предполагаю, что вы используете Xcode 11 Beta и macOS Mojave или Catalina.

Наряду с изменениями в plist необходимо добавить в приложение функции жизненного цикла UISceneSessionделегат.

func application(_ application: UIApplication,
                 configurationForConnecting connectingSceneSession: UISceneSession,
                 options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    // The name must match the one in the Info.plist
    return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {

}

Кроме того, необходимо убедиться, что window правильно создан в SceneDelegate.

func scene(_ scene: UIScene, 
           willConnectTo session: UISceneSession, 
           options connectionOptions: UIScene.ConnectionOptions) {

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = UIHostingController(rootView: ContentView())
    self.window = window
    window.makeKeyAndVisible()
}

, где ContentView является основным SwiftUIпредставление, которое вы хотите отобразить.

PS Убедитесь, что plist указывает $(PRODUCT_MODULE_NAME).SceneDelegate в качестве имени класса делегата, а делегат сцены называется SceneDelegate

Пример:

enter image description here

Если вы используете Catalina, вы можете включить Previews в настройках сборки для вашей цели.

BuildПараметры -> Включить предварительный просмотр


Приложение I :

Убедитесь, что вы удалили ключ Раскадровка из Info.Plistи что you're targeting iOS 13.

enter image description here

enter image description here


Добавление II:

Очистить Derived Data, как предлагают многие разработчики в комментариях.

0 голосов
/ 19 июня 2019

Мое решение оказалось другим. В моем случае у меня было все на месте, но когда код попытался загрузить UISceneConfiguration, он не смог загрузить конфигурацию в Info.plist и дал мне конфигурацию вторичного окна вместо этого без установленного делегата сцены. Если бы я спросил правильную конфигурацию с консоли отладки, она загрузилась бы, как ожидалось. Я был смущен.

Я дважды проверил все и попробовал все предложения здесь, но ни один не работал. В конце концов я сделал «Аппаратное обеспечение» - «Стереть все содержимое и настройки ...» на симуляторе, и это решило проблему.

Я предполагаю, что, поскольку я запускал на симуляторе версию приложения до SwiftUI, из-за чего-то версия SwiftUI работала иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...