Así que estoy tratando de usar la API de Shopify. Cuando archivo la aplicación y la valido, no hay problemas, pero cuando la envío a la tienda de aplicaciones, me da los siguientes problemas.
- ERROR ITMS-90087: "Arquitectura no compatible. Su ejecutable contiene arquitectura no compatible '[x86_64, i386]'".
- ERROR ITMS-90209: "Alineación de segmento no válida. El binario de la aplicación en SJAPP.app/Frameworks/Buy.framework/Buy no tiene la alineación de segmento adecuada. Intente reconstruir la aplicación con la última versión de Xcode". (Ya estoy usando la última versión).
- ERROR ITMS-90125: "El binario no es válido. La información de cifrado en el comando de carga LC_ENCRYPTION_INFO falta o no es válida, o el binario ya está cifrado. Parece que este binario no se ha creado con Apple Linker".
- ADVERTENCIA ITMS-90080: "La carga útil ejecutable /..../ Buy.framework no es un ejecutable independiente de la posición. Asegúrese de que su configuración de compilación esté configurada para crear ejecutables PIE".
Respuestas:
El problema es que el marco de compra contiene una compilación tanto para el simulador (x86_64) como para los dispositivos reales (ARM).
Por supuesto, no puede enviar un archivo binario a la App Store para una arquitectura no compatible, por lo que la solución es eliminar "manualmente" las arquitecturas innecesarias del archivo binario final, antes de enviarlo.
Daniel Kennett encontró una buena solución y proporciona este script para agregar a la fase de construcción:
Lo usé y funcionó perfectamente.
EDITAR: asegúrese de mirar el script modificado publicado por Varrry, ya que este tiene algunos problemas menores.
fuente
La respuesta dada por pAkY88 funciona, pero enfrenté el mismo problema que Mario A Guzman en https://stackoverflow.com/a/35240555/5272316 : una vez que cortamos las arquitecturas no utilizadas, ya no podemos ejecutar el script ya que intenta eliminar segmentos no existentes, porque xcode no vuelve a incrustar binarios cada vez. La idea era: simplemente elimine los segmentos i386 y x86_64 al compilar para el archivo comprimido, así que modifiqué el script:
Este script simplemente elimina los segmentos i386 y x86_64 del binario gordo (si existen) si no se ejecuta para el simulador (eso significa que la carpeta de destino no es como "Debug-iphonesimulator").
Lo siento, no estoy familiarizado con los scripts de shell, por lo que puede ser que alguien pueda escribirlo de una manera más elegante. Pero funciona)
fuente
case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esac
y funcionó de maravilla.TARGET -> Build Phases -> [CP] Embedded Pods Frameworks
pero no funciona y todavía he subido a iTunesConnect errores. ¿Cómo ejecutar este script?Si está utilizando Carthage , puede experimentar este problema porque el proyecto es:
carthage copy-frameworks
fase de construcción.Esta acción filtra los marcos a una lista de arquitecturas válidas (código) .
Configurar la fase de compilación de marcos de copia
Desde el edificio Carthage para los pasos de iOS :
fuente
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
hizo el trabajoResolví el error ITMS-90080 eliminando un marco (el excelente SVProgressHUD) de la sección Binarios incrustados (objetivo Xcode -> pestaña General).
fuente
Si está utilizando
Carthage
asegúrese de queEmbed Frameworks
Build Step
esté antes deCarthage
copy-frameworks
En algunos casos inusuales (ejemplo: marco Lottie-iOS):
lo tendrá simplemente en "Biblioteca de enlaces" como de costumbre.
Sin embargo tienes que también debe agregarlo explícitamente en "Embed Frameworks" (aunque parezca inútil, ya que funciona perfectamente cuando solo lo tiene en "Embed Frameworks"),
y ponerlo en marcos de copia
y asegurar que copy-frameworks esté después de "Embed Frameworks"
fuente
Elimine [x86_64, i386] del marco utilizando el siguiente paso. [x86_64, i386] se usa para el simulador.
Abierto
Terminal
abra la ruta de arrastre de su proyecto del marco respectivo a la Terminal
ejemplo:
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
configura tu nombre de Framework en el siguiente comando y ejecuta
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
fuente
Agregaré mis 2 centavos aquí (de una manera menos aterradora :-). He encontrado una gran cantidad de bibliotecas gordas de proveedores que (por alguna razón) no funcionan de la manera normal al agregarlas al
Frameworks
directorio como lo documenta Apple. La única forma en que hemos podido hacer que funcionen es tirando a la.framekwork
derecha en el directorio del proyecto y vinculandoEmbedded Frameworks
yLink Binary with Libraries
manualmente en la Configuración de compilación. Sin embargo, esto parece haber funcionado sin ningún problema, ya que con cualquier biblioteca gorda vienen con las arquitecturas de Simulator extrañasi386
yx86_64
junto con lasarm
arquitecturas.Una forma rápida de verificar las arquitecturas en la biblioteca gorda es
Lo que debería escupir una salida como esta
Esto confirma que necesitará "recortar la grasa" (a saber,
i386
&x86_64
) de su marco antes de la carga de iTunesConnect Archival, que no permite estas arquitecturas (ya que no son compatibles con iOS).Ahora, todas las respuestas (o al menos algunas de las respuestas) aquí proporcionan estos maravillosos scripts de ejecución que estoy seguro que funcionan muy bien, pero solo si su Framework reside en el
Frameworks
directorio. Ahora, a menos que seas un adicto al script de shell, esos scripts sin modificaciones no funcionarán para el escenario que explico anteriormente. Sin embargo, hay una manera muy simple de deshacerse de las arquitecturasi386
&x86_64
desde el marco.Abra la terminal en el directorio de su proyecto.
Cambiar el directorio directamente en el
.framekwork
, comocd YourProjectDir/YourProject/YourLibrary.framework
Ejecute la serie de comandos como se muestra a continuación:
Algunas cosas a tener en cuenta aquí:
lipo -remove
se debe hacer una vez para que cada arquitectura se elimine.lipo
no modifica el archivo de entrada, solo produce un archivo, por lo que debe ejecutarlolipo -remove
una vez parax86_64
yi386
. Los comandos anteriores simplemente hacen eso al primero renombrar el ejecutable y luego eventualmente eliminar los arcos deseados, y luego limpiar los archivos sobrantes. Y eso es todo, ahora debería ver una marca de verificación verde en la carga del archivo del cargador de aplicaciones en iTunesConnect.Cosas a tener en cuenta : los pasos anteriores solo se deben realizar durante la compilación de producción, ya
.framework
que se eliminarán de las arquitecturas del simulador, las compilaciones en simuladores dejarán de funcionar (lo que se espera). En el entorno de desarrollo, no debería haber necesidad de quitar las arquitecturas del.framework
archivo ya que desea poder realizar pruebas tanto en Simulator como en un dispositivo físico. Si su biblioteca gorda reside en laFrameworks
carpeta del proyecto, mire la respuesta aceptada.fuente
Tuve el mismo problema incluso después de agregar el script y actualizar el marco varias veces.
Asegúrese de que en xCode la secuencia de comandos se agrega al final, después de la inserción. Creo que accidentalmente moví el script antes del marco incrustado.
Nota: tengo xCode 9.1
fuente
Solo tiene que eliminar el marco de los binarios incrustados y simplemente agregarlo a los marcos vinculados y las bibliotecas.
Consulte la siguiente captura de pantalla;
fuente
Gracias a todas las respuestas anteriores. Aquí hay un script que funciona con swift 4.2 y 5 . Reemplace la cadena Your_Framework_Name con el nombre original de su Framework.
fuente
Este problema se resolvió para mí modificando ligeramente el script de ejecución de la respuesta de pAky88 y ejecutándolo después de incrustar marcos. También asegúrese de desmarcar la casilla "Ejecutar script solo al instalar".
fuente
Eliminé las arquitecturas i386 y x64_86 de Configuración de compilación - Arquitecturas válidas - Lanzamiento, y todo funcionó bien.
Ahora, el único problema sería que no puede ejecutar una compilación RELEASE con fines de prueba en un SIMULADOR . Pero tan fácilmente como eliminó los arcos, puede agregarlos nuevamente si lo desea.
fuente
la solución simple que funcionó para mí fue
¡hecho!
fuente
Este error (ITMS-90240) también puede ser causado por una biblioteca estática (.a). Aquí hay un guión para despojar el exceso de arquitecturas. En Xcode, agregue esto a Target> BuildPhases> Haga clic en + y seleccione Ejecutar script. Luego pegue esto en el cuadro de secuencia de comandos.
El script busca archivos .a, verifica si contiene una arquitectura ofensiva, y luego si crea un nuevo archivo .a sin esa arquitectura.
Para macOS:
Para iOS:
fuente
Tuve el mismo problema Incluso no funcionaba después de agregar el Run Script dado. Era un problema relacionado con Xcode. Estaba usando la versión 9.0 de Xcode pero la última versión era la 9.2.
Así que instalé el último Xcode (9.2) y funcionó.
fuente
Su marco contiene ambos
ARM
yx86
código, que le permite usarlo en un dispositivo o en el simulador. Si tiene la intención de enviar su aplicación a la App Store, ejecute el siguiente script para quitar el código inactivo del binario.1. Seleccione su objetivo en el Navegador de proyectos y haga clic en Crear fases en la parte superior del editor de proyectos.
2.En el menú Editor, seleccione Agregar fase de compilación, luego Agregar fase de compilación de ejecución de script (o haga clic en el botón + en la esquina superior izquierda del editor de fases de compilación).
3. Expanda el triángulo de revelación junto a la nueva fase de compilación Ejecutar script que se acaba de agregar. En el cuadro del editor de script, pegue lo siguiente: bash
fuente
Aquí hay un script que usé para eliminar específicamente la arquitectura de un solo marco del archivo ejecutable.
Agregue este script a sus proyectos "Fases de construcción" de su objetivo de proyecto. Asegúrese de marcar la casilla: "Ejecutar script solo al instalar"
fuente