Cómo resolver el error “Linker command filed with exit code 1” de Xcode

Cuando Xcode no te quiere mostrar la verdadera razón del error, recurre a la linea de comandos.

0

Un error de compilación que no se muestra correctamente en la interfaz de usuario de Xcode puede ser una buena forma de perder varias horas de productividad. Sin embargo, hay una forma fácil de conocer la razón verdadera por la cual tu proyecto está fallando a la hora de compilarse. Lee más a continuación.

Probablemente te ha pasado que al querer compilar tu proyecto en Xcode, éste falla sin mostrarte un error claro — lo único que se ve en la interfaz es un mensaje como el siguiente:

Apple Mach-O Linker error en Xcode

Esto puede ser muy frustrante pues no se está comunicando claramente lo que está previniendo la compilación exitosa de tu proyecto.

Afortunadamente, hay una forma de saber exactamente qué es lo que está fallando para poder arreglarlo correctamente, y es que Xcode en realidad es solamente una interfaz gráfica de usuario para el verdadero compilador. Esto quiere decir, que podemos interactuar directamente con el compilador desde la linea de comandos.

¿Qué causa el error en Apple Mach-O Linker?

Linker command filed with exit code 1 significa, en corto, que el compilador no pudo terminar de compilar los objetos en tu proyecto, dado que el linker encontró un erorr. ¿Pero cual?

La forma más rápida para conocer la fuente del error que no te permite compilar tu proyecto es compilarlo a través de la terminal, usando xcodebuild.

En tu terminal, escribe:

xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -verbose

Atención a los siguientes puntos:

  • Usa la bandera -project seguida de la ruta de tu proyecto de Xcode. Si estás usando un Xcode Workspace (cuando usas CocoaPods, por ejemplo), usa la bandera -workspace seguida de la ruta del workspace con el que estás trabajando.
  • Si usas un workspace, es necesario que inlcuyas la bandera -scheme con el nombre del esquema que quieres compilar. Si usas un projecto simple de Xcode, puedes omitir este parámetro.
  • La bandera -verbose es lo que te hará que el compilador te diga en qué parte está el error que no pudiste ver desde Xcode.

Al correr el comando anterior, xcodebuild comenzará a compilar tu proyecto y mostrará cada uno de los pasos en pantalla. Es muchísima información demasiado rápido — no intentes seguirla. Cuando termine, verás exactamente dónde está el error:

 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk -L/Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Products/Debug-iphoneos -F/Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Products/Debug-iphoneos -filelist /Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Intermediates/Callico.build/Debug-iphoneos/Callico.build/Objects-normal/arm64/Callico.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -miphoneos-version-min=10.0 -dead_strip -Xlinker -object_path_lto -Xlinker /Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Intermediates/Callico.build/Debug-iphoneos/Callico.build/Objects-normal/arm64/Callico_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -fembed-bitcode-marker -fobjc-link-runtime -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -Xlinker -add_ast_path -Xlinker /Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Intermediates/Callico.build/Debug-iphoneos/Callico.build/Objects-normal/arm64/Callico.swiftmodule -framework P3Foundation -framework P3NetworkKit -framework CoreLocation -framework CallicoAPIKit -framework P3UIKit -framework P3NetworkKit -framework CallicoKit -framework P3NetworkKit -Xlinker -dependency_info -Xlinker /Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Intermediates/Callico.build/Debug-iphoneos/Callico.build/Objects-normal/arm64/Callico_dependency_info.dat -o /Users/swanros/Library/Developer/Xcode/DerivedData/Callico-eydnnxbsvyefzyfovjigxtmfkxvf/Build/Intermediates/Callico.build/Debug-iphoneos/Callico.build/Objects-normal/arm64/Callico
ld: framework not found P3Foundation
clang: error: linker command failed with exit code 1 (use -v to see invocation)

** BUILD FAILED **

En el ejemplo anterior, puedes ver el error claramente: ld: framework not found P3Foundation. En este caso, el error es que los Framework Search Paths del proyecto no están configurados correctamente.

Ahora, toma en cuenta que no solamente un error en la configuración del proyecto, como en el ejemplo anterior, pueden causar el error Linker command failed with exit code 1. Cada caso es particular, y todos se resuelven de diferente manera, pero este comando te dará la respuesta exacta que estás buscando.

Ahora ya conoces una manera fácil de quitarte la benda de los ojos y conocer el verdadero error que Xcode no te quiso mostrar.

DEJA UNA RESPUESTA

Please enter your comment!
Please enter your name here