Android apk的体积检测方案,有开源的Matrix-Android-ApkChecker,那iOS端要如何更深入的检测ipa安装包的小大呢?我们从两个方向着手。
Link Map File 直译为链接映射文件,是 Xcode 生成可执行文件时一起生成的文本,用于记录链接相关信息。
这里,我们主要用到的就是第四点,分析可执行文件的类库体积,优化包体积。

这时,再run就会生成link map文件了,但是默认生成的路径比较深,我们可以在run之前,自行修改生成的路径,方便之后查找文件,如下图




参考LinkMapParser开源的脚本,针对自己应用进行修改,最后的对比结果如下:

除了通过linkmap文件分析之外,在和开发的沟通中,还提出了对ipa文件内容进行分析的需求,主要需要关注package、assert、bundle三个目录的大小,最后通过编写shell完成分析的过程,主要代码如下:
payload="/Payload/xxx.app"
base_root_path=$1
target_root_path=$2
echo "上一版本文件的目录:${base_root_path}";
echo "当前版本文件的目录:${target_root_path}";
root_path=$PWD
package_file='Package$'
assets_car='Assets.car'
bundle_file='bundle$'
cd $1$payload
echo "开始计算..."
package_size_1=$(du -ch | grep ${package_file} | awk '{print $1}')
assets_size_1=$(ls -lh | grep ${assets_car} | awk '{print $5}')
bundle_size_kb_1=$(du -ck | grep ${bundle_file} | awk '{sum+=$1} END {print sum}')
bundle_size_mb_1=`expr ${bundle_size_kb_1} / 1024`
# 解析出来文件名
bundle_file_1=${base_root_path#*xxx_release_}
bundle_file_1=${bundle_file_1%/Payload*}"-bundle.txt"
du -ch | grep 'bundle$' > $bundle_file_1
base_bundle_list_file_path=$PWD/$bundle_file_1
echo "生成 bundle 文件列表,目录:" ${base_bundle_list_file_path}
echo "================================================================================"
echo " 主要文件大小变化对比 "
echo "================================================================================"
printf "%-20s %-20s %-20s\n" FileName Pervious Current
printf "%-20s %-20s %-20s\n" Package ${package_size_1} ${package_size_2}
printf "%-20s %-20s %-20s\n" Assets ${assets_size_1} ${assets_size_2}
printf "%-20s %-20s %-20s\n" Bundle ${bundle_size_mb_1}M ${bundle_size_mb_2}M

https://www.jianshu.com/p/52e0dee35830
https://juejin.cn/post/6844904168096792583