内容简介:笔者的项目中,成员变更快,且都是学生开发,无用的东西堆积如山。一堆文件没引用,一堆方法不会调用也没有删掉。且UI时有改动,旧UI也不删。打包出来31.1M。刚接手的时候只是10多M的孩子,咋突然就变胖了。而且笔者有点洁癖,看起来好累。最后大小25.8M,减肥了5.3M,关键是无用代码量少了舒服。笔者上网找到以下工具,亲自尝试一遍,并把过程记录下来。不过这些工具并查找无用图片并删除。
笔者的项目中,成员变更快,且都是学生开发,无用的东西堆积如山。一堆文件没引用,一堆方法不会调用也没有删掉。且UI时有改动,旧UI也不删。打包出来31.1M。刚接手的时候只是10多M的孩子,咋突然就变胖了。而且笔者有点洁癖,看起来好累。最后大小25.8M,减肥了5.3M,关键是无用代码量少了舒服。
笔者上网找到以下工具,亲自尝试一遍,并把过程记录下来。不过这些 工具 并 不100%准确 ,只起辅助作用,最终还是由我们判断能不能删。所以要做好备份,并且对项目有一定的熟悉度。
LSUnusedResources
- 作用
查找无用图片并删除。
- 使用
勾选的选项中,如果代码有出现字符串和xcassets中图片名字一样,这工具就认为该图片是有用到的。该工具默认全部都勾选上了。
图二中圈住部分,可以识别拼接的字符串,然而,表情包名字没有其他前缀,所以这个工具识别不出来它们实际上是有用到的。
所以名字有数字的图(例如上面的000,001),不同图片有重复子字符串(如homework_语文作业,homework_美术作业),如果不确定,保险起见,还是需要手动搜索一下。
同理,如果图片名称是全中文,基本可以确定是没有引用的。
果不其然,笔者搜索homework_,发现有这么一段代码。
NSString *string = [NSString stringWithFormat:@"homework_%@",self.subjectLabel.text]; [self.subjectImageView setImage:[UIImage imageNamed:string]]; 复制代码
- 效果
经过一番折腾,笔者删掉了将近100张没用的图片。打包测试,这时候包大小变为26.8M,较原始包减小了4.3M,作用还是很明显的。
imageoptim
- 作用 通过删除图片部分无用的EXIF等信息来减小PNG、JPEG和GIF图片的大小。
从Xcode编译时自带的“图片压缩”说起 提到,压缩过的图片带来更高的应用运行速度。又能减少包大小,何乐而不为呢。
- 使用
选中项目路径就行。
- 效果
经笔者测试,可能是项目图片太多,加上电脑性能不怎么样,这工具运行了超久!而且底部UI(节省了多少)刷新不同步,要点击一下才能刷新有点不舒服;又没有进度UI看。
而且Xcode也会对图片进行压缩处理,但不一定意味着小上加小,所以该工具对包大小效果可能不怎么样。
所以,笔者认为这一工具用不用都差不多。
最终运行结果截图如下:
打包测试,大小为26.1M,较上一步缩小了0.7M。
fui
fui(Find Unused Imports)是开源项目能很好的分析出不再使用的类,准确率非常高,唯一的问题是它处理不了动态库和静态库里提供的类,也处理不了C++的类模板。
- 作用
删除不用的类。
- 安装
运行 sudo gem install fui -n /usr/local/bin
,笔者出现了下面的情况,说明gem sources中没有资源。网上搜不到怎么解决,折腾了笔者好久。
执行 gem sources
能查看已有source。
笔者之前装Cocopods,只剩下一个 https://gems.ruby-china.org/
,国内链接没有fui资源。
用 gem sources -a https://rubygems.org/
,添加进去。(顺便提一句,安装完想删执行 - gem sources -r https://rubygems.org/
)
这时候执行 gem sources
应该能看到两个。
最后再次执行 sudo gem install fui -n /usr/local/bin
,终于搞定了。
- 使用
cd 到工程目录下,执行 fui find
,笔者建议忽略pod文件引用,执行 fui -i $(pod路径)
。(可惜好像不能同时忽略多个路径,笔者项目中还有手动拉的第三方库)
然后等上一段时间,会打印出一个列表。由于不是100%靠谱,还得我们自己辨别,然后在Xcode中把文件删掉。(心大的可以执行 fui delete
,但笔者项目中有交换方法的类,是没有被其他类引用的,所以还是自己辨别吧)
该图就因为没有忽略,显示了一堆Pods,影响查看。
如果你发现列表中有些文件找不到,说明在Finder中没删。
- 效果
删掉一点代码文件,对包大小没多大影响。但笔者认为这一步还是值得的,代码没有之前那么恶心了。
打包测试,大小为25.8M,较上一步缩小了0.3M。
静态库瘦身
原理:第三方静态库 支持的指令集 有交杂部分,删掉多余部分。
其可能导致模拟器无法使用,笔者就不折腾了,怕项目被玩坏了其他人砍我。解决方法可以看方法看 iOS APP安装包瘦身实践 。文章作者解决方法是生成两个.a,精简版用来发布,原版用来运行在模拟器上。
下面写点注释看看就算了。大家注意,这里git回退都没用。。。笔者要折腾一下了。不打算弄的就别测试了。
- 过程
cd到项目目录。
找到项目中的某个.a文件。执行以下命令。
lipo -info ***.a 复制代码
i386,x86_64,是模拟器的指令集。armv7可以兼容armv7s,armv7s也可以删了,只保留armv7和arm64。
// 分离出armv7.a lipo ***.a -thin armv7 -output ***-armv7.a // 分离出arm64.a lipo ***.a -thin arm64 -output ***-arm64.a // 将前二者合并为第三者 lipo -create ***-armv7.a ***-arm64.a -output ***-device.a 复制代码
- 效果
笔者止步了,但那篇文章的作者测试如是说。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C# 6.0本质论
[美] Mark Michaelis(马克·米凯利斯)、[美] Eric Lippert(埃里克·利珀特) / 周靖、庞燕 / 人民邮电出版社 / 2017-2-1 / 108
这是C#领域中一部广受好评的名作,作者用一种易于理解的方式详细介绍了C#语言的各个方面。全书共有21章和4个附录(其中哟2个附录从网上下载),介绍了C#语言的数据类型、操作符、方法、类、接口、异常处理等基本概念,深入讨论了泛型、迭代器、反射、线程和互操作性等高级主题,还介绍了LINQ技术,以及与其相关的扩展方法、分部方法、Lambda表达式、标准查询操作符和查询表达式等内容。每章开头的“思维导图”......一起来看看 《C# 6.0本质论》 这本书的介绍吧!