J'ai mis à jour Xcode vers la version 10.1, mais chaque fois que je lance ou compile mon projet, l'ensemble du Mac se bloque et se bloque, ce qui me ferme automatiquement l'iMac ou le Mac! Pourquoi cela arrive-t-il? Je ne peux littéralement pas travailler ou construire et exécuter quoi que ce soit! J'ai mis à jour Java, macOS, en fermant toutes les applications, mais gèle toujours tout le temps. Avez-vous une solution?
J'avais le problème exact, alors j'ai regardé mes tâches de construction en cliquant. Il se trouve que je souffrais d’un gel complet du système pendant le
Compiler le fichier Storyboard ...
étape de mon fichier de storyboard principal. (Mon Storyboard n'était pas très grand. ~ 10 contrôleurs de vue)
J'ai recréé mon projet et, pour moi, l'instabilité est apparue lorsque j'ai commencé à ajouter quelques vues SCNViews. Lorsque je les ai tous supprimés et créé ces vues par programme, mon étape de compilation de Storyboard a abouti et mon application lancée.
Je ne suis pas sûr que ce soit spécifiquement SceneKit qui cause des problèmes, mais quelque chose faisait que la compilation de mon Storyboard échouait. Essayez de commencer par là: sauvegardez le projet, supprimez tout ce qui se trouve dans le Storyboard et voyez si vous êtes toujours en train de planter. (Cela ne se passait certainement pas sous 10.0)
1. Analyse Sur la base de la réponse de G Purcell, je me suis concentré sur mes vues SCN. Cela l'a fait arrêter de planter (en supprimant les noms de sous-type pour tous les SCNViews):
Mais je ne pouvais pas faire que les classes personnalisées s'initialisent correctement. Je ne travaillerais pas pour moi en les lançant au moment de l'exécution vers leurs sous-types, et XCode plantait encore parfois.
2. Le correctif Il n'y avait pas d'autre moyen que d'écrire du code et je l'inclue ici uniquement si quelqu'un d'autre a besoin d'aide pour initialiser SCNViews par programme (j'ai eu des difficultés, j'ai d'abord essayé de conserver les génériques SCNViews.) J'ai donc supprimé tous les SCNViews (OK, pas tous - il compile toujours avec les deux-trois SCNViews dans StoryBoard,) et ajouté UIView en tant qu'espace réservé avec les mêmes contraintes qu'auparavant.
SCNView sous-classe:
Tout d’abord, assurez-vous que la méthode init (frame :) est implémentée - dans le cas où quelque chose se passe dans init, ajoutez une fonction init personnalisée, afin qu’elle soit appelée depuis init:
override init(frame: CGRect) {
super.init(frame: frame, options: nil)
self.layoutIfNeeded()
self.customInit()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
customInit()
}
func customInit(){
self.sceneSetup()
self.intro()
self.layoutIfNeeded()
}
ViewController:
override func viewDidLoad() {
super.viewDidLoad()
self.customSceneView = CustomSceneView(frame: customSceneContainer.bounds)
self.customSceneContainer.addSubview(self.customSceneView)
self.customSceneView.widthAnchor.constraint(equalTo: customSceneContainer.widthAnchor, multiplier: 1).isActive = true
self.customSceneView.heightAnchor.constraint(equalTo: customSceneContainer.heightAnchor, multiplier: 1).isActive = true
}
Résultat: Enfin, tout compilé, mon Mac est resté éveillé. De nouvelles contraintes supplémentaires ont dû être ajoutées pour un redimensionnement correct lors de la rotation du périphérique. Mais enfin, et après deux mois, je pouvais télécharger de nouvelles fonctionnalités sur l'App Store. :)
Je suis assez surpris qu'une application puisse geler l'ensemble du Mac, même une application provenant d'Apple.
Après beaucoup de frustration avec ce problème, j'ai trouvé la solution suivante qui fonctionne pour moi:
Toute reconstruction fonctionne bien pour moi tant que le story-board n'a pas été touché.