【问题标题】:iOS app binary sizeiOS 应用程序二进制大小
【发布时间】:2015-11-24 04:55:35
【问题描述】:

我有一个 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 和 section_arm64.txt 中有 arm64 的符号和部分,那么:

cat symbols_arm64.txt |grep -e "0x" | awk '{打印 $2}'| xargs printf "%d\n"|粘贴 -sd+ -|bc

cat section_arm64.txt |grep -e "0x" | awk '{打印 $2}'| xargs printf "%d\n"|粘贴 -sd+ -|bc

这两个返回值都接近 ~15 MB。我预计这两个都将接近 27 MB。

是什么造成了丢失的 12 MB?

【问题讨论】:

  • 我面临同样的问题。您是否发现导致丢失 MB 的原因是什么?
  • 好的。对我来说,它也是 LINKEDIT 部分。

标签: ios xcode linker


【解决方案1】:

除了链接映射文件的第二部分中列出的数据和文本部分之外,还有一个称为“linkEdit”部分的附加部分。 该部分由 DYLD 使用。有关 LinkEdit 的更多信息,请访问:http://newosxbook.com/articles/DYLD.html 可以通过将 DEPLOYMENT_POSTPROCESSING 设置为“YES”来摆脱它。这将删除所有符号,除其他外,还将从最终二进制文件中删除 LinkEdit 部分。事实上,当应用程序大小是一个问题时,建议在发布二进制文件中这样做。有关这方面的更多信息,请参阅 Apple 技术说明:https://developer.apple.com/library/mac/technotes/tn2004/tn2123.html

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多