Saltar al contenido

Xcode 12.3: compilación para iOS Simulator, pero el marco integrado y vinculado se creó para iOS + iOS Simulator

Hola, tenemos la respuesta a lo que buscabas, has scroll y la obtendrás más abajo.

Solución:

Me temo que este es realmente el error correcto y que el marco no debería contener código iOS y iOS Simulator al mismo tiempo. Apple intenta obligarnos a usar XCFrameworks para este propósito. Lo comenzaron en XCode 11 y simplemente endurecieron las restricciones.

La única forma correcta de resolver esto es reconstruir el marco como un XCFramework. Que es fácil de hacer:

$ xcrun xcodebuild -create-xcframework 
    -framework /path/to/ios.framework 
    -framework /path/to/sim.framework 
    -output combined.xcframework

Puede comenzar con una combinación .framework haga dos copias del marco y use lipo para eliminar los segmentos del binario que están asociados con un SDK diferente.

Basado en la respuesta original de Apple aquí.

Mi caso particular es que recibo este error al usar Rome, que produce estos marcos (una posible solución está aquí). Además, hay mucha lucha en el lado de Cartago.

Espero que ayude 😉

Debe excluir las arquitecturas de los dispositivos mientras construye para el simulador y mientras construye para el dispositivo debe excluir las arquitecturas del simulador.

Para hacer eso, navegue a Build Settings de tu proyecto -> Excluded Architectures -> Seleccione la configuración (Depurar/Liberar/Etc…) -> Toque + -> Any iOS Simulator SDK -> Agregar arm64, arm64e, armv7

Del mismo modo, agregue x86_64, i386 a Any iOS SDK.

ingrese la descripción de la imagen aquí

PD: puede verificar todas las arquitecturas que están presentes en su marco ejecutando file o lipo -info .

Ex. file /Users/srikanth.kv/MyProject/MyLibrary.framework/MyLibrary

Tengo un marco con binario universal que contiene x86_64 y arm64 con el que me fusiono lipo con un script personalizado en el momento de la compilación del marco. Encontré este mismo problema para XCode 12.3 y he creado una solución por ahora. Con suerte, esto se solucionará rápidamente en XCode, pero hasta entonces, una solución rápida sería reducir las arquitecturas y usar el marco que necesita. EDITAR: vea mi respuesta aquí sobre cómo comenzar a producir .xcframeworks, que es la solución a largo plazo para los autores de marcos

Por ejemplo, supongamos que estoy en una terminal en el directorio de trabajo donde mi marco universal some_framework.framework es. Si quiero ejecutar en un dispositivo físico real, ejecuto el siguiente comando:

lipo -thin arm64 some_framework.framework/some_framework -output some_framework

Con el comando anterior, extrae el arm64 binario. Luego, reemplace el actual some_framework.framework/some_framework con los recién generados arm64 solo binario

mv some_framework some_framework.framework

Si tiene un marco universal construido solo a partir de fuentes de Objective-C, su trabajo está hecho. Pero si también tiene un código Swift, entonces deberá actualizar some_framework.framework/Modules/some_framework.swiftmodule para que no contenga ninguna referencia a arquitecturas que no sean arm64.

Seguiría un proceso similar para ejecutar en el simulador excepto que necesita x86_64. Actualmente estoy manteniendo dos versiones de mi marco hasta que esto se solucione. Cada vez que cambio entre el simulador y el dispositivo, simplemente cambio qué marco está en mi proyecto.

Sección de Reseñas y Valoraciones

No se te olvide dar visibilidad a esta división si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *