簡體   English   中英

iOS應用二進制大小

[英]iOS app binary size

我有一個iOS應用程序,它使用了許多不同的靜態庫和框架(也有一些第三方)。 我希望能夠將靜態庫,框架和應用程序代碼的貢獻歸因於最終的應用程序二進制大小。 我在這里遇到了一個先前被問過的類似問題: 查找iOS上每個外部庫所貢獻的大小

'fullofsquirells'的答案是相關的,並且有充分的解釋。 但是,使用鏈接映射文件方法,如果我將所有部分或所有符號的大小相加,我就不會得到最終的二進制大小。

更多細節:我的iOS應用程序的最終ipa約為50 MB。 未壓縮的應用程序有效負載大約為90 MB,包含大約。 50 MB代碼和40 MB資源。 50 MB代碼二進制包含兩個對應於armv7和arm64的二進制片。 我可以使用'lipo'獲得單獨的切片,每個切片的大小大致相似,23 MB(armv7)和27 MB(arm64)。

使用linkmap方法,我能夠從各個部分以及每個切片的符號中獲取大小(請注意,每個切片都有一個單獨的linkmap文件)。 問題是如果我總結所有部分的大小或所有符號,它總計不超過該切片的應用程序二進制大小。

假設我在symbols_arm64.txt和sections_arm64.txt中有arm64的符號和部分,那么:

cat symbols_arm64.txt | grep -e“0x”| awk'{print $ 2}'| xargs printf“%d \\ n”| paste -sd + - | bc

cat sections_arm64.txt | grep -e“0x”| awk'{print $ 2}'| xargs printf“%d \\ n”| paste -sd + - | bc

這兩個返回值都接近~15 MB。 我原以為這兩個都接近27 MB。

什么是缺少12 MB?

除了鏈接映射文件的第二部分中列出的數據和文本部分之外,還有一個名為“linkEdit”部分的附加部分。 本節由DYLD使用。 有關LinkEdit的更多信息,請訪問: http ://newosxbook.com/articles/DYLD.html可以通過將DEPLOYMENT_POSTPROCESSING設置為“YES”來擺脫它。 這將剝離所有符號,除此之外還將從最終二進制文件中刪除LinkEdit部分。 事實上,當應用程序大小受到關注時,建議在發布二進制文件中執行此操作。 有關這方面的更多信息,請參閱 Apple技術說明: https//developer.apple.com/library/mac/technotes/tn2004/tn2123.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM