No momento, estou usando o Xcode 11 Beta 5. No meu aplicativo, ele funciona bem no iOS 12 e anteriores. No entanto, no iOS 13, parece que está usando o UIScene por padrão. Isso está fazendo com que meu aplicativo não faça nada.
Quando o aplicativo é iniciado em uma nova instalação, há termos e condições que o usuário deve aceitar. Depois de concordar, eles vão para uma tela de carregamento que os direciona para a visualização principal. Na captura de tela que postei, a visão atrás da atual em primeiro plano é a tela de carregamento inicial.
Em breve consideraremos a adição de suporte a várias visualizações de cena em todo o aplicativo, mas agora temos coisas de prioridade mais alta nas quais precisamos trabalhar.
"Suporte a várias janelas" já está desabilitado nas configurações gerais do destino do aplicativo. Além disso, tenho Ativar várias janelas definido como NÃO no arquivo info.plist.
Até agora, nada realmente funcionou. Basicamente, desejo desativar / desativar várias janelas e UIScene / SwiftUI para restaurar o comportamento original no iOS 10-12. Isso é possível no iOS 13 ou temos que atualizá-lo?
Atualizar:
Aqui está uma captura de tela da hierarquia de depuração da visualização. O lado esquerdo está o iOS 12, o lado direito está no iOS 13. Sem adicionar nada ao Info.plist nem nenhuma classe ou método de delegado de cena, por que é diferente? Praticamente apenas o executou em seu código pronto para produção existente no Xcode 11.
viewWill|DidAppear
não são chamados da mesma forma no iOS 13, ao descartar os controladores de visualização apresentados, por exemplo. Adicione muitas mensagens de depuração de ciclo de vida e pontos de interrupção e compare o fluxo entre o iOS 12 e 13 e veja onde é diferente.Respostas:
Embora você deva adotar o uso de cenas quando seu aplicativo for executado no iOS 13 e posterior, você pode desativar totalmente enquanto ainda oferece suporte ao iOS 12 ou anterior.
Remova completamente a entrada “Application Scene Manifest” do Info.plist.
Se houver uma classe de delegado de cena, remova-a.
Se houver qualquer método relacionado à cena em seu delegado de aplicativo, remova esses métodos.
Se ausente, adicione a propriedade
var window: UIWindow?
ao delegado do aplicativo.Seu aplicativo agora deve usar apenas o delegado de aplicativo e no iOS 13 ele deve ter o mesmo ciclo de vida do iOS 12.
Nota: nada disso é específico para Swift ou SwiftUI.
fonte
AppDelegate
que eu abordei. Isso volta automaticamente neste processo que você descreveu? (Eu meio que gosto mais da sua resposta, já que ignora completamente as cenas.)Usando a resposta para formatar as coisas melhor do que um comentário. (Sinta-se à vontade para comentar e vou editar.)
Isso é algo que eu também enfrentei, e há alguns cenários em jogo aqui:
UIKit
no Xcode 11, basta abri-lo e ele deve funcionar bem. Todos os meus aplicativos têm, sem nenhumSceneDelegate
arquivo ou qualquer alteraçãoAppDelegate
ou storyboards.UIKIT
aplicativo direcionado ao iOS 13 , basta criá-lo, certificando-se de deixar a caixa de seleção "Usar SwiftUI" desmarcada.Mas estou me perguntando se você está enfrentando o terceiro cenário - um que eu fiz há cerca de uma semana. Criação de um novo aplicativo UIKit visando algo anterior ao iOS 13 . (Na verdade, direcionei o iOS 9!)
Sim, seu modelo apresentará 15 erros (a partir do beta 5), junto com um
SceneDelegate
arquivo / classe. Felizmente, o Xcode o ajudará a corrigir automaticamente todos, exceto um.A última é adicionar uma linha que faz parte da
SceneDelegate
classe, mas infelizmente a Apple a deixou de fora daAppDelegate
classe - o que depois de mais de uma dúzia de@available(iOS 13.0, *)
cláusulas significa que você optou porSceneDelegate
não executar o iOS 12 e adivinhe? É não existe noApDelegate
!Adicione ao seu AppDelegate:
Nesse ponto, você deve ter um
UIKit
aplicativo em execução direcionado para iOS 12 e anteriores.fonte
SceneDelegate
e os testes disponíveis dizem (a) eles funcionam no iOS 13 e (b) eles não oferecem suporte a múltiplas janelas, apenas divida a visualização entre dois aplicativos. (Eu também não sou compatível com arrastar e soltar.) Há algo mais acontecendo do seu lado?SceneDelegate
, nãoSwiftUI
, não há capacidade de criar várias instâncias de meus aplicativos iOS 9+. O desempenho é o mesmo de sempre - todos eles sãoCoreImage
filtros personalizados atualizados em tempo real - e, bem, para mim? Se houver algum problema relacionado ao sistema operacional relacionado a cenas na hierarquia de visualização, será discutível se não houver suporte para cenas. (E para terminar, sim, ainda estou um pouco preocupado. Mas também é beta 5.) Espero que você tenha um bom backup que pode reproduzir o que estou vendo.Ok, então eu descobri. Devido às mudanças no iOS 13 do novo estilo de apresentação de cartão padrão da Apple, no meu storyboard segue da minha tela inicial para o meu controlador de navegação de fluxo personalizado padronizado para a nova apresentação (veja a captura de tela abaixo).
Como consertei isso, voltei ao estilo antigo, que era o padrão do antigo ciclo de vida. Veja a imagem abaixo.
Não sei por que isso aconteceu, já que este foi o único lugar em meu aplicativo que causou isso (um aplicativo muito grande, então tenho que passar algum tempo examinando todos os storyboards para ter certeza).
fonte
Eu fiz isso funcionar usando a resposta do dfd, mas como meu aplicativo está em Objective-C, tive que fazer uma alteração:
Em Objective-C, você deseja colocar
em AppDelegate.h (não em .m)
fonte
Xcode 11 - Swift 5.3
Desde o Xcode 11 e com a ajuda do Swift 5.3 e
@main
, você pode ter um aplicativo multiplataforma que não possui nenhumSceneDelegate
evento ouAppDelegate
. Haverá apenas um arquivo simples como:fonte