19/01/2006
En el ecosistema de desarrollo de Apple, gestionar las dependencias de un proyecto puede ser una tarea compleja. Contamos con varias herramientas para simplificar este proceso, y una de las más destacadas, conocida por su simplicidad y control, es Carthage. A diferencia de otras alternativas más invasivas, Carthage se presenta como un gestor de dependencias descentralizado que construye tus librerías y te entrega los binarios, dejándote a ti el control total sobre la estructura de tu proyecto. Si alguna vez te has sentido abrumado por la magia negra de otros gestores o simplemente quieres entender mejor lo que sucede bajo el capó, esta guía es para ti.

¿Qué es Carthage y por qué debería importarte?
Carthage se define a sí mismo como "la forma más simple de añadir frameworks a tu aplicación Cocoa". Su filosofía es clara: ser una herramienta mínima y no intrusiva. Mientras que otros gestores como CocoaPods modifican tu proyecto de Xcode y crean un workspace para gestionar todo por ti, Carthage tiene un enfoque diferente. Él se encarga de descargar el código fuente de tus dependencias, compilarlas para crear frameworks binarios (.framework o .xcframework) y tú, como desarrollador, eres responsable de integrarlos manualmente en tu proyecto.
Este enfoque tiene varias ventajas clave:
- Control total: No hay modificaciones automáticas en tu archivo
.xcodeproj. Tú decides cómo y dónde se integran los frameworks. - Simplicidad: El proceso es más transparente. Entiendes exactamente qué archivos se están añadiendo a tu proyecto.
- Descentralización: No depende de un repositorio central. Mientras una dependencia esté en un repositorio Git, Carthage puede trabajar con ella. Esto evita puntos únicos de fallo.
- Independencia: No te obliga a usar un
.xcworkspace, permitiéndote mantener tu estructura de proyecto original.
Carthage vs. CocoaPods: Una Comparación Rápida
Para entender mejor dónde se posiciona Carthage, aquí tienes una tabla comparativa con su principal alternativa, CocoaPods.
| Característica | Carthage | CocoaPods |
|---|---|---|
| Filosofía | Descentralizado y no intrusivo | Centralizado y automatizado |
| Integración | Manual (arrastrar y soltar frameworks) | Automática (gestiona un workspace) |
| Modificación del Proyecto | No modifica tu archivo de proyecto | Crea y gestiona un .xcworkspace |
| Descubrimiento | A través de GitHub, GitLab, etc. | Repositorio central de "pods" |
| Archivo de Configuración | Cartfile simple | Podfile y .podspec detallados |
| Control del Desarrollador | Máximo control y transparencia | Alta abstracción, menos control directo |
Instalación y Primeros Pasos
Empezar con Carthage es muy sencillo. Tienes varias formas de instalarlo en tu sistema.
Métodos de Instalación
- Homebrew (Recomendado): Si usas Homebrew, es la forma más fácil. Abre tu terminal y ejecuta:
brew update && brew install carthage - MacPorts: Si prefieres MacPorts, el comando es:
sudo port selfupdate && sudo port install carthage - Instalador .pkg: Puedes descargar el archivo
Carthage.pkgdesde la página de releases de GitHub del proyecto y seguir las instrucciones del instalador. - Desde la fuente: Para los más aventureros que quieren la última versión (potencialmente inestable), pueden clonar el repositorio y compilarlo ellos mismos.
Configurando tu Proyecto
Una vez instalado, sigue estos pasos para añadir tu primera dependencia:
- Crea un Cartfile: En el directorio raíz de tu proyecto (donde está tu
.xcodeproj), crea un archivo llamadoCartfile(sin extensión). Puedes hacerlo con el comandotouch Cartfile. - Añade tus dependencias: Abre el Cartfile con un editor de texto y lista las dependencias que necesitas. La sintaxis es simple. Por ejemplo, para añadir Alamofire:
github "Alamofire/Alamofire" ~> 5.5
Esto le dice a Carthage que busque el repositorio de Alamofire en GitHub y use una versión compatible con la 5.5. - Descarga y compila: Vuelve a la terminal y, en el directorio de tu proyecto, ejecuta el siguiente comando. Es crucial usar la bandera
--use-xcframeworkspara proyectos modernos con Xcode 12 o superior.carthage update --use-xcframeworks
Al finalizar este comando, verás que han aparecido dos cosas nuevas en tu directorio: un archivo Cartfile.resolved (que especifica las versiones exactas que se instalaron) y una carpeta Carthage. Dentro de Carthage/Build, encontrarás los frameworks binarios listos para ser usados.
Integrando Frameworks: El Método Moderno con XCFrameworks
Desde Xcode 12, Apple introdujo los XCFrameworks, un formato de distribución que puede contener binarios para múltiples plataformas y arquitecturas (por ejemplo, simulador de iOS, dispositivo iOS y Mac con Apple Silicon) en un solo paquete. Carthage lo soporta y es el método recomendado.
Pasos para la integración:
- Abre tu proyecto en Xcode: Selecciona el target de tu aplicación en el navegador de proyectos.
- Ve a la pestaña "General": Busca la sección llamada "Frameworks, Libraries, and Embedded Content".
- Arrastra los XCFrameworks: Abre la carpeta
Carthage/Builden el Finder. Arrastra y suelta los archivos.xcframeworkque necesites dentro de la sección mencionada en Xcode. - Configura la inserción (Embed): Xcode añadirá los frameworks. Para cada uno, asegúrate de que la opción "Embed" esté configurada como "Embed & Sign". Si estás añadiendo el framework a un target de tests o a otro framework, deberías seleccionar "Do Not Embed".
¡Y eso es todo! Ahora puedes importar el módulo en tu código Swift o Objective-C y empezar a usarlo. Recuerda siempre subir tus archivos Cartfile y Cartfile.resolved a tu control de versiones (Git), pero añade la carpeta Carthage/ a tu .gitignore.
Resolviendo Problemas Comunes
El Aviso: "Please update to the latest Carthage version"
Este es uno de los avisos más comunes y, como bien señalan los usuarios, no explica cómo solucionarlo. La respuesta depende de cómo instalaste Carthage:
- Si usaste Homebrew: La solución es tan simple como ejecutar:
brew upgrade carthage - Si usaste MacPorts: El comando equivalente es:
sudo port upgrade carthage - Si usaste el instalador .pkg: Deberás ir a la página de releases de Carthage en GitHub, descargar la última versión del
.pkgy volver a instalarlo.
Mantener Carthage actualizado es importante para asegurar la compatibilidad con las últimas versiones de Xcode y Swift.

Compatibilidad de Versiones de Swift
Carthage es inteligente. Si descargas un framework precompilado, verificará si fue compilado con la misma versión de Swift que estás usando. Si no coincide, Carthage intentará compilar la dependencia desde el código fuente para asegurar la compatibilidad. Si esto falla, el proceso se detendrá con un error. Esto garantiza que no te encuentres con problemas de ABI (Application Binary Interface) en tiempo de ejecución.
Preguntas Frecuentes (FAQ)
¿Carthage soporta frameworks dinámicos y estáticos?
Sí. Originalmente, Carthage se centró exclusivamente en frameworks dinámicos, que son compatibles con iOS 8 y superior. Sin embargo, desde la versión 0.30.0, también ofrece soporte completo para construir frameworks estáticos, lo cual puede ayudar a mejorar los tiempos de arranque de la aplicación si tienes muchas dependencias.
¿Debo subir la carpeta `Carthage` a mi repositorio de Git?
No. La carpeta Carthage contiene los artefactos de compilación y el código fuente de las dependencias. Debería ser ignorada por Git. Lo que sí debes subir son los archivos Cartfile y Cartfile.resolved. El archivo .resolved garantiza que cualquier otro desarrollador que clone el proyecto y ejecute carthage bootstrap obtenga exactamente las mismas versiones de las dependencias que tú.
¿Qué comando debo usar si clono un proyecto que ya usa Carthage?
No debes usar carthage update. En su lugar, usa carthage bootstrap. Este comando lee el archivo Cartfile.resolved y descarga y compila las versiones exactas de las dependencias que se especifican en él, garantizando la consistencia en todo el equipo de desarrollo.
¿Es Carthage mejor que CocoaPods?
No es una cuestión de "mejor", sino de "diferente". La elección depende de tus preferencias y las necesidades del proyecto. Si prefieres un sistema que haga todo por ti, oculte la complejidad y ofrezca un gran ecosistema centralizado, CocoaPods es una excelente opción. Si valoras el control, la simplicidad, la transparencia y no te importa realizar algunos pasos manuales, Carthage te encantará.
Conclusión
Carthage se mantiene como una herramienta robusta y fiable para la gestión de dependencias en el ecosistema de Apple. Su enfoque en la simplicidad y el control del desarrollador lo convierte en una alternativa poderosa para aquellos que desean entender y manejar cada aspecto de su proyecto. Aunque su curva de aprendizaje inicial puede ser ligeramente superior a la de otras herramientas debido a su naturaleza manual, la flexibilidad y la ausencia de "magia" lo compensan con creces, dándote el poder de construir aplicaciones más limpias y mantenibles.
Si quieres conocer otros artículos parecidos a Carthage: Guía Completa del Gestor de Dependencias puedes visitar la categoría Juegos.
