xip update mac instalar for app xcode cocoa swift compilation frameworks

update - xcode for free



Xcode 6.1: el archivo se creó para x86_64, que no es la arquitectura que se está vinculando(i386) (4)

Asegúrate de tener i386 y x86_64 listados en tus Arquitecturas en la configuración de Compilación para tu lib. Configure también Build Active Architecture Only explícitamente en No.

.framework un proyecto de marco Swift para utilidades / extensiones que compila y copia un archivo .framework en una ubicación dedicada en mi sistema. Quiero poder incluir este archivo en otros proyectos (Build Phases / Link Binary with Libraries). El proyecto marco es un proyecto tipo Cocoa Touch Framework (como se seleccionó del navegador de plantilla de proyecto Xcode 6.1).

Pero cuando intento compilar un proyecto que vincule el archivo de framework, recibo esta advertencia:

ld: advertencia: ignorando el archivo /Users/name/Projects/Xcode/Libs/swiftutils.framework/swiftutils, el archivo fue creado para x86_64 que no es la arquitectura que está siendo enlazada (i386): / Users / name / Projects / Xcode / Libs / swiftutils.framework / swiftutils

¿Hay algo que pueda hacer con el proyecto de marco para que sea válido para otros proyectos de iOS? Es confuso porque el proyecto marco es un proyecto de Cocoa Touch Framework que naturalmente debería funcionar con otros proyectos de Cocoa Touch (es decir, IOS), ¿no es así?


Me encontré con este problema y la solución actual eliminó el error original (es decir, no se pudo vincular a i386), pero luego Frameworks vinculados (como Alamofire) no se pudieron importar a mi proyecto. La siguiente solución solucionó este problema.

  1. En su Build Settings destino -> Architectures -> Valid Architectures , agregue el valor i386 .

  1. A continuación, elimine el contenido de la carpeta de datos derivados de su proyecto. El contenido de esta carpeta se genera durante el tiempo de compilación y se puede eliminar de forma segura y Xcode creará uno nuevo. Para eliminar esta carpeta en Xcode 8, vaya a File -> Project/Workspace Settings , haga clic en la flecha gris para abrir la ubicación de la carpeta en Finder y elimine los contenidos.

  2. Limpiar y reconstruir

  3. Si la compilación sigue fallando, verifique en el navegador de incidencias algo que diga Update to recommended settings . Haz clic y vuelve a intentarlo.
    Si no ve esa opción, cambie Build Active Architecture Only a Yes en la configuración de compilación. Esto ralentiza los tiempos de construcción, lo que puede ser frustrante cuando se cambia entre diferentes dispositivos con frecuencia, sin embargo, puede ser necesario.


Si bien la respuesta aceptada ha resuelto el problema, aquí hay un poco más, ya que los problemas se refieren a la arquitectura, literalmente a los archivos binarios.

1. Arquitectura en iOS

armv64: iPhoneX, iPhone 5s-8, iPad Air - iPad Pro

armv7: iPhone3Gs-5c, iPad WIFI (4ta generación)

armv6: iPhone - iPhone3G

lo anterior si para dispositivos reales

i386: simulador de 32 bits

x86_64: simulador de 64 bits

la lista anterior es compatible con versiones anteriores, lo que significa que iPhoneX también se puede ejecutar con armv6, y simplemente no puede utilizar completamente las funciones de armv64.

Puede encontrar más información sobre las arquitecturas de iOS aquí: https://developer.apple.com/library/content/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html

2. ¿Qué es construir arquitectura activa solamente?

Si se selecciona "Sí", solo creará su infraestructura para el "dispositivo seleccionado", ya sea en dispositivos reales (armv) o simulador (x86_64 o i386). Para "No", construirá su marco a su lista de "Arquitecturas válidas"

Por defecto, en modo de depuración, es "Sí"; y en la versión más, es "No", lo que puede ahorrar tiempo de compilación en modo de depuración y garantizar que su marco de proyecto de lanzamiento se ejecute en todas las arquitecturas que haya especificado.

Es por eso que la respuesta aceptada funcionó forzando al framework a construir para todas las arquitecturas; sin embargo, al leer más sabrá qué hay detrás y definitivamente puede ahorrar tiempo en la compilación de su framework. Por supuesto, más control en ti también.

Por lo tanto, si está trabajando en un marco y desea importar a otro proyecto, si compila el marco con Construir arquitectura activa solo "Sí" con el simulador (i386 o x86_64) , y luego lo importa a su proyecto con Crear arquitectura activa solamente "Sí" con un dispositivo real (armv) , encontrará este error.

Mirando la descripción del error:

El archivo fue creado para x86_64, que no es la arquitectura que está siendo enlazada ( i386 ), implicará que usted construirá su marco en el simulador de 64 bits y su proyecto de fusión se compilará con un simulador de 32 bits.

mientras que uno más común sería:

El archivo de framework se construyó para x86_64, que no es la arquitectura que está siendo enlazada ( arm64 ): lo que implica que su framework está construido en simulador mientras que su proyecto combinado se compila con un dispositivo real.

3. Extrayendo el marco

Una práctica común sería hacer clic derecho en el framework y seleccionar Show In Finder , mientras que la mayoría de los desarrolladores mantienen el Finder abierto, y el framework recién compilado reemplazará el antiguo, sin cerrar Finder y volver a abrir. Sí, es correcto, pero si cambió el dispositivo de destino de compilación en el medio, los marcos generarán diferentes carpetas . A veces crees que has compilado tu marco pero de hecho está en otra carpeta. Mis sugerencias siempre serán seleccionar Mostrar en el buscador para evitar que el marco que importa no sea el más reciente.

Las dos carpetas diferentes: Debug-iphoneos y Debug-iphonesimulator


También encontré que si está utilizando frameworks a través de cocoapods como yo, tuve que ir al proyecto Pods, y aplicar soluciones de @dogsgod y @darksinge para cada objetivo de framework en el proyecto Pods. Es decir, tuve que desactivar la compilación solo para arquitecturas activas y agregar X86_64 e i386 en arquitecturas válidas.