Temps de compilation trop long

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:

Réponses

  • DrakenDraken Membre

    @busterTheo a dit :

    C'est long, non ?
    Y'a-t-il une fourchette de tolérance raisonnable à ne pas dépasser ?

    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.

  • LarmeLarme Membre

    Sans savoir ce qui prend du temps, c'est difficile.

  • busterTheobusterTheo Membre
    25 mars modifié #4

    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 ?

  • LarmeLarme Membre
    25 mars modifié #5

    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 !

  • LarmeLarme Membre

    Et tu n'a pas un warning method 'methodName' took ZzZ ms to type-check (limit: 250ms) ?

  • busterTheobusterTheo Membre
    25 mars modifié #8

    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

  • Joanna CarterJoanna Carter Membre, Modérateur
    25 mars modifié #9

    @busterTheo a dit :
    2 à 3000 lignes par fichiers (pas tous mais bien 70%)

    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.

  • Joanna CarterJoanna Carter Membre, Modérateur
    25 mars modifié #12

    @busterTheo a dit :
    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

    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

  • @Joanna Carter a dit :
    Vraiment ? C'est extraordinaire d'avoir autant que ça, surtout avec un projet Swift

    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

  • DrakenDraken Membre

    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.

  • PyrohPyroh Membre

    @Draken a dit :
    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 ??

  • DrakenDraken Membre

    @Eric P. a dit :
    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.

  • klogklog Membre

    @Eric P. a dit :
    Uniquement en changeant la ligne pointée par Draken ??

    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 ???

    @Harlo a dit :
    @busterTheo essaye un analyseur de code, c'est bien pratique pour optimiser et corriger.

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

Connectez-vous ou Inscrivez-vous pour répondre.