Need help with the integration?

Type a word or a phrase to start browsing through articles.

iOS: ERROR ITMS-90087: Unsupported Architectures.



ERROR ITMS-90087: "Unsupported Architectures. The executable for Microblink/MicroBlink.framework contains unsupported architectures '[x86_64, i386]'." 


Apple will stop supporting Apps that have only 32-bit architecture. In other words, apps need to have 64-bit slices. Our framework actually has:
- arm7 32 bit - for iPhone 4 and 4s
- arm7s 32 bit - for iPhone 5
- arm64 54 bit - for iPhone 5S and newer
- x86 - for simulator
- x86_64 for the 64-bit simulator.


Microblink.framework is a dynamic framework which contains slices for all architectures device and simulator. If you intend to extract .ipa file for ad hoc distribution, you'll need to preprocess the framework to remove simulator architectures.

The ideal solution is to add a build phase after embed frameworks build phase, which strips unused slices from embedded frameworks.

We have an article on GitHub on how to remove the unsupported architectures when submitting your application to the App Store here.


SOLUTION 2 (suggested by AlibekJ):

cd plugins/blinkid-cordova/src/ios/Microblink.framework
lipo -info Microblink
lipo -remove x86_64 Microblink -o MicroBlink_some_archs
lipo -remove i386 MicroBlink_some_archs -o MicroBlink  
rm MicroBlink_some_archs 


SOLUTION 3 (suggested by zakaria09):

--> In Xcode go to Build Phases tab and press the plus icon and select New Run Script Phase.

--> Go to this link and copy and paste the script:


# 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
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"


    for ARCH in $ARCHS
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"

    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"


--> Tick the box to Run Script Only When Installing.

--> Once your ready to distribute that error will disappear.


Was this article helpful?
2 out of 2 found this helpful
Have more questions? Submit a request


  • Avatar
    Kent Johnson

    it should be lipo -remove instead of lipo -extract

    Also note that lipo -remove has to be done once for each architecture to remove. lipo does not modify the input file, it only produces a file so you have to run lipo -remove once for x86_64 and i386.

    $ cd plugins/com.microblink.BlinkIdScanner/src/ios/blinkid-ios/Microblink.framework
    $ mv MicroBlink MicroBlink_all_archs
    $ lipo -remove x86_64 MicroBlink_all_archs -o MicroBlink_some_archs
    $ lipo -remove i386 MicroBlink_some_archs -o MicroBlink
    $ rm MicroBlink_all_archs MicroBlink_some_archs