最近开启了一波APP瘦身计划,一通操作,感觉学习了不少东西,分享一下。
首先对同行的ipa包进行了一下分析对比,发现这么一个有趣的现象:
竞品A ipa包108M, appstore下载大小108M
竞品B ipa包128M, appstore下载大小103M
自己 ipa包146M, appstore下载大小82M
原来这个跟ipa包大小没有直接必然的联系。
接下来就是该干点什么了,拆开他们的ipa,显示包内容进行分析:我发现竞品A的图片,基本上没有放到Assets
中,而是直接放到了项目文件夹里。随后我将自己的图片也按照这种做法,重新打包,发现ipa大小没啥变化。
随后又发现Build Settings
中有一个Compress PNG Files
,将其设置为NO
,打包后发现ipa大小不变。
iOS 对Assets
中的图片进行了优化,会帮助开发者减小安装包大小。这一点具体是如何实现,我也没查到。
查看我的项目中的Assets
原图大小为37M,随后解压ipa包内容中.car
文件,得到解压后的图片,发现为55M,图片被放大了,对比了原图与解压后的图,有的放大了200k,有的不变,有的缩小了几k。这里可以参考:
https://cloud.tencent.com/developer/article/1368027
https://www.cnblogs.com/lesten/p/14253878.html
一般我们开发都是导入.png
类型的图片,但是png
会比jpg
大一些,苹果也是建议我们使用png
图片,原因自己百度一下吧。如果你把jpg
拖进Assets
中,那么苹果会自动给你转成png
,从解压的ipa包的.car
就可以看出来。
那么解压.car,获取里面的图片又是怎么做呢?
请移步到github,search cartool
就好了。
运行可能会报错:
// CUIThemeFacet *facet = [CUIThemeFacet themeWithContentsOfURL:[NSURL fileURLWithPath:carPath] error:&error];
//
// CUICatalog *catalog = [[CUICatalog alloc] init];
//
// /* Override CUICatalog to point to a file rather than a bundle */
// [catalog setValue:facet forKey:@"_storageRef"];
//
CUICatalog *catalog = nil;
if ([CUICatalog instancesRespondToSelector:@selector(initWithURL:error:)]) {
/* If CUICatalog has the URL API (Mojave), use it. */
catalog = [[CUICatalog alloc] initWithURL:[NSURL fileURLWithPath:carPath] error:&error];
} else {
CUIThemeFacet *facet = [CUIThemeFacet themeWithContentsOfURL:[NSURL fileURLWithPath:carPath] error:&error];
catalog = [[CUICatalog alloc] init];
/* Override CUICatalog to point to a file rather than a bundle */
[catalog setValue:facet forKey:@"_storageRef"];
}
NSCAssert(!error, @"Error attempting to open asset catalog (%@): %@", carPath, error);
/* CUICommonAssetStorage won't link */
CUICommonAssetStorage *storage = [[NSClassFromString(@"CUICommonAssetStorage") alloc] initWithPath:carPath];
参考上面的代码进行修改。
运行的时候,先设置解压目录,
选择Products
下面的cartool
,然后选择EditScheme
![](https://img.haomeiwen.com/i7271477/415e17be24d1cbe5.png)
在
Run
模式下选择Arguments
分别添加.car
目录和解压后的目录。![](https://img.haomeiwen.com/i7271477/75cae21351efa9ac.png)
说了半天该怎么压缩安装包呢?
1、删除项目中没用的图片,参考:https://www.jianshu.com/p/5d9c5d03d462
2、删除项目中没用的类,参考:https://www.jianshu.com/p/de03ea15f399?utm_source=desktop&utm_medium=timeline
也可以利用AppCode 检测未使用的代码:菜单栏 ->Code->InspectCode
3、压缩项目中的图片,大图超过100k的可以转成webp格式加载,但是加载速度比png慢,效率低。加载参考:https://www.jianshu.com/p/74fab9c7de77
4、使用imageOptim 或者 TinyPng 进行图片压缩。但是有时压缩后效果并不明显。
参考:https://imageoptim.com/xcode.html
5、Build Settings->Optimization Level Debug模式默认为None[-O0],Release模式默认为Fastest, Smallest[-Os] 参考:https://blog.csdn.net/x32sky/article/details/90665787
6、Build Settings->VALID_ARCHS 设置:arm64 arm64e 参考:https://www.cnblogs.com/lulushen/p/8135269.html
网友评论