[[en:dev:swift:itms90087|English Version]]
====== Application Loader Error ITMS-90087 ======
Beim Programmieren einer Swift-Anwendung für iOS kann es vorkommen, dass man beim Upload zu Apple auf folgenden Fehler stößt
ERROR ITMS-90087: "Unsupported Architectures. The executable for XXXXX/Frameworks/SomeFramework.framework contains unsupported architectures '[x86_64, i386]’."
===== Build mit Objective-C-Libs für Apple archivieren =====
Dies passiert, wenn man eine Objective-C-Library in sein Projekt einbaut. Diese wird von XCode als x86_64, i386 und ARM kompiliert. Für den Emulator und dem direkten Ausführen auf dem iPhone ist dies kein Problem. Wenn man jedoch seinen Build über das Menü **Build->Archive** zusammenpackt und dann über **XCode->Open Developer Tool->Application Loader** zu Apple überträgt, kommt obige Fehlermeldung.
===== Skript zum Löschen überflüssiger Binarys =====
Die Lösung für das Problem ist, ein Script((Quelle: https://stackoverflow.com/questions/30547283/submit-to-app-store-issues-unsupported-architecture-x86 (14. September 2017) )) in seinen Buildprozess einzubauen, was die überflüssigen Binarys löscht. So landen diese dann auch nicht im Archiv und Apple meckert nicht mehr.
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"
if [ ! -f "${FRAMEWORK_EXECUTABLE_PATH}" ]; then
continue
fi
if xcrun lipo -info "${FRAMEWORK_EXECUTABLE_PATH}" | grep --silent "Non-fat"; then
echo "Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME"
continue
fi
echo "Thinning framework $FRAMEWORK_EXECUTABLE_NAME"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
xcrun lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
xcrun 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
===== Einbinden eines eigenen Buildskripts in den Buildprozess =====
Das obige Skript wird über folgenden Klickpfad in XCode eingebunden:((Quelle: http://www.runscriptbuildphase.com/ (14. September 2017) ))
**Select Project** in left panel->Mid Panel click **Build Phases**->**+**->**New Run Script Phase**