记录一次做iOS APP上传的时候遇到一个 error , ERROR ITMS-90085: “No architectures in the binary. Lipo failed to detect any
当初遇到这个问题一脸的懵B啊,根本不知道什么原因啊。。。。
然后就就到Google 上查啊,看了说感觉就像没有一样。
大部分的主要原因说的都是由于SDK 架构的问题导致的。一般的问题都说集中在SDK的瘦身的问题。
我们项目工程里面的第三方SDK也是通过脚本做一个Slimmed的。最新添加的SDK都是在别的其他的project里面都是使用过,所以这个SDK的project是没有问题的,以及导入方式。
因为这个项目将近2年没有更新,这个就是让人很头疼啊,也不知道原本是不是OK的。
这个主要的更新,cocoapods 里面的一些firebase 第三方更新,然后就是项目中手动引用的SDK的更新7 + 3 的SDK的更新。
1:主要原因对这个这个代码管理不熟悉所以不知道如何 roll back 到上个上次没有提交code,所以在遇到问题的时候无法确定是那一步出现的问题!!!
2:还有这个问题解决麻烦的原因,这个问题只有在你上传的到App Store 上才会出现。这样很难有效快速的去验证这个问题有没有修复-(坑爹的)还有一个原因我们这个开发没有权限去上传APP上面去 这这这,没有办法玩啊。
3:所以现在遇到的问题
1:代码没有办法有效的回滚,这个就不知道一开始是不是好的。
2:这个问题只有在在上传到APP Store上面才能检测出来,但是又没有这个权限。 怎么玩??
3: 时间比较紧急只有2day就到最后release dead line。 。。。。。。
然后当天晚上我们iOS mobile teame的4成员中针对这个问题去开了一个会议,在讨论如何解决这个问题,以及有没有遇到这个问题
然后在网上查一下解决这个问题的方式这种五花八门。
1:是由于项目工程和之前项目工程不一致导致的
2:项目中的cocoapods的缓存问题,需要把项目中的pods文件夹给删除掉,重新做pod install
3:由于SDK的Slimmed的问题。
4 是由于Xcode问题
第一个晚上没有任何解决进展。。。。然后第二天继续。
到第二下午的时候还是没有任何进展。然后继续。。。
然后继续在看网上一些东西,终于在一个dev群里遇到遇到一个位遇到同样的问题,给我的答案看看Xcode里面相关warning ,但是发现改了之后是不行的。
然后继续遇到一个网友就是然后查查相关SDK的架构 查到一个命令 lipo -info XXXXX(SDK的可执行文件的地址)
然后我们注意到一个很有意思的现象就是这次archive出来的build和之前build相比是比较小了10M有这个问,然后就是疯狂各种尝试然后archive。
然后我们最后注意到我们项目中最后build phase 里面有一个 script是瘦身所有的SDK的,我们猜测可能是这个问题。
然后项目中update the B SDK and 他的 dependence SDK 升级方式和其他方式不一样然后就在第一晚上把这个SDK改成和其他brand一样通过单独一个脚本去做slimmed。做一个 上传的 app store 验证发现失败。
就继续找问题。
然后就把之前的项目中的做了一个 archive 发现 B的依赖的 SDK是出现在最后 SDK和程序的签名中,但是这个处问题的项目中的B的依赖(依赖更换成xc frame work)的SDK是没有出现依赖SDK。
然后第二天晚上继续做了一个,把最后的Slimmed SDK脚本给去掉。每个SDK单独的Slimmed。这次 archive 在最后的 SDK和project sign发现依赖的SDK是进来的,然后看看大小只是增加 3M感觉有点不对。然后试试在在我们build machine 去build然后 上传的App Store上面最后发现失败(其实是一个乌龙)
第三天team会议,终于找到代码可以roll back 方式,然后做了一个代码回滚,然后做一步步archive验证,发现的确是在update SDK哪一步出现问题添加 xcfromwork 那一步。然后我们就可以确定是最后脚本Slimmed 导致XC Framework 没有包含进去。
最终我们leader用一个奇怪的放把 那个xc SDK放到里面去,然后他验证没有问题,可以上传。没有MIT-90085
然后反转了,lead把release上面的code pull下来之后做一个archive 上传 发现OK。然后他查查我们build machine 发现最后面没有拿到project。
主要原因是
最新更新的SDK 是XC framework 并且需要 embed and sign ,但是通过最后统一slimmed脚本把给slimmed没有了。这个时候上传的时候 apple 验证的时候就有问题,你在工程文件里面有是 2 + 2(xc) SDK是embed and sign 但是在你上传的包的时候 里面的 framework的文件夹里面 2 frame work 就引发了这个错误。