web-dev-qa-db-fra.com

Xcode 10.1 se fige pendant la compilation

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? 

9
Mc.Lover

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)

7
G Purcell

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):

 enter image description here

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. :)

1
Henning

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:

  1. Construisez l'application jusqu'à ce que le Mac se fige.
  2. Attendez un peu plus longtemps (10-20 secondes).
  3. Maintenez le bouton d'alimentation du Mac enfoncé jusqu'à ce qu'il s'éteigne.
  4. Allumez votre Mac.
  5. Ouvrez le scénariseur principal et déplacez légèrement l'un des contrôleurs de vue.
  6. Enregistrez le storyboard et ouvrez tout autre fichier.
  7. Générez à nouveau l'application - cette fois, le Mac ne gèle pas

Toute reconstruction fonctionne bien pour moi tant que le story-board n'a pas été touché.

0
David