本文来自于腾讯Bugly公众号(weixinBugly), 作者:hillsonsong,未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/IIlNVk2ZCv2rf5dUH6NT-A
一、背景
苹果官方文档 对提交商店 APP 的二进制文件中 __TEXT 段大小有限制,超过大小限制的应用在提交评审的时候会被拒绝。目前 Ngame 在合入海外潘多拉 SDK 的过程中,发现二进制 __TEXT 段大小超过限制,因此需要对应用进行瘦身。
二、Link Map File
Link Map 文件是 Xcode 产生可执行文件的同时生成的链接信息,用来描述可执行文件的构造成分,包括代码段(__TEXT)和数据段(__DATA)的分布情况。
Link Map 里展示了整个可执行文件的全貌,列出了编译后的每一个.o目标文件的信息(包括静态链接库.a里的),以及每一个目标文件的代码段,数据段存储详情。
设置 Project->Build Settings->Write Link Map File 为YES,并设置 Path to Link Map File,build 完后就可以在设置的路径看到 Link Map 文件了。
通过 Link Map File 精确统计出各个组件 __TEXT 段大小,因此有必要对 Link Map File 稍做研究。每个 Link Map 文件由3个部分组成:
1、Object files:目标文件列表
[ 4] /Users/hilson/Desktop/IMSDKDemo/IMSDKDemo/IMSDKCoreKit.framework/IMSDKCoreKit(IMSDKUtils.o)
[ 5] /Users/hilson/Desktop/IMSDKDemo/IMSDKDemo/IMSDKCoreKit.framework/IMSDKCoreKit(IMSDKAFSecurityPolicy.o)
[ 6] /Users/hilson/Desktop/IMSDKDemo/IMSDKDemo/IMSDKCoreKit.framework/IMSDKCoreKit(IMSDKPayExtendManager.o)
[ 7] /Users/hilson/Desktop/IMSDKDemo/IMSDKDemo/IMSDKCoreKit.framework/IMSDKCoreKit(IMSDKAccountForOC.o)
[ 8] /Users/hilson/Desktop/IMSDKDemo/IMSDKDemo/IMSDKCoreKit.framework/IMSDKCoreKit(IMSDKLocationManager.o)
前面中括号表示该文件的编号,IMSDKCoreKit 静态库中所有目标文件都会列出来(包括私有文件)。
2、Sections:段表,描述各个段在最后编译成的可执行文件中的偏移位置和大小,包括了代码段(__TEXT,保存程序代码段编译后的机器码)和数据段(__DATA,保存变量值)
# Sections:
# Address Size Segment Section
0x1000046B4 0x0007B238 __TEXT __text
0x10007F8EC 0x00000BDC __TEXT __stubs
0x1000804C8 0x00000BDC __TEXT __stub_helper
0x1000810A4 0x0000C2CA __TEXT __objc_methname
0x10008D36E