черный экран при запуске приложения для iOS

12

Я пытаюсь сделать новое приложение для iOS в Xcode. Я сделал основную раскадровку и добавил метку на свой ViewController. Когда я запускаю свое приложение, сначала оно показывает метку, а затем становится черным на экране без каких-либо ошибок.

Я работаю над Xcode 11 (Swift 5), и это сообщение появляется на выходе:

[SceneConfiguration] Конфигурация Info.plist «Конфигурация по умолчанию» для UIWindowSceneSessionRoleApplication содержала ключ UISceneDelegateClassName, но не удалось загрузить класс с именем «gina.SceneDelegate»

Я не знаю, где моя ошибка.

черный экран при запуске

Джина Азиз
источник
пожалуйста отправьте фрагмент кода
Марк Лойман
Я думаю , что вы удалите свой SceneDelegate класс из вашего проекта
Альфи
Многие из приведенных ниже ответов, как представляется, упускают суть ошибки и описывают исправления, не относящиеся к конкретной рассматриваемой ошибке. В моем случае я просто забыл добавить SceneDelegateк своей цели, и флажок исправил это.
Уэйн

Ответы:

32

iOS 13

Только если цель 13 или больше.

SceneDelegateне поддерживается до iOS 13 . Если вы хотите использовать, SceneDelegateа также хотите поддерживать iOS до iOS 13, то вам необходимо добавить некоторые изменения в ваш проект.

  1. Добавьте атрибут доступности ко всему классу в файле SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. В файле AppDelegate.swift появилось два новых SceneDelegateметода. Добавьте к ним атрибут доступности.
@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. Наконец, добавьте UIWindowобъект в AppDelegate.swift .
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

Сомой Дас Гупта
источник
Отлично, спасибо
Мухаммед Разипур
1

Вам нужно инициализировать окно следующим образом:

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>

Это все, что вам нужно сделать.

Munzareen Atique
источник
У меня была та же проблема, префикс $(PRODUCT_MODULE_NAME).решил мою проблему.
Шон Хауэлл