.app .dSYM .ipa .xcarchive 文件的区
为什么苹果商店包与我们产出的ipa大小有差别
为了方便大家理解,先对Xcode生成的各种包进行说明:
iOS的各种结果文件:
- .app
iOS编译以后生成的原始文件,实际是一个文件夹,里面包含各种资源文件(图片,第三方bundle,plist等文件),程序的可执行文件(二进制格式)以及对所有文件的签名记录(_CodeSignature)
不能上传AppStore
- .dSYM
生成.app时的附属产物。本质是一个文件夹,其中只有一个最大的文件,作用是对iOS程序闪退后产生的log文件进行符号化(desymbolicate);通俗的说,就是把无意义的内存地址变成可读的程序中的类和方法以及代码行数
不能上传AppStore
- .ipa
实际上就是把.app放到Payload文件夹后,对Payload就行了zip操作,最后改了下扩展名。
可通过Application Loader上传AppStore
- .xcarchive
实际上也是一个文件夹,包含.ipa和.dSYM文件
可通过Xcode上传AppStore
原因
由于上传AppStore速度很慢,我们一般选择上传.ipa文件到AppStore。那为什么从苹果商店看到的包大小和我们的.ipa大小不一致呢。下面是苹果官方的说法(注意黑体字,后面会用到):
When your application is approved by Apple to sell on the App Store, it is encrypted for DRM purposes and re-compressed. When the encryption is added, the size of the compressed file will increase. The exact size of the increase will vary from app to app, however, the size increase can be large when the binary contains a lot of contiguous zeros. We are unable to guarantee the size of your file after the encryption has been added.
也就是说,苹果获取上传的ipa文件后,进行解压缩成.app,然后对其中二进制文件进行Apple FairPlay DRM加密,最后重新压缩成.ipa,此时生成的.ipa作为AppStore上的显示程序的大小。