Renommer le fichier main.swift en Main.swift

Bonjour à tous,
Dans xCode, pour un projet en command line tool, peut-on renommer le fichier main.swift en Main.swift (majuscule), et ce, pour soit-disant respecter la nomenclature PascalCase ?!
Merci pour toute info.

Salut @jmz,

J’ai essayé de renommer le fichier, mais ça a mis des erreurs dans le code du fichier, donc je serais toi, je laisserai tomber la nomenclature PascalCase pour ce fichier et je ne chercherai pas plus loin.

Tu vas perdre trop de temps pour une subtilité.

1 J'aime

Merci Thony pour ta réponse. En fait le Pascal Case je m’en fou un peu, mais c’est un professionnel iOS, correcteur d’examens, qui exige ça de la part d’un de mes élèves?!
Toutes les pistes convergent pour dire que cela n’est pas possible, d’autant plus que main.swift est le point d’entrée de l’application.
L’erreur générée en cas de renommage en Main.swift est :
Undefined symbols for architecture x86_64:
« _main », referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation).

En fait, j’essaie d’être sûr avant de contrer l’évaluateur. Encore merci.

Après des recherches, il n’est effectivement pas possible de renommer ce fichier.

Voici la traduction Google de ce que j’ai trouvé et qui explique pourquoi on ne peut renommer ce fichier :

De nombreux langages de type C ont une fonction principale qui sert de point d’entrée - c’est-à-dire le code que le système d’exploitation appellera lorsque le programme est exécuté. Cela signifie que l’exécution du programme commence par la première ligne de cette fonction. Swift n’a pas de fonction principale; à la place, il a un fichier principal.

Lorsque vous exécutez votre projet, la première ligne du fichier principal qui n’est pas une déclaration de méthode ou de classe est la première à être exécutée. C’est une bonne idée de garder votre fichier main.swift aussi propre que possible et de placer toutes vos classes et structures dans leurs propres fichiers. Cela simplifie les choses et vous aide à comprendre le chemin d’exécution principal.

Source : Command Line Programs on macOS Tutorial | raywenderlich.com

et une autre source qui dit clairement qui ne faut pas le renommer :

1 J'aime

Super ta réponse bien sourcée.
Mais alors, qu’est-ce qui se passe dans la tête de l’évaluateur?!
C’est confusant tout de même :rofl:

Oui c’est sûr, ou il ne connaît pas le Swift et il se base sur le C ou je pense que c’est possible de renommer le fichier, mais pas la fonction.

Ou il teste ses élèves :joy:

1 J'aime

C’est complètement bizarre que ton évaluateur, « Professionnel » exige cela !

1 J'aime

Il ne connais certainement pas Swift et doit être un peu maniaque. J’avais un prof de math avec des exigences de présentation assez dingue. Il voulait des petits carreaux, des marges rouges et une distance de 5 cm entre la ligne rouge et les exercices (et des lignes tracés à la règle, jamais à la main). Toute infraction était sanctionné par des points en moins, même si les réponses étaient correctes !

1 J'aime

J’avais un prof de math avec des exigences de présentation assez dingue. Il voulait des petits carreaux, des marges rouges et une distance de 5 cm entre la ligne rouge et les exercices (et des lignes tracés à la règle, jamais à la main). Toute infraction était sanctionné par des points en moins, même si les réponses étaient correctes !

:rofl: :joy: Toutes mes félicitations :upside_down_face: :upside_down_face:

1 J'aime

Heureusement l’année suivante, on avait un prof de math non maniaque. Ouf !!!

1 J'aime

Bonjour a tous!
Je suis la « victime » de l’évaluateur :wink:
Merci @ThonyF pour la recherche et bien sûr @jmz d’avoir initié ce post!

5 J'aime

(re) Bonjour à tous,

Contre toute attente, @jmz et moi-même avons découvert qu’il est effectivement possible de renommer son main.swift en Main.swift. Nous avons obtenu cette réponse grâce a une question que @jmz avait posté sur StackOverflow, que vous pouvez retrouver ici :

Dans mon fichier main.swift, du coup renommé en Main.swift, j’ai donc créé une classe Main, il faut ajouter avant la déclaration de la classe @main.
Dans cette classe main, il faut obligatoirement créer une fonction statique que l’on appellera obligatoirement main(), et ensuite créer dans cette fonction une constante game (l’app est un jeu un peu similaire au cours de POO de Purple Giraffe), qui elle même permettra d’appeler la fonction gameManager(), chargée de lancer le jeu.

J’espère que cela pourra être utile à certains même si ce n’est pas très utilisé et recommandé de changer le nom du main.swift…en tout cas ça satisfera mon évaluateur!


import Foundation

@main
class Main {
    static func main() {
        let game = Game()
        game.gameManager()
    }
}
2 J'aime

Merci pour le feedback. à ta place, je mettrais un commentaire neutre et donc sans jugement, pour expliquer le pourquoi de cette fonction statique, pour laquelle tu n’as pas d’alternative :wink:
Faudrait pas qu’il t’enlève des points pour un truc qui à la lecture, semble inutile et tordu :slight_smile:

1 J'aime

@jsb Merci pour le retour, j’avais vu que @jmz avait ouvert un post sur StackOverflow.

En fait, tu modifies le point d’entrée de l’application, je n’y avais pas pensé. D’ailleurs, c’est pareil avec SwiftUI.

Et comme dit @sylvain, tu peux mettre un commentaire ou créer un protocole pour que ça semble un peu moins sorti de nulle part.

protocol ApplicationRoot {

static func main()

}

@main
struct Hello: ApplicationRoot {

static func main() {
print(« Hello »)
}

}

Je mets aussi plus de sources pour ceux qui veulent en savoir plus.

https://docs.swift.org/swift-book/ReferenceManual/Attributes.html

2 J'aime

Pourquoi faire simple quand on peut faire compliqué ?

3 J'aime

@ThonyF Oui effectivement c’est plus propre comme ça, merci!

@sylvain je me suis abstenu d’exprimer le fond de ma pensée, j’ai fait un retour à l’évaluateur très poli et argumenté, ce qui n’aura pas empêché l’évaluateur de me mettre un commentaire pas très sympa :man_shrugging: , il m’a tout de même validé le projet c’est tout ce qui m’intéresse! :tada:

@Draken je me le demande aussi!

Juste pour rire, on peut voir ce commentaire ?

1 J'aime

Forcément, ton évaluateur est un membre actif de PurpleGiraffe et suit ce forum avec attention :grinning: