Xcode 11-在iOS 13上退出UISceneDelegate / SwiftUI

Dav*_*idA 33 xcode swift ios13 swiftui

我当前正在使用Xcode 11 Beta5。在我的应用程序中,它可以在iOS 12及更低版本上正常运行。但是,在iOS 13上,默认情况下似乎使用的是UIScene。这导致我的应用无法执行任何操作。

当应用程序以全新安装方式启动时,用户必须接受条款和条件。同意后,他们进入加载屏幕,然后将其定向到主视图。在我发布的屏幕截图中,当前当前前景背后的视图是启动加载屏幕。

我们将很快考虑在整个应用程序中添加多视图场景支持,但是现在我们需要处理更高优先级的内容。

https://imgur.com/i0qLhAL

该应用程序目标的“常规”设置中的“支持多个窗口”已被禁用。另外,我在info.plist文件中将“启用多个Windows”设置为“否”。

到目前为止,什么都没有真正起作用。基本上我想选择退出/禁用多个窗口和UIScene / SwiftUI以恢复iOS 10-12中的原始行为。这可能在iOS 13中还是我们必须对其进行更新?

更新:

这是视图调试层次结构的屏幕截图。左侧是iOS 12,右侧是iOS13。没有在Info.plist中添加任何内容,也没有添加任何场景委托类或方法,为什么会有不同?几乎可以在Xcode 11的现有生产就绪代码中运行它。

https://imgur.com/C3aLsDo

rma*_*ddy 58

当您的应用程序在iOS 13及更高版本下运行时,虽然应该拥抱使用场景,但在仍支持iOS 12或更早版本的情况下,您可以完全退出。

首先,从Info.plist中完全删除“ Application Scene Manifest”条目。

如果有场景委托类,请将其删除。

如果您的应用程序委托中有任何与场景相关的方法,请删除这些方法。

您的应用现在应仅使用应用委托,在iOS 13下,其生命周期应与iOS 12相同。

这些都不是特定于Swift或SwiftUI的。

  • 你好呀!我按照三步说明进行操作,但在启动屏幕出现后出现黑屏。选择了主情节提要以及初始视图控制器。你有什么建议吗? (3认同)
  • 谢谢你的回答。当将“rootViewController”设置为自定义视图控制器时,我也遇到了黑屏,忘记了将“window”属性添加到“AppDelegate”后需要实际实例化“window”属性。不要忘记这样做!`window = UIWindow()`,如果您还没有这样做的话。 (2认同)
  • 如果您在 Xcode 12(测试版)上创建应用程序,您还需要将“@main”注释替换为“@UIApplicationMain”。 (2认同)

dfd*_*dfd 18

使用答案希望格式化的内容比注释更好。(随时发表评论,我会进行编辑。)

这也是我面临的事情,这里有一些场景在起作用:

  • 如果您想使用Xcode 11中的现有UIKit应用程序,只需打开它,它就可以正常工作。我所有的应用程序都没有 SceneDelegate文件,也没有对AppDelegate故事板的任何更改。
  • 如果要创建针对iOS 13UIKIT应用,只需在确保未选中“使用SwiftUI”复选框的情况下进行创建即可。

但是我想知道您是否面对第三种情况-我大约一个星期前所做的。创建一个针对iOS 13之前的版本新UIKit应用。(我实际上针对的是iOS 9!)

是的,您的模板会给您15个错误(自Beta 5起),以及一个SceneDelegate文件/类。幸运的是,Xcode将帮助您自动纠正除一个以外的所有错误。

最后一个是添加一行属于SceneDelegate该类的行,但不幸的是Apple将该行排除在AppDelegate类之外-十几@available(iOS 13.0, *)条子句意味着您已选择退出SceneDelegate运行iOS 12并猜测呢?它存在ApDelegate

将此添加到您的AppDelegate:

var window: UIWindow?
Run Code Online (Sandbox Code Playgroud)

届时,您应该有一个UIKit针对iOS 12及更早版本的正在运行的应用程序。


Nik*_*att 12

我使用 dfd 的答案让它工作,但因为我的应用程序在 Objective-C 中,我不得不做一个改变:

在 Objective-C 中,你想把

@property (strong, nonatomic) UIWindow *window;
Run Code Online (Sandbox Code Playgroud)

在 AppDelegate.h 中(不在 .m 中)