Así que estoy tratando de utilizar la API de Shopify. Cuando archivo la aplicación y validarlo entonces no hay problemas, pero cuando lo envío a la tienda de aplicaciones entonces me da los siguientes problemas.
El problema es que el marco Buy contiene una compilación tanto para el simulador (x86_64) como para los dispositivos reales (ARM).
Por supuesto, no está permitido enviar a la App Store un binario para una arquitectura no soportada, por lo que la solución es "eliminar manualmente" las arquitecturas innecesarias del binario final, antes de enviarlo.
A Daniel Kennett se le ocurrió una buena solución y proporciona este script para añadir a la fase de compilación:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
Lo usé y funcionó perfectamente.
EDIT: asegúrese de mirar el script modificado publicado por Varrry, ya que éste tiene algunos problemas menores.
Si utiliza Carthage, es posible que experimente este problema porque el proyecto es:
carthage copy-frameworks
.Esta acción filtra los frameworks a una lista de arquitecturas válidas (code).
De los pasos de Carthage building for iOS:
En la pestaña de configuración "Build Phases" de tus objetivos de aplicación, haz clic en el icono icono "+" y selecciona "Nueva fase de script de ejecución". Cree una secuencia de comandos de ejecución en que especifique su shell (ej: bin/sh), añada el siguiente contenido al área de script debajo del shell:
/usr/local/bin/carthage copy-frameworks
. > y añade las rutas a los frameworks que quieras usar en "Input Files", por ejemplo:
$(SRCROOT)/Carthage/Build/iOS/Box.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
> Este script soluciona un error de envío a la App Store provocado por los binarios universales. binarios universales y asegura que los archivos y dSYMs necesarios relacionados con bitcode se copian al archivar.