在IPA / Archive中检查并删除不支持的体系结构
问题:
在将应用程序提交到App Store时,会报告以下错误:
Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]
问题:
-
如何解决上述错误?
-
如何检查存档或IPA使用的体系结构?
-
如何确保
Release
归档文件不包含x86_64
和i386
(模拟器体系结构)。- 是否只能通过脚本或者在
Build Settings
还是在哪里?
- 是否只能通过脚本或者在
如果应用程序在发行期间包含模拟器架构,Apple已开始抱怨。
如何解决上述错误?
方案:
在Project target的运行脚本中添加以下代码,这将在构建过程中从您的应用程序中删除模拟器体系结构(x86_64和i386):
贝壳 :
/bin/sh
代码:
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
方案:
还有一个解决方案 ,如果你只想做一次。 但要小心,但在执行以下步骤后,您将无法在模拟器上运行应用程序。 在Testflight / App-store上部署应用程序之前完成。
从终端进入项目的ProjectFramework.framework文件夹。 运行以下命令:
lipo -remove i386 ProjectFramework_SDK -o ProjectFramework_SDK lipo -remove x86_64 ProjectFramework_SDK -o ProjectFramework_SDK
从框架检查架构?
$ lipo -info PathToProject/ProjectName.framework/ProjectName
输出将是: →胖文件中的架构:ProjectName是:i386 x86_64 armv7 arm64
参考。 doc: http : //ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/