美文网首页
iOS包大小优化

iOS包大小优化

作者: iOS_小胜 | 来源:发表于2022-06-12 10:34 被阅读0次

    一、iOS(安装)包

    ipa全称为iPhone Application Archive,这里指的包在iOS其实就是安装包,直观展示就是xxx.ipa文件

    二、iOS包内容

    要对其优化,就要知道包里面都有什么,知道了有什么,针对不同类型的文件,做不同的处理,从而达到一定的优化。

    安装包内容如下:

    • _CodeSignature文件夹:ipa包签名文件的存放文件夹

    • Assets.carAssets.xcassts在编译过程中生成的最终展示文件,默认里面存放各种分辨率图片(测试项目未使用)

    • embedded.mobileprovision:证书配置文件

    • Info.plist:项目配置表

    • PluginsApp创建的扩展,比如WidgetPushShare

    • .IprojApp所支持的语言文件

    • exec文件:可执行文件,例如widgetExtension

    • 图片资源:.png,.jpg,.webp,.gif

    • 其它资源文件

      • .xml,.json

      • .plist:项目中使用资源的.plist文件

      • .bundleMac OS下的资源包集合

      • .conf:相关的配置文件

      • .cer.der.p12:钥匙串文件

      • .wav:音频文件

      • .js.html

      • .nibXcode自带的数据文件,包含一个窗口程序和应用程序委托对象

      • .sqlite:数据库文件

      • .txt:文本文件

      • .momXcode创建的数据模型文件

    三、优化策略

    Xcode编译优

    armv6: iPhone, iPhone 3G, iPod 1G/2G
    armv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini
    armv7s: iPhone 5, iPhone 5c, iPad 4
    arm64: iPhone X,iPhone 8(Plus),iPhone 7(Plus),iPhone 6(Plus),iPhone 6s(Plus), iPhone 5s, iPad Air(2), Retina iPad Mini(2,3)
    arm64e: XS/XS Max/XR/ iPhone 11, iPhone 11 pro,iPhone 11 Pro Max,iPhone SE (2nd generation),iPhone 12 mini,iPhone 12,iPhone 12 Pro,iPhone 12 Pro Max,Phone 13 mini,Phone 13,iPhone 13 Pro,iPhone 13 Pro Max
    x86_64: 模拟器64位处理器
    i386: 模拟器32位处理器

    Excluded Architectures中设置Release模式下 Any iOS SDK -> armv7
    设置了之后,Release下把armv7的指令集排除在外。选中target会发现默认设置了 Any iOS Simulator SDK -> arm64,意思是模拟器的时候排除arm64指令集。(Xcode14以后,官方不兼容arm7s和armv7,应该不需要再设置了)

    资源文件优化

    1、删除无用图片资源
    使用开源项目LSUnusedResources(https://github.com/tinymind/LSUnusedResources),可以根据项目实际情况定义查找文件的正则表达式。
    使用建议:
    勾选 Ignore similar name ,避免扫描出图片组。
    在删除前在项目中进行二次全局搜索确认,是否确实没有使用。

    2、图片资源压缩
    将png图片格式转化为WebP,使用工具iSpart
    使用工具ImageOptim或者TinyPng压缩图片

    使用建议:
    由于WebP 在 CPU 消耗和解码时间上会比 PNG 高两倍。所以,我们有时候还需要在性能和体积上做取舍。建议是,如果图片大小超过了 100KB,你可以考虑使用 WebP;而小于 100KB 时,你可以使用工具进行图片压缩。这两个工具的压缩率没有 WebP 那么高,不会改变图片压缩方式,所以解析时对性能损耗也不会增加。

    3、代码瘦身
    工程量不是很大的话,直接使用 AppCode 来做分析,那些代码量达到百万行的团队,则会自己通过 Clang 静态分析来开发工具,去检查无用的方法和类。

    使用AppCode进行无用代码删除有一些注意点:
    -JSONModel 里定义了未使用的协议会被判定为无用协议;
    -如果子类使用了父类的方法,父类的这个方法不会被认为使用了;
    -通过点的方式使用属性,该属性会被认为没有使用;
    -使用 performSelector 方式调用的方法也检查不出来,比如 self performSelector:@selector(arrivalRefreshTime);
    -运行时声明类的情况检查不出来。比如通过 NSClassFromString 方式调用的类会被查出为没有使用的类,比如 layerClass = NSClassFromString(@“SMFloatLayer”)。还有以[[self class] accessToken] 这样不指定类名的方式使用的类,会被认为该类没有被使用。像 UITableView 的自定义的 Cell 使用 registerClass,这样的情况也会认为这个 Cell 没有被使用。

    基于以上种种原因,使用 AppCode 检查出来的无用代码,还需要人工二次确认才能够安全删除掉。

    相关文章

      网友评论

          本文标题:iOS包大小优化

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