上传App Store 报错 ERROR ITMS-90087: "Unsupported Architectures 解决办法 - 图1
上传App Store 报错 ERROR ITMS-90087: "Unsupported Architectures 解决办法 - 图2

报这个错一般是由于自己制作的framework 包含了x86_64, i386 架构,这个是苹果不允许的。

解决办法:剔除掉x86_64, i386这两个架构

工程中添加shell脚本来解决

脚本如下:

  1. APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
  2. # This script loops through the frameworks embedded in the application and
  3. # removes unused architectures.
  4. # "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
  5. find "$APP_PATH" -name '[CocoaLumberjack].framework' -type d | while read -r
  6. do
  7. FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
  8. FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
  9. echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
  10. EXTRACTED_ARCHS=()
  11. for ARCH in $ARCHS
  12. do
  13. echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
  14. lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
  15. EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
  16. done
  17. echo "Merging extracted architectures: ${ARCHS}"
  18. lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
  19. rm "${EXTRACTED_ARCHS[@]}"
  20. echo "Replacing original executable with thinned version"
  21. rm "$FRAMEWORK_EXECUTABLE_PATH"
  22. mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
  23. done

还要注意一点,这样的话可能会报很多错:

这样的话需要修改一个地方就可以了,因为不是全部的sdk 都需要,只修改对应的就可以了。

$APP_PATH” -name ‘*.framework’ -type d | while read -r FRAMEWORK

“$APP_PATH” -name ‘[frameworkname].framework’ -type d | while read -r

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

http://stackoverflow.com/questions/35240330/errors-building-xcode-project-after-adding-in-run-script-fatal-error-lipo-inpu

通过终端来去除

有些第三方提供商为了方便开发者使用,经常把 i386 x86_64 armv7 arm64 等几个平台合并到一起,但是上传App Store的时候需要将i386 x86_64 两个平台删除后,才能正常审核。

先查看一下framework 包含的平台:

  1. lipo -info XXXX.framework/XXXX
  2. 或者
  3. cd XXXX.framework
  4. lipo -info XXXX
  5. Architectures in the fat file: XXXX.framework/Realm are: i386 x86_64 armv7 arm64

执行以下命令进行剔除:

  1. mkdir ./bak
  2. cp -r XXXX.framework ./bak
  3. lipo XXXX.framework/XXXX -thin armv7 -output XXXX_armv7
  4. lipo XXXX.framework/XXXX -thin arm64 -output XXXX_arm64
  5. lipo -create XXXX_armv7 XXXX_arm64 -output XXXX
  6. mv XXXX XXXX.framework/

然后可以用lipo -info 查看一下这样就得到了去除i386x86_64 的framework 了。
参考文档:点击打开链接

http://blog.csdn.net/liyun123gx/article/details/50774485