pantalla negra cuando ejecuto mi aplicación iOS

12

Estoy tratando de hacer una nueva aplicación de iOS en Xcode. Hice un guión gráfico principal y agregué una etiqueta en mi ViewController. Cuando ejecuto mi aplicación, el primer segundo muestra la etiqueta y luego se vuelve negra sin ningún error.

Estoy trabajando en Xcode 11 (Swift 5) y este mensaje aparece en la salida:

[SceneConfiguration] Info.plist configuration "Configuración predeterminada" para UIWindowSceneSessionRoleApplication contenía la clave UISceneDelegateClassName, pero no se pudo cargar la clase con el nombre "gina.SceneDelegate"

No sé dónde está mi error.

pantalla negra cuando se ejecuta

jeena azeez
fuente
por favor, publique el fragmento de código
Mark Loyman
Creo que eliminas tu clase SceneDelegate de tu proyecto
Alfi
Muchas de las respuestas a continuación parecen perder el punto del error y describen soluciones que no son relevantes para el error exacto en cuestión. En mi caso, me había olvidado de agregar el SceneDelegatea mi objetivo y marcar la casilla lo arregló.
Wayne

Respuestas:

32

iOS 13

Solo si el objetivo es 13 o mayor.

SceneDelegateno es compatible antes de iOS 13 . Si desea usar SceneDelegatey también es compatible con iOS antes de iOS 13, entonces debe agregar algunos cambios a su proyecto.

  1. Agregue el atributo de disponibilidad a toda la clase en el archivo SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. El archivo AppDelegate.swift tiene dos nuevos SceneDelegatemétodos. Agregue el atributo de disponibilidad a ellos también.
@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. Por último, agregue un UIWindowobjeto en 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 y versiones anteriores

AppDelegateNecesita una UIWindowpropiedad. iOS 13 utiliza SceneDelegateen nuevos proyectos. Especifique el UIWindowobjeto y elimine el archivo SceneDelegate.swift .

Si ha eliminado el SceneDelegateproyecto, debe eliminar el diccionario del Manifiesto de la escena de la aplicación de Info.plist .

Info.plist

Somoy Das Gupta
fuente
Genial, gracias
Mohammad Razipour
1

Necesita inicializar la ventana de esta manera:

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

y agregue estos en 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>

Eso es todo lo que necesitas hacer.

Munzareen Atique
fuente
Tuve el mismo problema, el prefijo $(PRODUCT_MODULE_NAME).resolvió mi problema.
Sean Howell el