63 votes

Xcode 8.0 Swift 3.0 lente de l'indexation et de la construction

J'ai installé Xcode 8.0 et converti Swift de 2,2 à 3,0 (ce processus a également pris beaucoup de temps, je viens de quitter mon Mac fonctionne toute la nuit). Je n'ai pas un gros projet (environ 20 dossiers). Je suis également en utilisant Pods. L'indexation de la précédente Xcode version (< 8.0) ont travaillé rapide, mais maintenant, après la mise à niveau, la barre de progression est coincé sur une position (je suis déjà en attente d'une heure).

Les choses que j'ai essayé ne m'a pas aidé:

  • Nettoyer l' DerivedData le dossier et redémarré Xcode
  • Nettoyé le projet et redémarré Xcode
  • Supprimé Pods répertoire <project>.xcworkspace puis de le réinstaller
  • Redémarré Le Mac
  • Essayé de créer un projet sans les Cosses
  • Réinstallé Xcode
  • Essayé sur un autre Mac avec cloné projet

C'est vraiment pas cool de faire de telles versions des logiciels lorsque les développeurs ont à passer des heures à résoudre un tel ridicule problèmes. Il est très décevant. Toutes les idées de comment résoudre ce problème?

53voto

Chris Points 13472

Allez à paramètres du projet, alors Rédacteur en chef > Ajouter un Paramètre de construction > Ajouter un Paramètre Défini par l'Utilisateur, et ajoutez la ligne suivante:

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES

L'ajout de cet indicateur a chuté de notre propre-construire des temps de compilation à partir de 7 minutes à 65 ans pour un 40KLOC swift projet, miraculeusement. Peut également confirmer les 2 amis ont vu des améliorations similaires sur des projets d'entreprise.

Je ne peux que supposer que c'est une sorte de bug dans Xcode 8.0

23voto

Danny Points 1901

J'ai résolu le problème en commentant tous les fichiers, puis en supprimant les commentaires un par un. J'ai trouvé que le problème est encore dans le tableau de déclaration telle que décrite ici.

J'ai eu ce type de code et le projet n'a pas d'indexation:

class {
    var first: String!
    var second: String!
    var third: String!
    var fourth: String!
    var fifth: String!

    func abc() -> [String] {
        var array = [first, second, third, fourth, fifth]
    }
}

Je l'ai changé pour le présent et l'indexation commencé à travailler:

class {
    var first: String!
    var second: String!
    var third: String!
    var fourth: String!
    var fifth: String!

    func abc() -> [String] {
        var array = [first]

        array.append(second)
        array.append(third)
        array.append(fourth)
        array.append(fifth)
    }
}

6voto

Ben Simon Points 111

J'ai eu le même problème seulement depuis la mise à jour Swift 3/XCode 8 et il semble être causé par le large éventail des littéraux.

J'ai été en mesure de résoudre le problème en ajoutant des annotations de type pour les variables étant affecté à l'littéral de tableau, par exemple

let array: Array<String> = ["1", "2", "3", "4", "5", "6", "7", "8"]

au lieu de

let array = ["1", "2", "3", "4", "5", "6", "7", "8"]

5voto

Stefan Nestorov Points 217

J'ai eu le même problème et suivi ce guide debug : http://irace.me/swift-profiling Mon problème est que j'avais néant la coalescence de l'opérateur dans certaines chaînes de caractères, par exemple:

let name = "\(someString ?? "")"

et quatre méthodes avec ce étaient à l'origine de 2 minutes supplémentaires de temps de construction.

5voto

silly_cone Points 99

J'ai eu le même problème et résolu d'minutieusement en passant par mon code, ligne par ligne, il s'avère Swift 3 préfère chaîne d'interpolation plutôt que d'utiliser le symbole+, c'est à dire

let url = "http://yahoo.com" + "someWebPage" + "whereItsInteresting" 

Si vous avez été en utilisant le dessus de style de code de le remplacer;

let url = "http://yahoo.com\(someWebPage)\(whereItsInteresting)"

Et votre temps de construction sera immédiatement revenir à la normale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X