J'ai installé Xcode 8.0 et converti Swift 2.2 en 3.0 (ce processus a également pris beaucoup de temps, je viens de laisser mon Mac en marche toute la nuit). Je n'ai pas un gros projet (environ 20 fichiers). J'utilise aussi Pods
. L'indexation de la version précédente de Xcode (<8.0) a fonctionné rapidement, mais après la mise à niveau, la barre de progression est bloquée sur une position (j'attends déjà depuis une heure).
Ce que j'ai essayé ne m'a pas aidé:
DerivedData
et redémarré XcodePods
avec <project>.xcworkspace
, puis installé à nouveauCe n'est vraiment pas cool de faire de telles versions de logiciels lorsque les développeurs doivent passer des heures à résoudre des problèmes aussi ridicules. C'est très décevant ... Des idées pour résoudre ce problème?
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 toujours dans la déclaration de tableau comme décrit ici .
J'avais un code comme celui-ci et le projet n'était pas indexé:
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]
}
}
J'ai changé cela et l'indexation a commencé à fonctionner:
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)
}
}
Accédez aux paramètres du projet, puis à Editeur> Ajouter un paramètre de construction> Ajouter un paramètre défini par l'utilisateur, puis ajoutez les éléments suivants:
Swift_WHOLE_MODULE_OPTIMIZATION = YES
L'ajout de ce drapeau a fait chuter miraculeusement les temps de compilation de notre propre construction de 7 minutes à 65 secondes pour un projet 40KLOC Swift. Vous pouvez également confirmer que 2 amis ont constaté des améliorations similaires sur des projets d’entreprise.
Je ne peux que supposer que ceci est une sorte de bogue dans Xcode 8.0
J'ai le même problème seulement depuis la mise à niveau vers Swift 3/XCode 8 et cela semble être causé par de grands tableaux littéraux.
J'ai pu résoudre le problème en ajoutant des annotations de type aux variables affectées au 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"]
J'avais un problème similaire et suivais ce guide pour déboguer: http://irace.me/Swift-profiling Mon problème était que j'avais un opérateur de coalescence nul dans certaines chaînes, par exemple:
let name = "\(someString ?? "")"
et quatre méthodes avec cela causaient 2 min supplémentaires de temps de construction.
J’ai eu le même problème et je l’ai résolu en parcourant mon code ligne par ligne, il s’avère que Swift 3 préfère l’interpolation des chaînes plutôt que le symbole +, c’est-à-dire
let url = "http://yahoo.com" + "someWebPage" + "whereItsInteresting"
Si vous avez utilisé le style de code ci-dessus, remplacez-le par;
let url = "http://yahoo.com\(someWebPage)\(whereItsInteresting)"
Et votre temps de construction reviendra immédiatement à la normale.
pour ceux qui veulent trouver où le compilateur est "attrapé"
Ajouter à Other Swift Flags
-Xfrontend -warn-long-function-bodies=50
vérifier la réponse complète ici
J'ai eu une fonction qui a pris plus d'une minute à compiler, et après une enquête, j'ai trouvé que le coupable vérifiait si assez de temps s'était écoulé depuis une date mémorisée:
let myStoredDate: Double = // Double representing a time in the past
// if at least one week (60 * 60 * 24 * 7 seconds) has passed since myStoredDate
if Date().timeIntervalSince1970 - myStoredDate > (60 * 60 * 24 * 7){
// do stuff
}
La compilation de ce code prend plus de 10 secondes - couplé à la répétition répétée de ce code avec des nombres différents plusieurs fois, la compilation prenait beaucoup trop de temps. J'ai pu résoudre ce problème en pré-calculant l'intervalle
let myStoredDate = // Double representing a time in the past
//it is important to explicitly specify that the variable is a Double
let interval: Double = 60 * 60 * 24 * 7
if Date().timeIntervalSince1970 - myStoredDate > interval{
// do stuff
}
Après avoir fait cela avec les ~ 10 fois que je vérifiais, le temps de compilation passait de plus d’une minute à quelques millisecondes.
Il est extrêmement probable que ce problème se produise également avec la combinaison de l’inférence de type et des mathématiques ailleurs. Veillez donc à ce que cela ne se produise nulle part ailleurs dans votre code.
Je ne pense pas que cela soit lié au problème d'OP, mais le XCode 8 pour moi a récemment ralenti. J'ai finalement trouvé que c'était mon erreur (et je me souviens de l'avoir fait par inadvertance) - j'ai ajouté XCode.app comme référence Framework. Cela a essentiellement permis à XCode de rechercher et d’indexer l’ensemble du dossier XCode.app. Une fois que j'ai vu l'erreur et enlevé le Framework, il est redevenu bon :)
Mon problème était le dictionnaire. J'avais varié grand dictionnaire.
let values = ["address":addressTextField.text,"city":cityTextField.text,"zipCode":zipCodeTextField.text,"state":stateTextField.text,"pet":answerLabel.text,"rentStart":rentStartTextField.text,"rentEnd":rentEndTextField.text,"rent":rentTextField.text,"phone":phoneTextField.text,"email":emailTextField.text,"status":leaseStatusTextField.text,"bedrooms":bedroomTextField.text,"parking":parkingLabel.text,"furnish":furnishLabel.text,"utilities":utilitiesTextField.text,"laundry":laundryTextField.text,"paymentCycle":paymentCycleTextField.text,"note":noteTextView.text]
Je l'ai décomposé en:
var values = ["address":addressTextField.text]
values["city"] = cityTextField.text
values["zipCode"] = zipCodeTextField.text
values["state"] = stateTextField.text
values["pet"] = answerLabel.text
values["rentStart"] = rentStartTextField.text
values["rentEnd"] = rentEndTextField.text
values["rent"] = rentTextField.text
values["phone"] = phoneTextField.text
values["email"] = emailTextField.text
values["status"] = leaseStatusTextField.text
values["bedrooms"] = bedroomTextField.text
values["parking"] = parkingLabel.text
values["furnish"] = furnishLabel.text
values["utilities"] = utilitiesTextField.text
values["laundry"] = laundryTextField.text
values["paymentCycle"] = paymentCycleTextField.text
values["note"] = noteTextView.text
values["owner"] = userID
J'ai rencontré le même problème d'indexation, mais cela ne s'est produit que lorsque j'exécutais/déboguaisais un périphérique, puis basculais vers un autre périphérique dans la barre d'outils en haut à gauche (Cible> iPhone).
Aucune des solutions ci-dessus n'a fonctionné pour moi.
Ma solution: J'ai enlevé ma copie de travail git locale et en ai cloné une nouvelle à partir de mon "origine".
(Il y a des fichiers "magiques" dans les dossiers xcuserdata/shared/session etc. qui pourraient être à l'origine de ce problème?)
C'est un bogue Xcode (Xcode 8.2.1) qui se produira si vous avez un littéral de dictionnaire volumineux ou un dictionnaire imbriqué. Vous devez diviser votre dictionnaire en parties plus petites et les ajouter avec la méthode append jusqu'à ce que Apple corrige le bogue.
Cela fonctionne pour moi dans Xcode 8.2.1 et Swift 3 lorsque "l'indexation" est bloquée:
J'ai toujours deux projets ouverts, un projet fictif et le projet sur lequel je travaille. J'ai aussi un appareil iPad Air connecté sur lequel je lance mes projets. Lorsque mon projet est bloqué sur "Indexation", je passe à mon projet factice et le lance sur mon périphérique iPad Air connecté. Ensuite, j’arrête le projet Je reviens au projet sur lequel je travaille et l’indexation est terminée comme par magie. Cela devrait également fonctionner avec le simulateur uniquement, si vous n'avez pas de périphérique physique connecté.
Après avoir ajouté le réglage,
Swift_WHOLE_MODULE_OPTIMIZATION = YES
notre projet nettoie les temps de compilation de 1200 à 180 pour 650 fichiers Swift. Mais cela entraînera une augmentation de la compilation. Chaque changement nécessite la compilation de 180 secondes lorsque la compilation supplémentaire ne nécessite que 60 ans.
Sauvegardez votre projet, supprimez le dernier projet de mise à jour après la sauvegarde, puis redémarrez Xcode simple :-)