gpt4 book ai didi

iOS 应用程序二进制大小

转载 作者:可可西里 更新时间:2023-11-01 06:04:38 25 4
gpt4 key购买 nike

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

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

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

使用链接映射方法,我能够从各个部分以及每个切片的符号中获取大小(请注意,每个切片都有一个单独的链接映射文件)。问题是,如果我将所有部分或所有符号的大小加起来,它的总和不等于该切片的应用程序二进制大小。

假设我在 symbols_arm64.txt 和 sections_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"|粘贴 -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

关于iOS 应用程序二进制大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33885744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com