LinkMap
2022-03-20 本文已影响0人
Sweet丶
一、ipa文件中查看可执行文件
我们打包出来的ipa,使用unzip
命令去解压后,然后解压
出来的文件进行“显示包内容”,可以查看到里面的可执行文件。
unzip xxxx.ipa // 解压xxxx.ipa到当前文件夹
解压ipa后的可执行文件.png
二、查看有哪些内容链接进了可执行文件
我们可以通过LinkMap
来获知各个模块链接到可执行文件中的大小,具体方法见 LinkMap初探。
在找到这个linkMap的文件后,复制到桌面,然后可以用xcode打开它,查看到这个文件的结构:
# Path // 可执行文件的路径
# Arch: arm64 // 可执行文件支持的架构
# Object files: // 链接的目标文件
# Sections: // __Text(程序代码)和__DATA(已经初始化的变量)
# Symbols: // 程序的符号(类名、变量名、方法名)
# Dead Stripped Symbols: // 裁剪掉的Dead符号
关于最后一点Dead Stripped Symbols
, 死的裁剪符号,请查看文章iOS:静态库和dead code strip
我们可以使用一个工具 LinkMapParser 来统计LinkMap文件中各个模块占用的大小。比如下面的统计:
================================================================================
demoData/TestCleanPackage-LinkMap-normal-x86_64.txt各模块体积汇总
================================================================================
Creating Result File : demoData/BaseLinkMapResult.txt
AMapNaviKit 20.86M
AppDelegate.o 0.01M
ViewController.o 0.00M
TestCleanPackage.app.xcent 0.00M
UnUsedClass.o 0.00M
main.o 0.00M
libobjc.tbd 0.00M
linker synthesized 0.00M
Foundation.tbd 0.00M
UIKit.tbd 0.00M
总体积: 20.87M
LinkMapParser工具查看LinkMap文件统计的指令:
// 查看一个LinkMap文件
python parselinkmap.py $map_link_file_path
// 查看并对比两个LinkMap文件
python parselinkmap.py $base_map_link_file_path $target_map_link_file_path
上述文件中包含项目中的.o文件、静态库、动态库,可以根据情况进行瘦身优化, 比如上述的AMapNaviKit占用了20M,如果项目不需要的话,就可以移除这个库。