在IPA / Archive中检查并删除不支持的体系结构

问题:

在将应用程序提交到App Store时,会报告以下错误:

Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]

问题:

  1. 如何解决上述错误?

  2. 如何检查存档或IPA使用的体系结构?

  3. 如何确保Release归档文件不包含x86_64i386 (模拟器体系结构)。

    • 是否只能通过脚本或者在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/