美文网首页IOS
iOS打包ipa廋身

iOS打包ipa廋身

作者: 二猪哥 | 来源:发表于2019-02-12 22:16 被阅读1次

下面介绍了 iOS 优化 ipa 安装包大小的几种方法。

一、配置编译选项 Genetate Debug Symbols 设置为 NO

当 Generate Debug Symbols 设置为 NO 的时候,在 Xcode 中设置的断点不会中断,同样生成的 ipa 安装包也会小一些。

Genetate Debug Symbols.png

二、Asset Catalog Compiler - Options Optimization

Build Setting > Asset Catalog Compiler - Options


Options.png

在Optimization优化设置项有三个选项,不指定、time和Space。Optimization nothing是Xcode默认的设置。
与预想的不同,在选择Optimization time时,编译时长并没有得到优化。
但在Optimization space时,编译耗时基本没有波动,但编译生成的app大小有不小程度的优化。

三、适当舍弃架构 armv7

因为 armv7 用于支持 4s 和 3gs ,4s 是 2011 年 11 月正式上线,虽然还有小部分人在使用,如果是是追求包体大小的完全可以舍弃了。

四、Deployment Postprocessing和Strip Linked Product

Xcode中Strip Linked Product 的默认设置为YES,但是Deployment Postprocessing的默认设置为NO。在Deployment Postprocessing 是Deployment的总开关,所以在打开这个选项之前 Strip Linked Product是不起作用的。注:当Strip Linked Product设为YES的时候,运行app,断点不会中断,在程序中打印[NSThread callStackSymbols]也无法看到类名和方法名。而在程序崩溃时,函数调用栈中也无法看到类名和方法名。

Build Setting > Deployment Postprocessing - >YES Deployment.png 打开这两个选项之后进行编译,可以去除不必要的调试符号,编译出的安装包大小有了较大程度的优化。

五、清理未被使用的图片资源

(1)开源工具:LSUnusedResources

LSUnusedResources.png
  • 将工程目录路径拷贝到Folder或通过Browse浏览文件目录;

  • 在Resource指定要查找的资源类型;(经过本人测试,发现该工具在未指定Resource类型时所查找出来的资源不是很准确,列举出 的资源事实上是正在使用的,所以我在测试时指定查找了png类型的文件。)

  • 单击Search以查阅结果。

注:为了避免对资源的误删操作,建议在该工具输出结果后对结果中的资源名复制并在Xcode的全局查找中进行校验。

下载安装:LSUnusedResources.app.zip

Github地址:LSUnusedResources

(2)通过终端 执行 shell 命令

a. 第一步建立.sh 文件 如 unusedImage.sh

vim unusedImage.sh
#!/bin/sh
PROJ=`find . -name '*.xib' -o -name '*.[mh]'`

for png in `find . -name '*.png'`
do
    name=`basename $png`
    if ! grep -qhs "$name" "$PROJ"; then
        echo "$png is not referenced"
    fi
done

b. 进入你要查找的工程目录下执行 这段 shell 脚本

sh unusedImage.sh 

六、清理未使用的文档资源

文档资源的优化
文档资源主要是排查:
是否有不必要的文档资源,如果过期的旧版本所需要的文档资源 清理即可。
优化文档资源大小,主要是优化精简文档内容。

七、二进制包优化

二进制包是由各种代码文件,静态库 动态库 经过编译后生成的可执行文件。

这里推荐一个归类工具:https://github.com/huanxsd/LinkMap,使用方法很详细,结果类似如图:

LinkMap.png 通过对上面的文件进行分析,就知道每个类在最终的可执行文件中占据的大小。 然后有针对性的进行优化就可以了。

八、优化 第三方库

查找内部使用到的第三方库,一方面可以进行删减代码,用不到的类,直接删除,还有第三方库中的图片资源统统删除掉,如果能够自己手写实现的,那费功夫自己写吧

九、其他的资源相关:

图片

压缩图片 不重要的图片可适当采用 8bit PNG图片
  • 什么是矢量图 矢量图是由计算机的算法产生的,可以无限放大或缩小,不会有任何损失,通常由矢量软件制作。

  • 什么是位图 位图是由一个一个的小色块组成,放大后会看到那些小色块,同一面积内小色块越多,分辨率就越高。

  • 矢量图的优缺点 可以无限放大或缩小,不会影响图像素质,文件体积较小,编辑灵活。缺点是表达的色彩层次不清,整体观感效果不如位图

  • 位图的优缺点 不能放太大,减少文件分辨率后会影响图片质量,图片战胜空间较大,优点是能很细腻地表达图片的效果,图片表达效果非常好

  • 什么情况下用位图,什么情况下用矢量图 一些对图片要求高的用位图,例如照片。其他的尽量用矢量图。例如文字、表格、卡通图片等

去掉无用的图片

  • 用代码绘制简单的纯色图片 用Sketch和PaintCode快速得到绘制代码

  • 如果不需要使用透明,可以用jpeg代替PNG。jpeg减少了些效率但更加小。需权衡性能,大小。

  • 对32位的图片,尽肯能的使用高压缩率,使用PS的“Save For Web”功能,可以有效的减小JPEG和PNG图片的尺寸。 默认情况下,在build时,PNG图像就被pngcrush压缩。

音频

  • 压缩音频,尽可能使用AAC或者MP3格式,并且使用一个较低的码率。通常44.1khz的码率有点浪费,降低一定的码率也不会丢失多少音质

视频

  • 视频也可以使用类似于音频的处理方法,音视频的压缩可以很大程度的压缩,但是要注意压缩的格式,是不是会增加编解码的负担,这要权衡考虑。

Assets

  • 检查bundle中的无用文件,不要打包到app或者静态库中。可以点击文件,在右侧的file inspector里面的target membership中取消勾选;或者在build phase里面的Copy Bundle Resources中去掉。
    确定 dead code(代码被定义但从未被调用)被剥离,build setting 里 DEAD_CODE_STRIPPING = YES(新版本xcode默认是YES)。 去掉冗余的代码,即使一点冗余代码,编译后体积也是很可观的。

相关文章

网友评论

    本文标题:iOS打包ipa廋身

    本文链接:https://www.haomeiwen.com/subject/xckleqtx.html