问题
提审上传 ipa 包的时候,遇到报错:
ERROR ITMS-90668: "Invalid Bundle Executable.
The executable file 'XXX.app/Frameworks/MXFFI.framework/MXFFI' contains incomplete bitcode.
To compile binaries with complete bitcode, open Xcode and choose Archive in the Product menu."
报错的 framework 是通过 pod 方式引入的。
是架构问题吗?如何查看ipa内的framework架构?
网上搜了下类似问题,比如这篇文章遇到的类似错误:
ERROR ITMS-90087:"Unsupported Architectures.
The executable for Demo.app/DemoSDK.framework contains unsupported architectures ‘[x86_64,i386]]."
但注意这里的差异,我遇到的错误是 contains incomplete bitcode ,而上面文章的是 contains unsupported architectures ,所以应该不是架构问题。但是防止遗漏,排查架构是否有问题:
- 解开
ipa包,解包方案:ipa所在目录打开终端,输入
tar xf xxxxxx.ipa
注意命令前面的 tar xf 是固定的,后面加上 ipa 全称即可。
-
解开后,同级目录下会生成
Payload文件夹,打开Payload文件夹。 -
看到
XXX.app,右键“显示包内容” -
进入后再找到
Frameworks目录,双击进入 -
即可找到
MXFFI.framework,双击进入 -
存有
MXFFI二进制文件的同级目录下打开终端,输入命令lipo -info MXFFI
结果是:
➜ MXFFI.framework lipo -info MXFFI
Architectures in the fat file: MXFFI are: arm64
架构是 arm64 没有问题。
bitcode验证,如何查看ipa内framework是否开启bitcode?
看到 bitcode,猜测是工程编译选项 ENABLE_BITCODE 的问题:
这篇文章也讲到了 90668 这个问题,继续终端输入命令:
otool -arch arm64 -l ./MXFFI | grep __LLVM | wc -l
注意这个命令的
arm64,先通过前文方法确认你的 framework 架构,如果是armv7,那命令也要把arm64改成armv7。-l后面的./MXFFI就是二进制文件所在路径。
结果是:
➜ MXFFI.framework otool -arch arm64 -l ./MXFFI | grep __LLVM | wc -l
2
结果是非0,表示 ENABLE_BITCODE 为 YES 。
查看编译工程,发现的确是这个问题:
把 ENABLE_BITCODE 改为 NO ,再次生成 framework ,更新 pod ,打包 ipa 。
再次查看结果
➜ MXFFI.framework otool -arch arm64 -l ./MXFFI | grep __LLVM | wc -l
0
结果为0。bitcode已关闭。
提审后,问题解决。