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


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


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.


Tuve el mismo problema, el prefijo $(PRODUCT_MODULE_NAME).resolvió mi problema.
— Sean Howell el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.