APK/IPA 体积优化
问题
App 包体积过大影响下载转化率,如何优化?
答案
优化方向
| 方向 | 具体手段 | 预期收益 |
|---|---|---|
| 资源优化 | 压缩图片(WebP)、删除未使用资源 | 30-50% |
| 代码优化 | Strip 符号、开启 LTO、删除无用代码 | 10-20% |
| Asset Catalog | App Thinning(按设备分发) | 20-30% |
| 动态下发 | 大资源放远端按需下载 | 视场景 |
| 编译配置 | -Oz 优化级别 | 5-10% |
排查大文件
# 解压 IPA 查看各部分大小
unzip -o MyApp.ipa -d MyApp_extracted
find MyApp_extracted -type f -exec du -sh {} + | sort -rh | head -20
# LinkMap 分析
# Build Settings → Write Link Map File = YES
# 用工具分析各模块代码体积
图片优化
// 使用 Asset Catalog + PDF 矢量图
// Build Settings → Compress PNG Files = YES
// 大图使用 WebP
// pod 'SDWebImageWebPCoder'
App Thinning
- Slicing:App Store 按设备分发对应架构和资源
- Bitcode:Apple 服务端重新编译优化(已在 Xcode 14 废弃)
- On-Demand Resources:大资源按需下载
常见面试问题
Q1: 如何找到 App 中未使用的资源?
答案:使用 FengNiao 或 LSUnusedResources 工具扫描。原理是搜索代码中引用的图片名字符串,和 Asset Catalog 中的图片名做差集。需要注意拼接的图片名(如 icon_\(index))会误报。