这个问题直接翻译我是不会,也不懂,但是经过我查具体原因之后再解释就是:
一个framework在执行lipo -remove的时候,把这个framework包含的所有架构都清除了,会导致就剩一个空的framework,此时还是占空间的,但有是没有相关架构的空文件,这个没啥意义,就报错了。
下边开始说我怎么遇到以及怎么查到这个具体问题的,如果你不想知道看什么乱七八糟的背景,就想知道怎么快速解决问题,那直接看正文。
背景
背景是我的工程是个原生和flutter混合开发的工程,flutter是以framework的方式引入,然后flutter的framework是分release,debug和profile三个模式的,前两个不用多说,对应生产和开发,profile我也不知道,有知道的留言说下,感谢。
那按上边说的我开发的时候就要引入debug模式下生成的framework,生产的时候就要引入release模式下生成的framework。那么这里有个小问题是不管release还是debug,flutter生成的framework都带x86_64架构,即模拟器的架构,那debug必定没问题,因为我们运行模拟器时需要,但release下有x86_64 就不地道了吧,你都上架appstore肯定不会在模拟器上安装应用,所以带个x86_64的架构有什么用呢?
此时你上传appstore的时候也会因为带x86_64架构而导致上传失败。所以我们需要在上传之前清除一下x86_64架构,如果手动一个一个清除也可以,在对应的framework中执行如下命令
lipo -remove "对应framework"
一开始我确实是这样清除的,但是如果你有10个framework呢?
好吧,有简单方法的,请看这里清除flutter生成framework中多余架构大法
这里说的很清楚,各种姿势都有,各取所需喽。
现在进入正题
那么按上边的流程可以顺利打包上架,本地调试。那么标题中的问题怎么来的呢?
上边说过了的这句话还记得吧
那按上边说的我开发的时候就要引入debug模式下生成的framework,生产的时候就要引入release模式下生成的framework
就是说我上架的时候要把关联的framework改成release,然后上架之后如果我在这个分支做开发的话,不改成debug模式对应的framework在真机上运行没问题,但模拟器就会爆这个问题,这是为什么呢?
来看清除脚本打印如图
从图中可以看到第一个flutter_boost和第二个flutter两个framework的架构都是x86_64 armv7 arm64,然后因为是模拟器运行,会清除armv7 arm64两个架构,但是第三个app.framework只包含armv7 arm64架构,然后执行lipo -remove的时候会吧armv7 arm64两个架构移除,那app.framework中就不包含任何架构了,然后还有什么意义呢?
结论
知道了问题所在以及造成的原因,具体怎么处理就明了了吧。其实这个操作是因为不想改debug模式对应的framework造成的,所以改过来即可。或者你可以直接用真机运行,也不会出来这个问题。
疑问???
这里其实还是有个疑问的,既然release模式下是有x86_64是不能上架的,flutter打包的framework为什么要带这个架构呢?要带就带呗,为什么只有App这个不带呢,我查看了我这所有flutter生成的framework,就App这个没带,有知道的烦请留言答疑,谢谢。