ITMS-90381: Too many symbol files

        在我们打包上传iPA到App Store Connect的时候,有时候会收到苹果发来的邮件:ITMS-90381: Too many symbol filesThese symbols have no corresponding slice in any binary XXXX:

ITMS-90381: Too many symbol files


        iPA包一样能用,只是多了许多用不到的符号表文件。

1.原因

         出现这种错误,一般都是DSYM符号表文件过多引起。目前在工程设置中很多第三方都只适配iOS10.0及以上,而且为了不维护和适配10.0以下的系统,一般工程中都会设置适配的iOS系统iOS Deployment Target 10.0,Valid Architectures设置为arm64/arm64e/armv7s.
         如果工程中使用pod引入其他库或者模块化功能块,编辑podspec文件的ios.deployment_target出问题,就会导致Archive后的ipa文件包含不必要的DSYM。

2. 解决方法

        在Xcode的window->Organizer 找到当前archive的文件,显示包内容,查看dSYMs文件夹下的所有符号表文件。在Terminal中进入此文件路径运行命令:dwarfdump --uuid *,显示所有已经编译好的DSYM文件属性:

ITMS-90381: Too many symbol files

可以看到很多第三方库编译成的符号表文件都包含armv7,而主工程中已经不适配armv7了。可以对照错误邮件中的UUID进行对比,发现都是armv7构建项问题,在pod中的target设置中更改Valid Architectures设置,去掉armv7,保持与主工程一致。再次Archive之后,查看符号表文件:

ITMS-90381: Too many symbol files

pod中的第三方和其他模块的符号表文件已经去掉armv7,再次upload ipa文件之后,没有收到警告邮件,问题解决。

3.ARM处理器指令集

        armv6|armv7|armv7s|arm64 | arm64e 都是ARM处理器的指令集,这些指令集都是向下兼容的,例如armv7指令集兼容armv6,只是使用armv6的时候无法发挥出其性能,无法使用armv7的新特性,从而会导致程序执行效率没那么高。还有两个我们也很熟悉的指令集:i386|x86_64 是Mac处理器的指令集,i386是针对intel通用微处理器32架构的。x86_64是针对x86架构的64位处理器。所以当使用iOS模拟器的时候会遇到i386|x86_64,ios模拟器没有arm指令集。

目前iOS移动设备指令集:

arm64e:iPhone XR | iPhone X |iPhone XS | iPhone 11及以上

arm64:iPhone5S|iPhone6系列|iPhone7系列|iPhone8系列| iPad Air| iPad mini2(iPad mini with Retina Display)

armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)

armv7:iPhone3GS|iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch(一般不需要去支持)