Inhaltsverzeichnis

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 Script1) 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:2)

Select Project in left panel→Mid Panel click Build Phases+New Run Script Phase

2) Quelle: http://www.runscriptbuildphase.com/ (14. September 2017)