為什么蘋果商店包與我們產出的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上的顯示程序的大小。