Check and Remove Unsupported Architecture [x86_64, i386] in IPA / Archive Check and Remove Unsupported Architecture [x86_64, i386] in IPA / Archive xcode xcode

Check and Remove Unsupported Architecture [x86_64, i386] in IPA / Archive


Apple has started complaining if app contains simulator architectures during distribution.

How can the above error be resolved ?

Solution :

Add below code in run script of Project target, this remove the simulator architecture (x86_64 and i386) from your app on building process:

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 FRAMEWORKdoFRAMEWORK_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 $ARCHSdoecho "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")doneecho "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 :

There one more solution, if you wish to do it only once.But be careful though as after doing following steps, you will not be able to run app on simulator. Do it just before deploying the app on Testflight/App-store.

Go inside the your ProjectFramework.framework folder of your project from terminal. Run following commands:

lipo -remove i386 ProjectFramework_SDK -o ProjectFramework_SDK lipo -remove x86_64 ProjectFramework_SDK -o ProjectFramework_SDK

Check the architectures from framework?

$ lipo -info PathToProject/ProjectName.framework/ProjectName

Output will be :→ Architectures in the fat file: ProjectName are: i386 x86_64 armv7 arm64

Ref. doc:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/


For custom created Dynamic Framework

  1. Open Terminal

  2. Open your project drag path of respective framework to Terminal

    For example, cd /Users/mahipal/Desktop/masterTest/Alamofire.framework

  3. Set your Framework name in below command and run

    lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire


For Run Script under Build phases, add following steps to the Run Script to remove x86_64 and/or i386:

cd "${ARTIFACTS_FOLDER}"/FrameworkName.frameworklipo -remove x86_64 FrameworkName -o FrameworkNamelipo -remove i386 FrameworkName -o FrameworkName

Can be combined for removing multiple architectures as:

lipo -remove x86_64 FrameworkName -o FrameworkName && lipo -remove i386 FrameworkName -o FrameworkName