schwarzer Bildschirm, wenn ich meine iOS-Anwendung starte

12

Ich versuche eine neue iOS-App in Xcode zu erstellen. Ich habe ein Haupt-Storyboard erstellt und meinem ViewController ein Label hinzugefügt. Wenn ich meine Anwendung ausführe, wird in der ersten Sekunde die Beschriftung angezeigt und der Bildschirm wird dann fehlerfrei schwarz.

Ich arbeite an Xcode 11 (Swift 5) und diese Meldung erscheint bei der Ausgabe:

[SceneConfiguration] Info.plist-Konfiguration "Standardkonfiguration" für UIWindowSceneSessionRoleApplication enthielt den Schlüssel UISceneDelegateClassName, konnte jedoch keine Klasse mit dem Namen "gina.SceneDelegate" laden.

Ich weiß nicht, wo mein Fehler ist.

schwarzer Bildschirm beim Laufen

jeena azeez
quelle
Bitte Postleitzahl Snippet
Mark Loyman
Ich denke, Sie entfernen Ihre SceneDelegate-Klasse aus Ihrem Projekt
Alfi
Viele der folgenden Antworten scheinen den Punkt des Fehlers zu verfehlen und beschreiben Korrekturen, die für den genauen fraglichen Fehler nicht relevant sind. In meinem Fall hatte ich nur vergessen, das SceneDelegatezu meinem Ziel hinzuzufügen und das Kontrollkästchen zu aktivieren.
Wayne

Antworten:

32

iOS 13

Nur wenn das Ziel 13 oder höher ist.

SceneDelegatewird vor iOS 13 nicht unterstützt . Wenn Sie iOS vor iOS 13 verwenden SceneDelegateund auch unterstützen möchten, müssen Sie Ihrem Projekt einige Änderungen hinzufügen.

  1. Fügen Sie der gesamten Klasse in der Datei SceneDelegate.swift ein Verfügbarkeitsattribut hinzu .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. Die Datei AppDelegate.swift verfügt über zwei neue SceneDelegateMethoden. Fügen Sie ihnen auch ein Verfügbarkeitsattribut hinzu.
@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. Zuletzt fügen Sie ein UIWindowObjekt in AppDelegate.swift hinzu .
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 und früher

AppDelegatebraucht eine UIWindowImmobilie. iOS 13 wird SceneDelegatein neuen Projekten verwendet. Geben Sie das UIWindowObjekt an und entfernen Sie die Datei SceneDelegate.swift .

Wenn Sie die entfernt haben SceneDelegate aus dem Projekt entfernt haben, müssen Sie das Application Scene Manifest- Wörterbuch aus Info.plist entfernen .

Info.plist

Somoy Das Gupta
quelle
Großartig, danke
Mohammad Razipour
1

Sie müssen das Fenster folgendermaßen initialisieren:

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

und fügen Sie diese in info.plist hinzu:

<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>

Das ist alles was Sie tun müssen.

Munzareen Atique
quelle
Ich hatte das gleiche Problem, das Präfix hat $(PRODUCT_MODULE_NAME).mein Problem behoben.
Sean Howell