iOS应用程序二进制大小

iOS应用程序二进制大小,ios,xcode,linker,Ios,Xcode,Linker,我有一个iOS应用程序,它使用许多不同的静态库和框架(还有一些第三方)。我希望能够将静态libs、框架和应用程序代码的贡献归因于最终的应用程序二进制大小。 我在这里遇到了一个类似的问题: “fullofsquirells”的答案是相关的,并且得到了很好的解释。然而,使用链接映射文件的方法,如果我将所有部分或所有符号的大小相加,就不会得到最终的二进制大小 更多详情: 我的iOS应用程序的最终ipa约为50 MB。未压缩的应用程序负载约为90 MB,包含约50 MB代码和40 MB资源。50MB代

我有一个iOS应用程序,它使用许多不同的静态库和框架(还有一些第三方)。我希望能够将静态libs、框架和应用程序代码的贡献归因于最终的应用程序二进制大小。 我在这里遇到了一个类似的问题:

“fullofsquirells”的答案是相关的,并且得到了很好的解释。然而,使用链接映射文件的方法,如果我将所有部分或所有符号的大小相加,就不会得到最终的二进制大小

更多详情: 我的iOS应用程序的最终ipa约为50 MB。未压缩的应用程序负载约为90 MB,包含约50 MB代码和40 MB资源。50MB代码二进制文件包含两个对应于armv7和arm64的二进制片。我可以使用“lipo”获得单独的切片,每个切片的大小大致相同,分别是23MB(armv7)和27MB(arm64)

使用linkmap方法,我能够从各个部分以及每个片段的符号中获得大小(注意,每个片段都有一个单独的linkmap文件)。问题是,如果我将所有部分或所有符号的大小相加,其总和不等于该部分的应用程序二进制大小

假设我在symbols\u arm64.txt和sections\u arm64.txt中有arm64的符号和节,那么:

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

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

这两个返回值都接近~15 MB。我原以为这两个都会接近27MB


丢失的12 MB的原因是什么?

除了链接映射文件第二部分中列出的数据和文本部分外,还有一个称为“linkEdit”部分的附加部分。 本节由DYLD使用。有关LinkEdit的更多信息,请访问:
可以通过将部署后处理设置为“是”来消除它。这将去除所有符号,除其他外,还将从最终二进制文件中删除LinkEdit部分。事实上,当应用程序大小是一个问题时,建议在发布二进制文件中这样做。有关这方面的更多信息,请参阅苹果技术说明:

我也面临同样的问题。你找到了导致MBs丢失的原因了吗?好的。对我来说,它也是LINKEDIT部分。