Temps de compilation trop long
busterTheo
Membre
Bonjour,
lorsque je fais (simulator) "Build for running", Xcode met 204 secondes soit plus de 3 minutes.
J'ai lancé cette commande dans le terminal
"defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES"
Ça vient de là
https://medium.com/@joshgare/8-tips-to-speed-up-your-swift-build-and-compile-times-in-xcode-73081e1d84ba
C'est long, non ?
Y'a-t-il une fourchette de tolérance raisonnable à ne pas dépasser ?
Merci d'avance
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je me souviens un jour avoir attendu 37 minutes, pour passer au tour suivant dans une partie de Civilisation 2, en mode de difficulté Empereur, en fin de partie avec une grande carte emplie de villes, partout partout .. Là c'était vraiment long. Et pourtant l'ordinateur était une configuration moyenne selon les recommandations du jeu (un 486 à 33 Mhz, oui cela ne date pas d'hier !)
Pour ton problème, je n'en sais rien. Tu oublies de préciser le nombre de lignes du code, le nombre de bibliothèques externes et le type de ta machine de développement.
Sans savoir ce qui prend du temps, c'est difficile.
Merci pour vos réponses.
Je prend un exemple
pas de biblio externes
environ 60 fichiers swift
environ 250 images (small pictos)
2 à 3000 lignes par fichiers (pas tous mais bien 70%)
Et donc si je fais une modification (même juste une virgule dans un texte) dans un fichier long et que je build, 3mns - Building : 330 Tasks
Est-ce-que ça vous arrive d'avoir des compiles longues ou c'est très rare ?
Si tu regardes l'output du Build (cf. ceci sauf que tu devrais avoir des temps), tu vois un truc qui prend énormément de temps ?
Oulala, c'est génial ton truc - J'en ai les larmes aux yeux d;-)
Eh ben didon : j'ai quelques temps genre 500 - 130 etc
C'est gros mais j'en ai un à 68307.31ms - c'est énorme
Pourtant :
Environ 300 lignes de code dans cette fonction
25 adsubviews et 12 addGestureRecognizers et 12 instances de classe perso
Là, j'ai un pb !
Et tu n'a pas un warning method 'methodName' took ZzZ ms to type-check (limit: 250ms) ?
Tu parles de mettre cela dans Other swift flags dans build settings ?
-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100
Si c'est ça - non pas encore
Et faudrait aussi que je fasse ça dans le terminal, non ?
defaults write com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool NO
Vraiment ? C'est extraordinaire d'avoir autant que ça, surtout avec un projet Swift ; c'est une indication de mauvaise structure de l'appli.
Bon, en attendant j'ai mis les -Xfrontends mais pas la commande dans le terminal.
J'arrive bien à afficher les temps sup à 250.
Génial - Merci encore.
Et là je ne comprend pas :
Expression took 2875ms to type-check (limit: 250ms)
Et voilà l'expression :
let ecartPointMiddleTopPixelsA1 = (poigneeLigneTopX + roundPositions + poigneeLigneBottomX + roundPositions)/2
Et si je fais çà
let ecartPointMiddleTopPixelsA1: CGFloat = ...
ça fait 440ms - C'est beaucoup mieux
A ce sujet, j'avais cru comprendre depuis longtemps que cela ne servait plus à rien de typer dans ce cas là puisque les autres composantes sont, elles typée
Par ex :
let aaa = CGFloat(50)
ou
let aaa: CGFloat = CGFloat(50)
Mauvaise structure du fichier, plutôt non ?
Rassure-moi, Joanna Carter.
Et les variables sont de quels types?
CGFloat
Désolé tu parlais du trop grand nombre de lignes dans mon fichier et non pas du temps trop long...
Je pense donc plutôt effectivement pb de structure de l'app, ou en tout cas certains fichiers - BAD
Ben moi je trouve justement que en swift (que j'adore pourtant) il faut souvent beaucoup de lignes de code pour pas grand chose
Par ex pour un removeFromSuperview
if popUpFieldPersonnalite != nil {
if (popUpFieldPersonnalite.superview == viewMereEtape0) {
popUpFieldPersonnalite.removeFromSuperview()
}
}
sans parler du binding, etc.
enfin... c'est ainsi
Euh, c'est bien compliqué ton removeFromSuperview ! Je ne comprend pas l'intérêt de tous ces tests.
Quelque chose comme popUpFieldPersonnalite?.removeFromSuperview() devrait faire l'affaire.
Si le reste est du même tonneau tu m'étonne que ça prenne une demi semaine à compiler...
Draken, t'as raison et donc je travaille là-dessus, j'ai vu mes erreurs de conception.
Merci à tous.
Comment met-on "Résolu" ? Merci...
Pour info, je suis passé à un build de 18 secondes - Ouf
Uniquement en changeant la ligne pointée par Draken ??
Et alors, cela t'étonnes ? * prend un air avantageux *
@busterTheo essaye un analyseur de code, c'est bien pratique pour optimiser et corriger.
Ha ouai ça m'interpelle aussi ! Autant je suis complètement d'accord avec la réécriture que propose Draken, autant je ne comprends pas comment cela peut impacter à ce point le temps de compilation ???
C'est vrai, même si ca ne réduit pas nécessairement le temps de compil.
Bien l'bonjour Draken, t'as une piste pour ton "essaye un analyseur de code" ?
Je te rassure, depuis le temps j'ai résolu la plupart de ces pbs...