2017-03-07 121 views
8

问题:

虽然提交的应用程序在App Store中报告以下错误:检查和IPA /存档删除不支持的架构[x86_64的,I386]

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

问题:

  1. 如何解决上述错误?

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

  3. 如何确保Release存档不包括x86_64i386(模拟器体系结构)。

    • 只能通过脚本或者在Build Settings或其他地方有设置吗?
+1

去建立设置 - >为“结构”进行搜索,你可以在那里检查“架构”选项卡,通常默认情况下它必须是armv7,arm64架构,请检查哪一个显示给你 –

+1

此外,有时上述错误是由于不适当的构建,请清理,然后建立,然后archieve和上传(不要忘记清理,然后建立)。让我们再试一次..可能你会以这种方式获得成功 –

+0

我想问题是,一些使用的框架包含x86_64和i386体系结构。所以必须手动删除它。 – user1046037

回答

25

苹果已经开始抱怨,如果应用程序分发中包含模拟器架构。

如何解决上述错误?

解决方案:

添加以下代码项目目标的运行脚本,这从应用中删除模拟器架构下(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 

输出将是: →架构FAT文件:项目名是: 的i386 x86_64的ARMv7的arm64

参考。 DOC: http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

+0

谢谢,在http://stackoverflow.com/questions/30547283/submit-to-app-store-issues注意到相同的解决方案 – user1046037

+0

是的,当然,你可以完全回答它。如果代码是从不同的地方引用的,那么提供到引用的链接将会很好,这样他们就可以获得贷记。 – user1046037

+0

如何从IPA中找到不是来自框架的架构?此外,如果代码是从其他地方/ stackoverflow的答案引用,请提供原始链接,而不是代码 – user1046037

4

刚:

  1. 下载script文件(&拖动到Xcode中)

  2. 的Xcode - >构建阶段 - >运行脚本(部分) - >加+

  3. Paste脚本文件路径

  4. 构建

enter image description here

+0

脚本无法正常工作,但是,这些带有nikdange_me脚本的图片通过scanbot sdk解决了我的问题 –

相关问题