笔者的项目中,成员变动快,且都是学生开发,无用的东西堆积如山。一堆文件没引用,一堆方法不会调用也没有删掉。且UI时有改动,旧UI也不删。打包出来31.1M。刚接手的时候只是10多M的孩子,咋忽然就变胖了。并且笔者有点洁癖,看起来好累。最后大小25.8M,减肥了5.3M,关键是无用代码量少了舒服。html
笔者上网找到如下工具,亲自尝试一遍,并把过程记录下来。不过这些工具并不100%准确,只起辅助做用,最终仍是由咱们判断能不能删。因此要作好备份,而且对项目有必定的熟悉度。git
查找无用图片并删除。github
勾选的选项中,若是代码有出现字符串和xcassets中图片名字同样,这工具就认为该图片是有用到的。该工具默认所有都勾选上了。ruby
图二中圈住部分,能够识别拼接的字符串,然而,表情包名字没有其余前缀,因此这个工具识别不出来它们其实是有用到的。bash
因此名字有数字的图(例如上面的000,001),不一样图片有重复子字符串(如homework_语文做业,homework_美术做业),若是不肯定,保险起见,仍是须要手动搜索一下。工具
同理,若是图片名称是全中文,基本能够肯定是没有引用的。性能
果不其然,笔者搜索homework_,发现有这么一段代码。测试
NSString *string = [NSString stringWithFormat:@"homework_%@",self.subjectLabel.text];
[self.subjectImageView setImage:[UIImage imageNamed:string]];
复制代码
通过一番折腾,笔者删掉了将近100张没用的图片。打包测试,这时候包大小变为26.8M,较原始包减少了4.3M,做用仍是很明显的。ui
从Xcode编译时自带的“图片压缩”提及提到,压缩过的图片带来更高的应用运行速度。又能减小包大小,何乐而不为呢。spa
选中项目路径就行。
经笔者测试,多是项目图片太多,加上电脑性能不怎么样,这工具运行了超久!并且底部UI(节省了多少)刷新不一样步,要点击一下才能刷新有点不舒服;又没有进度UI看。
并且Xcode也会对图片进行压缩处理,但不必定意味着小上加小,因此该工具对包大小效果可能不怎么样。
因此,笔者认为这一工具用不用都差很少。
最终运行结果截图以下:
打包测试,大小为26.1M,较上一步缩小了0.7M。
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
复制代码
笔者止步了,但那篇文章的做者测试如是说。
付费工具。
找到没使用的方法。事实上这个工具还有不少其余功能。
emmm...这个工具也不是100%可靠,笔者对项目中的方法不是特别熟悉,因此就不用了(还不是没钱买)。