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



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


Ś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ć.


Miałem ten sam problem, prefiks $(PRODUCT_MODULE_NAME).rozwiązał mój problem.
Sean Howell,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.