J'utilise actuellement Xcode 11 Beta 5. Dans mon application, il fonctionne bien sur iOS 12 et moins. Cependant, sur iOS 13, il semble qu'il utilise UIScene par défaut. Cela fait que mon application ne fait rien.
Lorsque l'application se lance lors d'une nouvelle installation, l'utilisateur doit accepter des conditions générales. Après avoir accepté, ils accèdent à un écran de chargement qui les dirige ensuite vers la vue principale. Dans la capture d'écran que j'ai postée, la vue derrière l'actuelle au premier plan est l'écran de chargement de démarrage.
Nous examinerons bientôt l'ajout de la prise en charge de plusieurs vues dans toute l'application, mais pour le moment, nous avons des éléments de priorité plus élevée sur lesquels nous devons travailler.
"Prise en charge de plusieurs fenêtres" est déjà désactivé dans les paramètres généraux de la cible de l'application. Aussi, j'ai défini Activer plusieurs Windows sur NON dans le fichier info.plist.
Jusqu'à présent, rien n'a vraiment fonctionné. Fondamentalement, je souhaite désactiver / désactiver plusieurs fenêtres et UIScene / SwiftUI pour restaurer le comportement d'origine dans iOS 10-12. Est-ce possible dans iOS 13 ou devons-nous le mettre à jour?
Mettre à jour:
Voici une capture d'écran de la hiérarchie de débogage de la vue. Le côté gauche est iOS 12, le côté droit est sur iOS 13. Sans rien ajouter à Info.plist ni à aucune classe ou méthode de délégué de scène, pourquoi est-ce différent? Il l'a pratiquement exécuté dans son code existant prêt pour la production sur Xcode 11.
viewWill|DidAppear
ne sont pas appelées de la même manière dans iOS 13 lors du rejet des contrôleurs de vue présentés, par exemple. Ajoutez beaucoup de messages de débogage du cycle de vie et de points d'arrêt et comparez le flux entre iOS 12 et 13 et voyez où il est différent.Réponses:
Bien que vous devriez adopter l'utilisation de scènes lorsque votre application est exécutée sous iOS 13 et versions ultérieures, vous pouvez vous désabonner totalement tout en prenant en charge iOS 12 ou version antérieure.
Supprimez complètement l'entrée «Application Scene Manifest» d'Info.plist.
S'il existe une classe de délégué de scène, supprimez-la.
S'il existe des méthodes liées à la scène dans votre délégué d'application, supprimez ces méthodes.
S'il manque, ajoutez la propriété
var window: UIWindow?
à votre délégué d'application.Votre application doit désormais utiliser uniquement le délégué d'application et sous iOS 13, elle doit avoir le même cycle de vie que iOS 12.
Remarque: rien de tout cela n'est spécifique à Swift ou SwiftUI.
la source
AppDelegate
laquelle j'ai abordé. Cela revient-il automatiquement dans le processus que vous avez décrit? (J'aime mieux votre réponse, car elle ne tient absolument pas compte des scènes.)J'espère utiliser la réponse pour formater les choses mieux qu'un commentaire. (N'hésitez pas à commenter et je modifierai.)
C'est quelque chose que j'ai également affronté, et il y a quelques scénarios en jeu ici:
UIKit
dans Xcode 11, ouvrez-la simplement et cela devrait fonctionner correctement. Toutes mes applications ont, sansSceneDelegate
fichier ni aucun changement deAppDelegate
ou de storyboards.UIKIT
application ciblant iOS 13 , créez-la simplement en vous assurant de ne pas cocher la case "Utiliser SwiftUI".Mais je me demande si vous êtes confronté au troisième scénario - celui que j'ai fait il y a environ une semaine. Création d'une nouvelle application `UIKit ciblant quelque chose d'avant iOS 13 . (J'ai en fait ciblé iOS 9!)
Oui, votre modèle vous donnera 15 erreurs (à partir de la version bêta 5), ainsi qu'un
SceneDelegate
fichier / une classe. Heureusement, Xcode vous aidera à corriger automatiquement tout sauf un.La dernière consiste à ajouter une ligne qui fait partie de la
SceneDelegate
classe, mais malheureusement Apple l'a laissée en dehors de laAppDelegate
classe - ce qui, après plus d'une douzaine de@available(iOS 13.0, *)
clauses, signifie que vous avez choisi de neSceneDelegate
pas exécuter iOS 12 et devinez quoi? Ce n'est pas là dedansApDelegate
!Ajoutez ceci à votre AppDelegate:
À ce stade, vous devriez avoir une
UIKit
application en cours d'exécution ciblée pour iOS 12 et les versions antérieures.la source
SceneDelegate
et les tests indiquent (a) qu'ils fonctionnent sous iOS 13 et (b) qu'ils ne prennent pas du tout en charge plusieurs fenêtres, il suffit de diviser la vue entre deux applications. (Je ne supporte pas non plus le glisser-déposer.) Y a-t-il autre chose de votre côté?SceneDelegate
, nonSwiftUI
, pas de possibilité de créer plusieurs instances de mes applications iOS 9+. Les performances sont les mêmes que d'CoreImage
habitude - tous sont des filtres personnalisés mis à jour en temps réel - et, eh bien, pour moi? S'il y a des problèmes liés au système d'exploitation liés aux scènes dans la hiérarchie des vues, il est inutile si cela ne prend pas en charge les scènes. (Et pour finir, oui, je suis toujours un peu inquiet. Mais c'est aussi la beta 5.) J'espère que vous avez une bonne sauvegarde qui peut reproduire ce que je vois.J'ai obtenu que cela fonctionne en utilisant la réponse de dfd, mais comme mon application est en Objective-C, j'ai dû faire un changement:
En Objective-C, vous voulez mettre
dans AppDelegate.h (pas dans le .m)
la source
D'accord, alors je l'ai compris. En raison des changements dans iOS 13 du nouveau style de présentation de carte par défaut d'Apple, dans mon storyboard, le passage de mon écran de démarrage à mon contrôleur de navigation de flux personnalisé par défaut est la nouvelle présentation (voir capture d'écran ci-dessous).
La façon dont j'ai résolu cela était de revenir à l'ancien style qui par défaut à l'ancien cycle de vie. Voir la capture d'écran ci-dessous.
Je ne sais pas pourquoi, car c'était le seul endroit de mon application qui a causé cela (une très grosse application, je dois donc passer du temps à parcourir tous les storyboards pour m'en assurer).
la source
Xcode 11 - Swift 5.3
Depuis Xcode 11 et avec l'aide de Swift 5.3 et
@main
, vous pouvez avoir une application multiplateforme qui n'a aucunSceneDelegate
événement ouAppDelegate
. Il n'y aura qu'un simple fichier comme:la source