« Et pouf — l'application a planté » : découvrons dyld: Library not loaded: @rpath/libswiftCore.dylib
\n\nAvez-vous déjà lancé votre application Swift, vu un bel écran de démarrage, puis — boum ! — un écran noir et une console pleine de lettres rouges ? Familier ? Si vous avez déjà rencontré le message dyld: Library not loaded: @rpath/libswiftCore.dylib, vous connaissez cette sensation de légère panique. Sur Stack Overflow, cette question a recueilli des milliers de vues, et ce n'est pas pour rien : l'erreur est sournoise, mais tout à fait résoluble.
Dans cet article, nous ne donnerons pas simplement une instruction sèche. Nous allons comprendre pourquoi les bibliothèques Swift « se perdent » à l'exécution, comment l'éviter et que faire si vous êtes déjà dans le pétrin. C'est parti !
\n\nQu'est-ce que dyld et pourquoi se fâche-t-il ?
\n\ndyld (dynamic link editor) est le chargeur de bibliothèques dynamiques sur macOS et iOS. Lorsque votre application se lance, dyld recherche toutes les bibliothèques nécessaires aux chemins indiqués dans le binaire. L'un de ces chemins est @rpath (runtime search path). Si la bibliothèque (par exemple, libswiftCore.dylib) n'est pas trouvée à ce chemin, dyld plante avec une erreur.
En termes simples : vous avez dit à l'application « prends le livre sur l'étagère @rpath », mais l'étagère était vide. Tout le mystère est là.
\n\nPourquoi cela se produit-il spécifiquement avec libswiftCore.dylib ?
\n\nlibswiftCore.dylib est le cœur du runtime Swift. Sans lui, aucun code Swift ne fonctionne. L'erreur survient le plus souvent dans trois cas :
- \n
- Vous utilisez Xcode 14+ et le projet est configuré pour une ancienne version de Swift. \n
- Vous connectez des frameworks ou CocoaPods qui nécessitent une version spécifique du runtime Swift. \n
- Vous avez oublié d'activer « Always Embed Swift Standard Libraries » dans les paramètres de build. \n
5 façons de corriger dyld: Library not loaded: @rpath/libswiftCore.dylib
\n\nPassons à la pratique. Voici des méthodes éprouvées, de la plus simple à la plus complexe. Pour chacune, je fournirai un exemple de code ou de paramètres.
\n\n1. Activez « Always Embed Swift Standard Libraries »
\n\nLe coupable le plus fréquent. Si votre application n'intègre pas les bibliothèques Swift dans le bundle, dyld ne les trouvera pas sur l'appareil.
\n\nComment corriger :
\n- \n
- Ouvrez votre projet dans Xcode. \n
- Sélectionnez Target → Build Settings. \n
- Recherchez
Always Embed Swift Standard Libraries. \n - Définissez la valeur sur
Yes. \n
Si vous utilisez CocoaPods, vérifiez qu'il n'y a pas de ligne dans le Podfile désactivant ce comportement :
# Mauvais (peut provoquer l'erreur)\npost_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'\n end\n end\nend\n\n# Bon\npost_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'\n end\n end\nend\n\n\n2. Vérifiez la compatibilité des versions Swift
\n\nSi vous avez connecté un framework compilé avec Swift 5.7, alors que votre projet est en Swift 5.5 — bonjour l'erreur. Le runtime Swift n'est pas rétrocompatible à « 100 % ».
\n\nSolution : assurez-vous que toutes les dépendances utilisent la même version de Swift. Ouvrez le terminal et exécutez :
\n\n# Connaître la version Swift pour un .framework spécifique\nstrings MyFramework.framework/MyFramework | grep "Swift"\n# Ou vérifiez via xcrun\nxcrun swift --version\n\n\nSi le framework est compilé avec une version différente — recompilez-le ou mettez-le à jour.
\n\n3. Nettoyez Derived Data et reconstruisez le projet
\n\nParfois, Xcode met en cache d'anciens chemins vers les bibliothèques. Une reconstruction complète résout souvent le problème.
\n\n# Supprimer Derived Data manuellement\nrm -rf ~/Library/Developer/Xcode/DerivedData