Reputation: 628
When I tried to create IPA file using Distribute APP option. It gave "IPA processing failed" error.
I have checked logs file: IDEDistribution.standard.log
file.
2019-08-06 18:36:52 +0000 warning: Configuration issue: platform iPhoneSimulator.platform doesn't have any non-simulator SDKs; ignoring it Scanning IPA... 2019-08-06 18:36:52 +0000 Assertion failed: Expected 4 archs in otool output: /var/folders/4t/rpjk7pd55t16jfrd32y98gf0lb2t68/T/IDEDistributionOptionThinning.~~~a4cZJc/Payload/demo.app/Frameworks/AppAuth.framework/AppAuth: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 23
3680 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS Load command 0
Upvotes: 49
Views: 47368
Reputation: 8568
Upvotes: -1
Reputation: 447
For those who try with M1 Chip (Silicon)
Quit Xcode completely (Close and Quit From the Menu Bar) and remove existing archived one.
Go to finder -> Applications
Right Click on Xcode and select "Get Info"
Check Rosetta
Try again opening Xcode
Upvotes: 4
Reputation: 691
I haven't updated my cocoapods for a while, fixed it by updating and re-installing the pods.
sudo gem install cocoapods
pod update
pod deintegrate
pod install
Upvotes: 0
Reputation: 5546
Having Bitcode enabled caused the issue in my case. Go to
Build Settings
-> Enable Bitcode
and set it to NO
.
Try archiving again and it should work.
Upvotes: 2
Reputation: 1809
My issue was that I had a single embedded binary framework.
I removed it from the project to update it. Which caused Xcode to delete the embed frameworks build phase (because there were no more frameworks to embed).
After adding the new version of our framework, the embed binaries phase was at the bottom of the build phase order. Which ended up being the reason it was failing.
I had to re-order embed frameworks before my run script to fix the problem.
Upvotes: 0
Reputation: 1022
In my case, app thinning was failing and the reason was my internal framework was depending Alamofire and it's binary was embedding and signing. Changing it's Embed option from Embed & Sign -> Do Not Embed solved my issue immediately.
In my opinion, all logic behind this issue is keep app bundle size lower as much as Apple can but embedding your frameworks increase this size. I think that's all App Thinning complains about. So, the general solution to this issue, check every external frameworks that can increase your app bundle. Especially, if you're using Carthage.
Upvotes: 1
Reputation: 1
Open Terminal
Open your project drag path of respective framework to Terminal For example.
cd /Users/xxxxx/Desktop/MyProject/ABC.framework
Set your Framework name in below command and run
lipo -remove i386 ABC -o ABC && lipo -remove x86_64 ABC -o ABC
Upvotes: -2
Reputation: 4467
1.uncheck "Rebuild from bitcode", 2.click next fast fast fast. (speed is also important.)
if not , it will show IPA processing failed.
Upvotes: 49
Reputation: 1452
I faced same issue.I have fix this issue used this script.
Please follow the same steps.
Build Phases -> plus button -> to create New Run Script Phase
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
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"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"
case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
echo "No need to remove archs"
;;
*)
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
echo "i386 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
echo "x86_64 architecture removed"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
fi
;;
esac
echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")
done
Upvotes: 58
Reputation: 509
To solve similar problem on my end I used the following:
Build Phases
Embed Frameworks
and Embed App Extensions
sections I've added Run script
with the following script: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
The script I took from here: https://medium.com/@maximbilan/ios-submission-unsupported-architectures-issues-733917a98cc3, credits goes to Daniel Kennet!
Also, be aware that this script could also cause compilation errors. In such case, here's the solution: Errors building Xcode Project after adding in Run Script fatal error: lipo: input file
On my end I also noticed that I have to turn off this script when compiling app locally (on development devices/simulator)
Hope that helps!
Upvotes: 14
Reputation: 1167
I found issue with SDWebImageMapKit
framework available with SDWebImage
. I just removed it and got success.
Upvotes: 0
Reputation: 194
You should check the Embed Frameworks
under Xcode > build
phases.
If your framework is introduced here, you can't use i386\x86_64
in your framework. Because the Embed Frameworks
are copied to the application. To control the size of the application, the frameworks in the Embed Frameworks
are required to be the most streamlined.
You can use Link Binary With Libraries
to introduce your framework, as described here: https://github.com/Carthage/Carthage/issues/1046
Note that you need to add a new Run Script and add your framework to it, or it will crash.
Upvotes: 17
Reputation: 89
We've solved this problem by setting Always Embed Swift Standard Libraries
to NO
in all frameworks, that are being used in our app.
Upvotes: 3
Reputation: 93
It seems that a dynamic library with i386 or x86_64 architecture is not allowed when archive in Xcode 11. And I fixed it by removing those architectures from the mentioned frameworks
Upvotes: 8