tela preta quando executo meu aplicativo iOS

12

Estou tentando fazer um novo aplicativo iOS no Xcode. Fiz um storyboard principal e adicionei um rótulo no meu ViewController. Quando executo meu aplicativo, primeiro ele mostra o rótulo e depois fica preto na tela sem erros.

Estou trabalhando no Xcode 11 (Swift 5) e esta mensagem aparece na saída:

[SceneConfiguration] Configuração do Info.plist "Configuração padrão" para UIWindowSceneSessionRoleApplication continha a chave UISceneDelegateClassName, mas não pôde carregar a classe com o nome "gina.SceneDelegate"

Não sei onde está o meu erro.

tela preta ao executar

jeena azeez
fonte
por favor poste um trecho de código
Mark Loyman 2/19/19
Eu acho que você retire sua classe SceneDelegate de seu projeto
Alfi
Muitas das respostas abaixo parecem não entender o ponto do erro e descrevem as correções que não são relevantes para o erro exato em questão. No meu caso, acabei de me esquecer de adicionar o item SceneDelegateao meu destino e marcar a caixa para corrigi-lo.
Wayne

Respostas:

32

iOS 13

Somente se o alvo for 13 ou superior.

SceneDelegatenão é suportado antes do iOS 13 . Se você deseja usar SceneDelegatee também deseja oferecer suporte ao iOS anterior ao iOS 13 , é necessário adicionar algumas alterações ao seu projeto.

  1. Adicione o atributo de disponibilidade a toda a classe no arquivo SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. O arquivo AppDelegate.swift possui dois novos SceneDelegatemétodos. Adicione o atributo de disponibilidade a eles também.
@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 fim, adicione um UIWindowobjeto no 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 e versões anteriores

AppDelegateprecisa de uma UIWindowpropriedade. O iOS 13 usa SceneDelegateem novos projetos. Especifique o UIWindowobjeto e remova o arquivo SceneDelegate.swift .

Se você removeu o SceneDelegateprojeto, remova o dicionário Application Scene Manifest do Info.plist .

Info.plist

Somoy Das Gupta
fonte
Ótimo, obrigado
Mohammad Razipour
1

Você precisa inicializar a janela assim:

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

e adicione-os em 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>

É tudo o que você precisa fazer.

Munzareen Atique
fonte
Eu tive o mesmo problema, o prefixo $(PRODUCT_MODULE_NAME).resolveu o meu problema.
Sean Howell