Cuando aparece el temido código de error 65 al ejecutar xcodebuild en iOS o macOS, ya sea en desarrollo local o en entornos de integración continua, puede parecer que todo ha colapsado. Es uno de esos errores genéricos que no indican claramente qué ha ido mal, lo que lo hace especialmente frustrante.
Este fallo es habitual cuando trabajas con herramientas como React Native, Xcode, Appium, Unity o Cordova. Lo peor es que muchas veces Xcode apenas aporta información útil en sus logs, lo que complica aún más su resolución. Pero no te preocupes, vamos a desmenuzar todos los motivos posibles por los que aparece y cómo solucionarlo según cada caso.
¿Qué significa el error Xcodebuild con código 65?
El código 65 en la herramienta xcodebuild es una forma genérica de decir que algo ha fallado en el proceso de compilación, test, análisis o archivado del proyecto. En concreto, según la documentación técnica, este error se asocia con errores de entrada de datos o condiciones inesperadas no recuperables para la herramienta.
Al igual que los códigos HTTP (como el 404 o el 200), estos códigos de salida indican qué ha pasado pero no dan detalles. En este caso, el 65 corresponde a una constante definida en el archivo sysexits.h
y su descripción es “EX_DATAERR”, es decir, fallo por datos incorrectos.
Esto puede tener múltiples causas, desde un error en la configuración del proyecto hasta problemas de permisos, firmas, simuladores no iniciados, falta de perfiles de aprovisionamiento o incluso incompatibilidades con versiones de dependencias. Si quieres profundizar en la configuración de entornos de compilación, puedes revisar un artículo sobre la compilación de Ubuntu.
Causas comunes del fallo en Xcodebuild con código 65
Según lo observado en diferentes entornos como Appium, Cordova, CircleCI y proyectos nativos de Xcode, las principales razones del fallo son:
- Perfiles de aprovisionamiento caducados o no configurados.
- Problemas con la firma de código (Code Sign Identity).
- Simuladores no arrancados o no disponibles en el momento de construir o testear.
- Archivos de configuración corruptos o incompatibles (por ejemplo
.xcconfig
mal escritos). - Fallo en los pasos intermedios del build, como CopyPNG, CodeSign o ProcessProductPackaging.
- Concurrencia en hilos que ralentizan el boot del simulador en entornos CI como CircleCI o Azure Pipelines.
- Uso inadecuado de máquinas Apple Silicon (M1, M2…) sin tener en cuenta las diferencias de arquitectura.
Error 65 en Xcodebuild usando CircleCI o sistemas CI/CD
Cuando se ejecutan builds en entornos automatizados como CircleCI, xcodebuild puede fallar si el entorno aún no está “preparado”. Muchos desarrolladores se topan con el fallo 65 porque el simulador aún no ha arrancado completamente cuando arranca la compilación.
Un truco recomendado es arrancar previamente el simulador manualmente con el comando:
xcrun instruments -w 'iPhone 7 (10.3)' || sleep 15
De este modo, se da tiempo al sistema para arrancar el simulador correctamente. Incluso el sleep 15
posterior ayuda a que el comando devuelva código 0 y no provoque otro error encadenado.
También conviene separar el arranque del simulador del paso de obtención de dependencias para tener más claridad sobre qué etapa está fallando en el pipeline. Para más detalles sobre la integración continua, puedes visitar este enlace sobre Ethereum y CI/CD.
Error 65 en Appium con WebDriverAgent
Uno de los casos más frecuentes del error 65 se da al lanzar tests con Appium sobre dispositivos reales iOS. El orígen habitual está en la imposibilidad de lanza el WebDriverAgent correctamente, la herramienta que usa Appium para comunicarse con el dispositivo iOS.
En la mayoría de los casos, este fallo se debe a:
- WebDriverAgent mal firmado o sin perfil de aprovisionamiento válido.
- Bundle Identifier incorrecto o que no concuerda con el certificado configurado.
- Versión de Appium incompatible con la de WebDriverAgent.
La solución pasa por firmar correctamente el WDA y asegurarse de que no hay errores relacionados con el entitlements o la identidad de firma. Además, se recomienda borrar la aplicación WebDriverAgent del dispositivo y reiniciarlo antes de volver a probar el build. También puede ser útil usar la opción showXcodeLog
para obtener más información detallada del error subyacente.
Trabajando con React Native y fallo código 65
Si estás usando React Native y te topas con este error al lanzar npx react-native run-ios
, asegúrate de lo siguiente:
1. Instalar correctamente los pods
Una de las causas más frecuentes es que las dependencias nativas no estén bien instaladas. Para solucionar esto:
npx pod-install
Una vez completado, puedes ejecutar de nuevo el proyecto. Si necesitas actualizar tu entorno, hay guías sobre cómo instalar Ghostty en Linux, que pueden ser útiles para desarrolladores.
2. Ejecutar desde Xcode para obtener errores más explícitos
Cuando los comandos CLI no dan información útil, lo mejor es abrir el proyecto en Xcode y construirlo desde ahí. Esto te permitirá ver errores más claros respecto a librerías, dispositivos o configuraciones.
3. Revisar dispositivos conectados
Verifica si tienes múltiples simuladores activos y selecciona uno explícitamente al lanzar el proyecto:
npx react-native run-ios --simulator="iPhone 15 Pro"
4. Resetear los pods
Algunas bibliotecas conflictivas o restos de configuraciones anteriores generan errores. Un reset suele ayudar:
cd ios
pod deintegrate
pod cache clean --all
pod setup
pod install
5. Apple Silicon (chips M1, M2, M3)
Los nuevos chips de Apple causan errores en builds si no se ejecutan los comandos en arquitectura x86. En ese caso, prueba lo siguiente:
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
Unity y error 65 durante archivado
En proyectos creados con Unity que luego son exportados como proyectos Xcode para compilar en iOS, el error 65 puede darse durante el paso de xcodebuild archive
. A pesar de tener todo configurado correctamente, Xcode puede fallar indicando problemas en steps como:
- ProcessProductPackaging
- CodeSign
- Validate
Aunque los perfiles y certificados estén bien, puede haber errores en la generación de entitlements o paquetes intermedios. En ocasiones, ayuda borrar la carpeta DerivedData
, limpiar los productos dentro de Xcode, y asegurarse de que la versión de Unity y Xcode sean compatibles. Para más información sobre versiones de software, revisa nuestra publicación sobre cómo saber la versión de Windows 11.
Errores sin pista visible: qué hacer
En muchos escenarios (por ejemplo, usando Azure Pipelines o GitHub Actions), el error aparece sin acompañamiento claro en el log incluso con flag --verbose
. En esos casos:
1. Aumenta los niveles de log. Usa showXcodeLog
, -verbose
y guarda archivos de log temporales para analizarlos con calma.
2. Examina el último paso que aparece antes del fallo. Muchas veces el error no está donde falla, sino unos pasos antes.
3. Intenta compilar manualmente con Xcode y comprobar si se repite el error fuera del entorno automatizado.
De esta forma, puedes aislar si el problema es del proyecto en sí o de la configuración del entorno. Recuerda que entender los flujos de compilación puede ayudar a prevenir problemas, así que considera leer sobre pantallas de error en sistemas.
Como has podido ver, el código de error 65 no significa una única cosa, sino que puede derivarse de múltiples causas según el contexto: proyectos nativos, React Native, Appium, CI/CD, Unity, etc. La clave está en saber interpretar los logs, entender cómo funciona la firma y configuración de Xcode, y adoptar buenas prácticas como simular entornos reales, usar logs detallados y limpiar los artefactos sobrantes. Con algo de paciencia y una estrategia sistemática, este error puede resolverse y dejar de ser una pesadilla que frena el desarrollo en iOS.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.