écran noir lorsque j'exécute mon application iOS

12

J'essaie de faire une nouvelle application iOS dans Xcode. J'ai fait un storyboard principal et j'ai ajouté une étiquette sur mon ViewController. Lorsque j'exécute mon application, la première seconde affiche l'étiquette, puis devient l'écran noir sans aucune erreur.

Je travaille sur Xcode 11 (Swift 5) et ce message apparaît sur la sortie:

[SceneConfiguration] La configuration Info.plist "Configuration par défaut" pour UIWindowSceneSessionRoleApplication contenait la clé UISceneDelegateClassName, mais n'a pas pu charger la classe avec le nom "gina.SceneDelegate"

Je ne sais pas où est mon erreur.

écran noir lors de l'exécution

jeena azeez
la source
s'il vous plaît poster un extrait de code
Mark Loyman
Je pense que vous supprimez votre classe SceneDelegate de votre projet
Alfi
Beaucoup de réponses ci-dessous semblent manquer le point de l'erreur et décrivent des correctifs qui ne sont pas pertinents pour l'erreur exacte en question. Dans mon cas, j'avais juste oublié d'ajouter le SceneDelegateà ma cible et de cocher la case fixée.
Wayne

Réponses:

32

iOS 13

Uniquement si la cible est supérieure ou égale à 13.

SceneDelegaten'est pas pris en charge avant iOS 13 . Si vous souhaitez utiliser SceneDelegateet souhaitez également prendre en charge iOS avant iOS 13, vous devez ajouter quelques modifications à votre projet.

  1. Ajoutez un attribut de disponibilité à toute la classe dans le fichier SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. Le fichier AppDelegate.swift a deux nouvelles SceneDelegateméthodes. Ajoutez-leur également un attribut de disponibilité.
@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. Enfin, ajoutez un UIWindowobjet dans 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 et versions antérieures

AppDelegatea besoin d'une UIWindowpropriété. iOS 13 utilise SceneDelegatedans de nouveaux projets. Spécifiez l' UIWindowobjet et supprimez le fichier SceneDelegate.swift .

Si vous avez supprimé le SceneDelegateprojet du, vous devez supprimer le dictionnaire Application Scene Manifest d' Info.plist .

Info.plist

Somoy Das Gupta
la source
Super, merci
Mohammad Razipour
1

Vous devez initialiser la fenêtre comme ceci:

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

et ajoutez-les dans 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>

C'est tout ce que vous devez faire.

Munzareen Atique
la source
J'ai eu le même problème, le préfixe a $(PRODUCT_MODULE_NAME).résolu mon problème.
Sean Howell