区块链技术博客
www.b2bchain.cn

iOS 安装包瘦身实践求职学习资料

本文介绍了iOS 安装包瘦身实践求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

App 大小有下载大小和安装大小的概念

下载大小是指 App 压缩包(也就是 .ipa 文件)所占的空间,用户在下载 App 时,下载的是压缩包,这样做可以节省流量;当压缩包下载完成后,就会自动解压,解压过程也就是通常所说的安装过程;安装大小就是指压缩包解压后所占用的空间。

其实用户在商店看到的大小是安装大小。如果想看全可以在App Store Connect 后台查看。

虽然苹果历年都会调整App 下载大小。如今,App 下载大小超出 200 MB 时 ,会出现两种情况:iOS 13 以下的用户,无法通过蜂窝数据下载 App;iOS 13 及以上的用户,需要手动设置才可以使用蜂窝网络下载 App。

可执行文件大小限制:

  • iOS 7 之前,二进制文件中所有的 __TEXT 段总和不得超过 80 MB
  • iOS 7.X 至 iOS 8.X ,二进制文件中,每个特定架构中的 __TEXT 段不得超过 60 MB
  • iOS 9.0 之后,二进制文件中所有的 __TEXT 段总和不得超过 500 MB

瘦身思路

App Slicing 后的 ipa 文件后,将其用 zip 解压缩方式解压,进入 .app 文件后,就可以直观地看到安装包中的内容。一个安装包,往往包含资源与 iOS 上的可执行文件 Mach-O 文件两部分,资源又可以分为 Asset Catalog 的构建产物 Assets.car 文件和其他资源。其中 Assets.car 文件和 Mach-O 文件,是重点优化的部分。

Assets.car 文件

Assets.car 文件是工程中 Asset Catalog 的构建产物。Xcode 工具链中的 actool 负责构建 Assets.car。在构建 Assets.car 的过程中,actool 会按照一定策略选取编码算法,对其中的 png 图片重新编码。

Mach-O 文件

Mach-O 文件是 iOS 上的可执行文件,它是由代码源文件经过编译和静态链接获得。经过 App Slicing 之后的 Mach-O 文件往往仅包含单个架构。使用 MachOView 等工具,可以直观了解 Mach-O 中包含的内容。同时,Link Map 文件能更进一步帮助我们分析 Mach-O 文件的构成。

从这两个方向优化安装包大小。

资源大小优化

LSUnusedResources 移除没有使用的图片资源

LSUnusedResources 是一个可视化的工具。但是删除的时候有两点注意事项。

1: 下面这种会被误认为废弃图片

UIImage*image=[UIImage imageNamed:[NSString stringWithFormat:@”TabImage_index%d.png”,i]];

2:在工程的Assets.xcassets文件中直接修改了图片的名字,这样会导致图片本身的名字和在工程中引入的名字不一致,导致检测结果有误。

1倍图片

由于历史遗留的问题,现在项目已经支持9.0以上。因此我们可以不支持1倍的图片。把之前一倍的图片删掉如果存在。

使用合适的资源压缩配置

组件库pod 资源管理

1、将 Pod 库和主工程的最低支持版本从 iOS 8.0 提升成 iOS 9.0

2、开启 Pod 库和主工程 Xcode Build Settings 中的 ASSETCATALOG_COMPILER_OPTIMIZATION space 选项

这两项设置可以改变 actool 构建 Assets.car 时选取的编码压缩算法,减小包大小。我们可以使用 xcrun assetutil –info Assets.car 命令检查 Assets.car 中每张图片使用的编码压缩算法。

Asset Catalog 资源压缩

Xcode 中,构建 Asset Catalog 的工具 actool 会首先对 Asset Catalog 中的 png 图片进行解码,得到 Bitmap 数据,然后再运用 actool 的编码压缩算法进行编码压缩处理。无损压缩通过变换图片的编码压缩算法减少大小,但是不会改变 Bitmap 数据。对于 actool 来说,它接收的输入没有改变,所以无损压缩无法优化 Assets.car 的大小。
我们使用了 ImageOptim 工具改变图片的编码方式为 RGB with palette :

imageoptim -Q --no-imageoptim --imagealpha --number-of-colors 16 --quality 40-80 ./1.png

其中 –number-of-colors 控制颜色数组维护颜色的数量;–quality 控制图片的质量变为原来的百分比。我们的经验表明,当 –number-of-colors 从 16 开始向上调整,–quality 维持 40-80,能够在显著减少包大小的同时维持肉眼看不到的质量变化。

大的资源按需加载

其他如换肤等大的资源不提前放到IPA中按需下载。或者可以使用后面介绍切片的On-Demand Resources。

iOS9 以后,苹果提供了 On-Demand Resources 功能来减少安装包的体积。我们可以将一些资源标记为 “按需加载”,在需要使用的时候请求操作系统从 App Store 中下载。这个功能非常适合一些大型游戏、带有付费内容或者大量不常使用的多媒体资源的 App。

fdupes 查找重复文件

用这个工具查到很多重复的大的SDK,特别是之前在工程中移到pod组件库的SDK。有一个项目我大概清理了600多M。

# 安装 brew install fdupes  # 查看某文件夹下的重复文件 fdupes -Sr ./filepath > outlog.txt

重复的功能的框架尽量使用一套

历史遗留重复的同样功能的第三方库比如AFN ASI 等

老的下掉的业务要及时清理

这部分要产品开发测试认真review

App 大小有下载大小和安装大小的概念

下载大小是指 App 压缩包(也就是 .ipa 文件)所占的空间,用户在下载 App 时,下载的是压缩包,这样做可以节省流量;当压缩包下载完成后,就会自动解压,解压过程也就是通常所说的安装过程;安装大小就是指压缩包解压后所占用的空间。

其实用户在商店看到的大小是安装大小。如果想看全可以在App Store Connect 后台查看。

虽然苹果历年都会调整App 下载大小。如今,App 下载大小超出 200 MB 时 ,会出现两种情况:iOS 13 以下的用户,无法通过蜂窝数据下载 App;iOS 13 及以上的用户,需要手动设置才可以使用蜂窝网络下载 App。

可执行文件大小限制:

  • iOS 7 之前,二进制文件中所有的 __TEXT 段总和不得超过 80 MB
  • iOS 7.X 至 iOS 8.X ,二进制文件中,每个特定架构中的 __TEXT 段不得超过 60 MB
  • iOS 9.0 之后,二进制文件中所有的 __TEXT 段总和不得超过 500 MB

瘦身思路

App Slicing 后的 ipa 文件后,将其用 zip 解压缩方式解压,进入 .app 文件后,就可以直观地看到安装包中的内容。一个安装包,往往包含资源与 iOS 上的可执行文件 Mach-O 文件两部分,资源又可以分为 Asset Catalog 的构建产物 Assets.car 文件和其他资源。其中 Assets.car 文件和 Mach-O 文件,是重点优化的部分。

Assets.car 文件

Assets.car 文件是工程中 Asset Catalog 的构建产物。Xcode 工具链中的 actool 负责构建 Assets.car。在构建 Assets.car 的过程中,actool 会按照一定策略选取编码算法,对其中的 png 图片重新编码。

Mach-O 文件

Mach-O 文件是 iOS 上的可执行文件,它是由代码源文件经过编译和静态链接获得。经过 App Slicing 之后的 Mach-O 文件往往仅包含单个架构。使用 MachOView 等工具,可以直观了解 Mach-O 中包含的内容。同时,Link Map 文件能更进一步帮助我们分析 Mach-O 文件的构成。

从这两个方向优化安装包大小。

资源大小优化

LSUnusedResources 移除没有使用的图片资源

LSUnusedResources 是一个可视化的工具。但是删除的时候有两点注意事项。

1: 下面这种会被误认为废弃图片

UIImage*image=[UIImage imageNamed:[NSString stringWithFormat:@”TabImage_index%d.png”,i]];

2:在工程的Assets.xcassets文件中直接修改了图片的名字,这样会导致图片本身的名字和在工程中引入的名字不一致,导致检测结果有误。

1倍图片

由于历史遗留的问题,现在项目已经支持9.0以上。因此我们可以不支持1倍的图片。把之前一倍的图片删掉如果存在。

使用合适的资源压缩配置

组件库pod 资源管理

1、将 Pod 库和主工程的最低支持版本从 iOS 8.0 提升成 iOS 9.0

2、开启 Pod 库和主工程 Xcode Build Settings 中的 ASSETCATALOG_COMPILER_OPTIMIZATION space 选项

这两项设置可以改变 actool 构建 Assets.car 时选取的编码压缩算法,减小包大小。我们可以使用 xcrun assetutil –info Assets.car 命令检查 Assets.car 中每张图片使用的编码压缩算法。

Asset Catalog 资源压缩

Xcode 中,构建 Asset Catalog 的工具 actool 会首先对 Asset Catalog 中的 png 图片进行解码,得到 Bitmap 数据,然后再运用 actool 的编码压缩算法进行编码压缩处理。无损压缩通过变换图片的编码压缩算法减少大小,但是不会改变 Bitmap 数据。对于 actool 来说,它接收的输入没有改变,所以无损压缩无法优化 Assets.car 的大小。
我们使用了 ImageOptim 工具改变图片的编码方式为 RGB with palette :

imageoptim -Q --no-imageoptim --imagealpha --number-of-colors 16 --quality 40-80 ./1.png

其中 –number-of-colors 控制颜色数组维护颜色的数量;–quality 控制图片的质量变为原来的百分比。我们的经验表明,当 –number-of-colors 从 16 开始向上调整,–quality 维持 40-80,能够在显著减少包大小的同时维持肉眼看不到的质量变化。

大的资源按需加载

其他如换肤等大的资源不提前放到IPA中按需下载。或者可以使用后面介绍切片的On-Demand Resources。

iOS9 以后,苹果提供了 On-Demand Resources 功能来减少安装包的体积。我们可以将一些资源标记为 “按需加载”,在需要使用的时候请求操作系统从 App Store 中下载。这个功能非常适合一些大型游戏、带有付费内容或者大量不常使用的多媒体资源的 App。

fdupes 查找重复文件

用这个工具查到很多重复的大的SDK,特别是之前在工程中移到pod组件库的SDK。有一个项目我大概清理了600多M。

# 安装 brew install fdupes  # 查看某文件夹下的重复文件 fdupes -Sr ./filepath > outlog.txt

重复的功能的框架尽量使用一套

历史遗留重复的同样功能的第三方库比如AFN ASI 等

老的下掉的业务要及时清理

这部分要产品开发测试认真review

App 大小有下载大小和安装大小的概念

下载大小是指 App 压缩包(也就是 .ipa 文件)所占的空间,用户在下载 App 时,下载的是压缩包,这样做可以节省流量;当压缩包下载完成后,就会自动解压,解压过程也就是通常所说的安装过程;安装大小就是指压缩包解压后所占用的空间。

其实用户在商店看到的大小是安装大小。如果想看全可以在App Store Connect 后台查看。

虽然苹果历年都会调整App 下载大小。如今,App 下载大小超出 200 MB 时 ,会出现两种情况:iOS 13 以下的用户,无法通过蜂窝数据下载 App;iOS 13 及以上的用户,需要手动设置才可以使用蜂窝网络下载 App。

可执行文件大小限制:

  • iOS 7 之前,二进制文件中所有的 __TEXT 段总和不得超过 80 MB
  • iOS 7.X 至 iOS 8.X ,二进制文件中,每个特定架构中的 __TEXT 段不得超过 60 MB
  • iOS 9.0 之后,二进制文件中所有的 __TEXT 段总和不得超过 500 MB

瘦身思路

App Slicing 后的 ipa 文件后,将其用 zip 解压缩方式解压,进入 .app 文件后,就可以直观地看到安装包中的内容。一个安装包,往往包含资源与 iOS 上的可执行文件 Mach-O 文件两部分,资源又可以分为 Asset Catalog 的构建产物 Assets.car 文件和其他资源。其中 Assets.car 文件和 Mach-O 文件,是重点优化的部分。

Assets.car 文件

Assets.car 文件是工程中 Asset Catalog 的构建产物。Xcode 工具链中的 actool 负责构建 Assets.car。在构建 Assets.car 的过程中,actool 会按照一定策略选取编码算法,对其中的 png 图片重新编码。

Mach-O 文件

Mach-O 文件是 iOS 上的可执行文件,它是由代码源文件经过编译和静态链接获得。经过 App Slicing 之后的 Mach-O 文件往往仅包含单个架构。使用 MachOView 等工具,可以直观了解 Mach-O 中包含的内容。同时,Link Map 文件能更进一步帮助我们分析 Mach-O 文件的构成。

从这两个方向优化安装包大小。

资源大小优化

LSUnusedResources 移除没有使用的图片资源

LSUnusedResources 是一个可视化的工具。但是删除的时候有两点注意事项。

1: 下面这种会被误认为废弃图片

UIImage*image=[UIImage imageNamed:[NSString stringWithFormat:@”TabImage_index%d.png”,i]];

2:在工程的Assets.xcassets文件中直接修改了图片的名字,这样会导致图片本身的名字和在工程中引入的名字不一致,导致检测结果有误。

1倍图片

由于历史遗留的问题,现在项目已经支持9.0以上。因此我们可以不支持1倍的图片。把之前一倍的图片删掉如果存在。

使用合适的资源压缩配置

组件库pod 资源管理

1、将 Pod 库和主工程的最低支持版本从 iOS 8.0 提升成 iOS 9.0

2、开启 Pod 库和主工程 Xcode Build Settings 中的 ASSETCATALOG_COMPILER_OPTIMIZATION space 选项

这两项设置可以改变 actool 构建 Assets.car 时选取的编码压缩算法,减小包大小。我们可以使用 xcrun assetutil –info Assets.car 命令检查 Assets.car 中每张图片使用的编码压缩算法。

Asset Catalog 资源压缩

Xcode 中,构建 Asset Catalog 的工具 actool 会首先对 Asset Catalog 中的 png 图片进行解码,得到 Bitmap 数据,然后再运用 actool 的编码压缩算法进行编码压缩处理。无损压缩通过变换图片的编码压缩算法减少大小,但是不会改变 Bitmap 数据。对于 actool 来说,它接收的输入没有改变,所以无损压缩无法优化 Assets.car 的大小。
我们使用了 ImageOptim 工具改变图片的编码方式为 RGB with palette :

imageoptim -Q --no-imageoptim --imagealpha --number-of-colors 16 --quality 40-80 ./1.png

其中 –number-of-colors 控制颜色数组维护颜色的数量;–quality 控制图片的质量变为原来的百分比。我们的经验表明,当 –number-of-colors 从 16 开始向上调整,–quality 维持 40-80,能够在显著减少包大小的同时维持肉眼看不到的质量变化。

大的资源按需加载

其他如换肤等大的资源不提前放到IPA中按需下载。或者可以使用后面介绍切片的On-Demand Resources。

iOS9 以后,苹果提供了 On-Demand Resources 功能来减少安装包的体积。我们可以将一些资源标记为 “按需加载”,在需要使用的时候请求操作系统从 App Store 中下载。这个功能非常适合一些大型游戏、带有付费内容或者大量不常使用的多媒体资源的 App。

fdupes 查找重复文件

用这个工具查到很多重复的大的SDK,特别是之前在工程中移到pod组件库的SDK。有一个项目我大概清理了600多M。

# 安装 brew install fdupes  # 查看某文件夹下的重复文件 fdupes -Sr ./filepath > outlog.txt

重复的功能的框架尽量使用一套

历史遗留重复的同样功能的第三方库比如AFN ASI 等

老的下掉的业务要及时清理

这部分要产品开发测试认真review

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » iOS 安装包瘦身实践求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们