运行iOS应用时出现黑屏

22

我正在尝试在Xcode中创建一个新的iOS应用程序。我制作了一个主故事板,并在我的ViewController上添加了一个标签。当我运行应用程序时,第一秒它会显示标签,然后屏幕变黑,没有任何错误。

我正在使用Xcode 11(Swift 5),并且此消息出现在输出中:

[SceneConfiguration] Info.plist配置“默认配置”对于UIWindowSceneSessionRoleApplication包含UISceneDelegateClassName键,但无法加载名称为“gina.SceneDelegate”的类

我不知道我的错误在哪里。

black screen when running


请发布代码片段 - Mark Loyman
我认为你应该从项目中删除SceneDelegate类。 - Ahmadreza
下面很多答案似乎都没有抓住错误的关键点,而是提供了与问题无关的解决方法。在我的情况下,我只是忘记将 SceneDelegate 添加到我的目标中,勾选该框即可解决问题。 - Wayne
2个回答

55

iOS 13及以上版本

仅适用于目标版本为13或更高版本。

SceneDelegateiOS 13之前不受支持。如果您想要使用SceneDelegate并且还要支持iOS 13之前的版本,则必须对您的项目进行一些更改。

  1. SceneDelegate.swift文件中的整个类上添加可用性属性。
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. AppDelegate.swift文件有两个新的SceneDelegate方法。同样为它们添加可用性属性。
(Note: This is the original text in Chinese. I did not change the meaning or wording in any way.)
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
  ...
}

@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
  ...
}
  1. 最后,在AppDelegate.swift中添加UIWindow对象。
class AppDelegate: UIResponder, UIApplicationDelegate {

    //Add this line
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    ...
}

iOS 12及更早版本

AppDelegate需要一个UIWindow属性。iOS 13在新项目中使用SceneDelegate。请指定UIWindow对象并移除SceneDelegate.swift文件。

如果您已从项目中删除了SceneDelegate,则必须从Info.plist中删除应用程序场景清单字典。

Info.plist


太好了,谢谢。 - Mohammad Razipour

5
您需要像这样初始化窗口:
let window = UIWindow(windowScene: scene as! UIWindowScene)

并将这些添加到 info.plist 文件中:

<key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <true/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UILaunchStoryboardName</key>
                    <string>LaunchScreen</string>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                </dict>
            </array>
        </dict>
    </dict>

这就是您需要做的全部。


2
我曾经遇到过同样的问题,加上 $(PRODUCT_MODULE_NAME). 前缀解决了我的问题。 - Sean Howell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接