给iOS App减肥

栏目: IOS · 发布时间: 5年前

内容简介:笔者的项目中,成员变更快,且都是学生开发,无用的东西堆积如山。一堆文件没引用,一堆方法不会调用也没有删掉。且UI时有改动,旧UI也不删。打包出来31.1M。刚接手的时候只是10多M的孩子,咋突然就变胖了。而且笔者有点洁癖,看起来好累。最后大小25.8M,减肥了5.3M,关键是无用代码量少了舒服。笔者上网找到以下工具,亲自尝试一遍,并把过程记录下来。不过这些工具并查找无用图片并删除。

笔者的项目中,成员变更快,且都是学生开发,无用的东西堆积如山。一堆文件没引用,一堆方法不会调用也没有删掉。且UI时有改动,旧UI也不删。打包出来31.1M。刚接手的时候只是10多M的孩子,咋突然就变胖了。而且笔者有点洁癖,看起来好累。最后大小25.8M,减肥了5.3M,关键是无用代码量少了舒服。

给iOS App减肥

笔者上网找到以下工具,亲自尝试一遍,并把过程记录下来。不过这些 工具不100%准确 ,只起辅助作用,最终还是由我们判断能不能删。所以要做好备份,并且对项目有一定的熟悉度。

LSUnusedResources

  • 作用

查找无用图片并删除。

  • 使用

勾选的选项中,如果代码有出现字符串和xcassets中图片名字一样,这工具就认为该图片是有用到的。该工具默认全部都勾选上了。

给iOS App减肥
给iOS App减肥

图二中圈住部分,可以识别拼接的字符串,然而,表情包名字没有其他前缀,所以这个工具识别不出来它们实际上是有用到的。

所以名字有数字的图(例如上面的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也会对图片进行压缩处理,但不一定意味着小上加小,所以该工具对包大小效果可能不怎么样。

所以,笔者认为这一工具用不用都差不多。

最终运行结果截图如下:

给iOS App减肥

打包测试,大小为26.1M,较上一步缩小了0.7M。

fui

fui(Find Unused Imports)是开源项目能很好的分析出不再使用的类,准确率非常高,唯一的问题是它处理不了动态库和静态库里提供的类,也处理不了C++的类模板。

  • 作用

删除不用的类。

  • 安装

运行 sudo gem install fui -n /usr/local/bin ,笔者出现了下面的情况,说明gem sources中没有资源。网上搜不到怎么解决,折腾了笔者好久。

给iOS App减肥

执行 gem sources 能查看已有source。

笔者之前装Cocopods,只剩下一个 https://gems.ruby-china.org/ ,国内链接没有fui资源。

给iOS App减肥

gem sources -a https://rubygems.org/ ,添加进去。(顺便提一句,安装完想删执行 - gem sources -r https://rubygems.org/ )

这时候执行 gem sources 应该能看到两个。

给iOS App减肥

最后再次执行 sudo gem install fui -n /usr/local/bin ,终于搞定了。

给iOS App减肥
  • 使用

cd 到工程目录下,执行 fui find ,笔者建议忽略pod文件引用,执行 fui -i $(pod路径) 。(可惜好像不能同时忽略多个路径,笔者项目中还有手动拉的第三方库)

然后等上一段时间,会打印出一个列表。由于不是100%靠谱,还得我们自己辨别,然后在Xcode中把文件删掉。(心大的可以执行 fui delete ,但笔者项目中有交换方法的类,是没有被其他类引用的,所以还是自己辨别吧)

该图就因为没有忽略,显示了一堆Pods,影响查看。

给iOS App减肥

如果你发现列表中有些文件找不到,说明在Finder中没删。

  • 效果

删掉一点代码文件,对包大小没多大影响。但笔者认为这一步还是值得的,代码没有之前那么恶心了。

打包测试,大小为25.8M,较上一步缩小了0.3M。

静态库瘦身

原理:第三方静态库 支持的指令集 有交杂部分,删掉多余部分。

其可能导致模拟器无法使用,笔者就不折腾了,怕项目被玩坏了其他人砍我。解决方法可以看方法看 iOS APP安装包瘦身实践 。文章作者解决方法是生成两个.a,精简版用来发布,原版用来运行在模拟器上。

下面写点注释看看就算了。大家注意,这里git回退都没用。。。笔者要折腾一下了。不打算弄的就别测试了。

  • 过程

cd到项目目录。

找到项目中的某个.a文件。执行以下命令。

lipo -info ***.a
复制代码
给iOS App减肥

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

复制代码
  • 效果

笔者止步了,但那篇文章的作者测试如是说。

给iOS App减肥

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Web高级编程

Java Web高级编程

威廉斯 (Nicholas S.Williams) / 王肖锋 / 清华大学出版社 / 2015-6-1 / CNY 99.80

Java成为世界上编程语言之一是有其优势的。熟悉JavaSE的程序员可以轻松地进入到Java EE开发中,构建出安全、可靠和具有扩展性的企业级应用程序。编写《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA Hibernate和 Spring Security》一书的目的正是如此。 《Java Web高级编程:涵盖WebSockets、Sp......一起来看看 《Java Web高级编程》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具