[TOC]


## APP包体积优化

### 一、资源类

#### 1.图片类型

png:iOS系统推荐使用,使用assets管理,下载的安装包里,只会包含一套2x或是3x的资源。

svg: 矢量图,相对较小,大图可尝试替换成svg。

Iconfont:纯色图标可采用,保真缩放,体积小,参考https://github.com/JohnWong/IconFont;

#### 2.压缩资源

图片可经过[tinypng](https://tinypng.com)压缩,官方提供photoshop插件

原理是:把相似像素的24bit位用8bit位来表示,并且移除了不必要的元数据,是有损压缩,不过肉眼很难看出来。

~~ImageOption~~

Compress PNG Files过程中会将png图片压缩,是否与:冲突待验证。。。。



#### 3.视频/音频/大图放在服务器



#### 4.夜间模式适配

采用tint  color 替代两张切图方案;

#### 5.On Demand Resource

按需加载资源,部分资源可托管到服务器,需要用的时候再下载;

使用方法文档:https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/index.html#//apple_ref/doc/uid/TP40015083-CH2-SW1

### 二、代码类

#### 1. 删除无用\重复资源和代码

使用[LSUnusedResoures](https://github.com/tinymind/LSUnusedResources)或[FenNiao](https://github.com/onevcat/FengNiao)排查无用资源

使用[fdupes](https://github.com/adrianlopezroche/fdupes)扫描重复资源

#### 2.第三方库

整合删除功能相似相近的第三方库,不要为了一个小功能而引入整个库。对第三方库的使用进行严格的准入评估,避免滥用。



### 三、编译选项

#### enable bitcode

bitcode允许苹果在后期重新优化程序的二进制文件而不需要重新提交版本,如果App支持bitcode,App Bundle(项目中所有的target)中的所有的Apps和frameworks都需要包含Bitcode。

#### Strip symble information

#### Dead code stripping

默认开启,C/C++/Swift 等静态语言编译器会在 link 的时候移除未使用的代码,但是对于 Objective-C 等动态语言是无效的。

#### Assert Catalog Complier

在Optimization优化设置项有三个选项,空、time和Space。默认是空。

Optimization space可以优化包体积

#### Apple Clang - Code Generation

##### Optimization Level

Optimization Level编译参数决定了程序在编译过程中的两个指标——编译速度和内存的占用,也决定了编译之后可执行结果的两个指标——速度和文件大小。Optimization Level分为7个级别-O0、- O1、-O2、-O3、-Os、-Ofast,-Oz,一般debug为-O0,release为-Os

##### Debug Information Level

默认值不需要修改

##### Generate Debug Symbols

默认值不需要修改,表示打包时是否生产symbol文件,关闭后虽然会减少包体积,但是会影响定位崩溃;

#### LTO(Link-Time Optimization)

参考文档:[LTO开启后进行了那些优化](https://www.jianshu.com/p/58fef052291a)

 

iOS 瘦身 - 简书

无用图片资源的删除。【挺好用的】

     工具:LSUnusedResources(https://github.com/tinymind/LSUnusedResources

Xcode工程中废弃切图文件检测工具LSUnusedResources - 简书

iOS项目清除图片之LSUnusedResources的使用 - 简书

https://www.jianshu.com/p/f1a113a27537?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Linux下使用fdupes删除指定目录下重复文件 开源地理空间基金会中文分会 开放地理空间实验室