dyld: Library not loaded: @rpath/libswiftCore.dylib: cómo vencer el error

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

«¡Zas — y la aplicación se cayó!»: conociendo dyld: Library not loaded: @rpath/libswiftCore.dylib

\n\n

¿Alguna vez has iniciado tu aplicación Swift, has visto una bonita pantalla de inicio, y luego — ¡pum! — pantalla negra y consola llena de letras rojas? ¿Te suena? Si alguna vez te has topado con el mensaje dyld: Library not loaded: @rpath/libswiftCore.dylib, conoces esa sensación de leve pánico. En Stack Overflow esta pregunta ha acumulado miles de visitas, y con razón: el error es traicionero, pero totalmente solucionable.

\n\n

En este artículo no solo daremos una instrucción seca. Analizaremos por qué las bibliotecas Swift se «pierden» en tiempo de ejecución, cómo evitarlo y qué hacer si ya te has metido en el lío. ¡Allá vamos!

\n\n

¿Qué es dyld y por qué se enfada?

\n\n

dyld (dynamic link editor) es el cargador de bibliotecas dinámicas en macOS e iOS. Cuando tu aplicación se inicia, dyld busca todas las bibliotecas necesarias en las rutas especificadas en el binario. Una de esas rutas es @rpath (ruta de búsqueda en tiempo de ejecución). Si la biblioteca (por ejemplo, libswiftCore.dylib) no se encuentra en esa ruta, dyld falla con un error.

\n\n

En pocas palabras: le dijiste a la aplicación «toma el libro del estante @rpath», y el estante estaba vacío. Eso es todo el misterio.

\n\n

¿Por qué ocurre esto específicamente con libswiftCore.dylib?

\n\n

libswiftCore.dylib es el núcleo del runtime de Swift. Sin él, ningún código Swift funciona. El error ocurre más a menudo en tres casos:

\n\n
    \n
  • Usas Xcode 14+ y el proyecto está configurado para una versión antigua de Swift.
  • \n
  • Conectas frameworks o CocoaPods que requieren una versión específica del runtime de Swift.
  • \n
  • Olvidaste activar «Always Embed Swift Standard Libraries» en la configuración de compilación.
  • \n
\n\n

5 formas de solucionar dyld: Library not loaded: @rpath/libswiftCore.dylib

\n\n

Pasemos a la práctica. A continuación, métodos comprobados, de lo simple a lo complejo. Para cada uno, daré un ejemplo de código o configuración.

\n\n

1. Activa «Always Embed Swift Standard Libraries»

\n\n

El culpable más común. Si tu aplicación no incrusta las bibliotecas Swift en el paquete, dyld no las encontrará en el dispositivo.

\n\n

Cómo solucionarlo:

\n
    \n
  1. Abre el proyecto en Xcode.
  2. \n
  3. Selecciona Target → Build Settings.
  4. \n
  5. Busca Always Embed Swift Standard Libraries.
  6. \n
  7. Establece el valor en Yes.
  8. \n
\n\n

Si usas CocoaPods, verifica que en el Podfile no haya una línea que desactive este comportamiento:

\n\n
# Malo (puede causar el error)\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# Bueno\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\n

2. Verifica la compatibilidad de las versiones de Swift

\n\n

Si has conectado un framework compilado con Swift 5.7, pero tu proyecto está en Swift 5.5 — hola, error. El runtime de Swift no es 100% retrocompatible.

\n\n

Solución: asegúrate de que todas las dependencias usen la misma versión de Swift. Abre la terminal y ejecuta:

\n\n
# Saber la versión de Swift para un .framework específico\nstrings MyFramework.framework/MyFramework | grep "Swift"\n# O verifica a través de xcrun\nxcrun swift --version\n
\n\n

Si el framework está compilado para otra versión, recompílalo o actualízalo.

\n\n

3. Limpia Derived Data y recompila el proyecto

\n\n

A veces Xcode almacena en caché rutas antiguas a las bibliotecas. Una recompilación completa a menudo resuelve el problema.

\n\n
# Eliminamos Derived Data manualmente\nrm -rf ~/Library/Developer/Xcode/DerivedData                

Blogs

Book Recommendations