Lors de la soumission de l'application sur l'App Store, l'erreur suivante est signalée:
Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]
Comment l'erreur ci-dessus peut-elle être résolue?
Comment puis-je vérifier les architectures utilisées par l'archive ou l'IPA?
Comment puis-je m'assurer que l'archive Release
n'inclut pas x86_64
et i386
_ (architectures de simulateur).
Build Settings
ou bien où?Apple a commencé à se plaindre si l'application contient des architectures de simulateur pendant la distribution.
Comment l'erreur ci-dessus peut-elle être résolue?
Solution:
Ajoutez ci-dessous le code dans le script d’exécution de Project target, cela supprime l’architecture du simulateur (x86_64 et i386) de votre application lors du processus de construction:
Shell:
/bin/sh
Code:
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
Solution:
Il y a encore une solution , si vous ne souhaitez le faire qu’une seule fois. Mais faites attention, car après avoir suivi les étapes suivantes, vous ne pourrez pas exécuter d’application sur simulateur. Faites-le juste avant de déployer l'application sur Testflight/App-store.
Accédez au dossier ProjectFramework.framework de votre projet à partir du terminal. Exécutez les commandes suivantes:
lipo -remove i386 ProjectFramework_SDK -o ProjectFramework_SDK
lipo -remove x86_64 ProjectFramework_SDK -o ProjectFramework_SDK
Vérifier les architectures du framework?
$ lipo -info PathToProject/ProjectName.framework/ProjectName
La sortie sera: → Les architectures du fichier fat: ProjectName sont: i386 x86_64 armv7 arm64
Réf. doc: http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/
Pour le cadre dynamique créé sur mesure
Terminal ouvert
Ouvrez le chemin de glissement de votre projet du framework respectif vers Terminal
Par exemple, cd /Users/mahipal/Desktop/masterTest/Alamofire.framework
Définissez votre nom de cadre dans la commande ci-dessous et lancez
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
En utilisant le script de nikdange_me, j'ai eu:
error: exportArchive: ipatool failed with an exception: #<CmdSpec::NonZeroExcitException: ... >
error: Framework not found in dylib search path
Alors je l'ai modifié et utilisé lipo -remove
au lieu de lipo -extract
et lipo -create
qui a résolu mon problème:
# This script loops through the frameworks embedded in the application
# and removes unused architectures.
find "${TARGET_BUILD_DIR}/${WRAPPER_NAME}" -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"
for Arch in $(lipo -archs $FRAMEWORK_EXECUTABLE_PATH); do
if ! printf '%s\n' ${ARCHS[@]} | egrep -q "^$Arch$"; then
lipo -remove $Arch "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH"
fi
done
done