czarny ekran po uruchomieniu aplikacji na iOS

12

Próbuję zrobić nową aplikację na iOS w Xcode. Zrobiłem główną scenorys i dodałem etykietę do mojego ViewController. Kiedy uruchamiam moją aplikację, najpierw sekunda pokazuje etykietę, a następnie staje się czarny ekran bez żadnych błędów.

Pracuję nad Xcode 11 (Swift 5) i ten komunikat pojawia się na wyjściu:

[SceneConfiguration] Konfiguracja Info.plist „Konfiguracja domyślna” dla UIWindowSceneSessionRoleApplication zawierała klucz UISceneDelegateClassName, ale nie mogła załadować klasy o nazwie „gina.SceneDelegate”

Nie wiem, gdzie jest mój błąd.

czarny ekran podczas działania

jeena azeez
źródło
fragment kodu
Mark Loyman
Myślę, że usunąłeś klasę SceneDelegate ze swojego projektu
Alfi
Wiele poniższych odpowiedzi wydaje się pomijać punkt błędu i opisuje poprawki, które nie są istotne dla konkretnego błędu, o którym mowa. W moim przypadku po prostu zapomniałem dodać SceneDelegatecel do mojego celu i zaznaczenie pola to naprawiło.
Wayne

Odpowiedzi:

32

iOS 13

Tylko jeśli cel wynosi 13 lub więcej.

SceneDelegatenie jest obsługiwany przed iOS 13 . Jeśli chcesz używać, SceneDelegatea także chcesz obsługiwać iOS wcześniejszy niż iOS 13 , musisz dodać kilka zmian do swojego projektu.

  1. Dodaj atrybut dostępności do całej klasy w pliku SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. Plik AppDelegate.swift ma dwie nowe SceneDelegatemetody. Dodaj do nich również atrybut dostępności.
@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. Na koniec dodaj UIWindowobiekt w 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 i wcześniejsze

AppDelegatepotrzebuje UIWindownieruchomości. iOS 13 wykorzystuje SceneDelegatew nowych projektach. Określ UIWindowobiekt i usuń SceneDelegate.swift plik .

Jeśli usunąłeś SceneDelegatez projektu, musisz usunąć słownik manifestu sceny aplikacji ze strony Info.plist .

Info.plist

Somoy Das Gupta
źródło
Świetnie, dziękuję
Mohammad Razipour
1

Musisz zainicjować okno w następujący sposób:

let window = UIWindow(windowScene: scene as! UIWindowScene)

i dodaj je w 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>

To wszystko, co musisz zrobić.

Munzareen Atique
źródło
Miałem ten sam problem, prefiks $(PRODUCT_MODULE_NAME).rozwiązał mój problem.
Sean Howell,