zoukankan      html  css  js  c++  java
  • 如何优化App的包大小

    App的包大小可以从多个方面进行优化:

    一、资源优化

      1、删除无用图片

        1)例如使用 LSUnusedResource 第三方库查找无用图片。注意,如果使用 [UIImage imageNamed:[NSString stringWithFormat:"icon_%d.png", index]]; 这种方式加载图片,可能会被误删

      2、删除重复资源

      3、压缩图片资源

        1)使用 ImageOptim 无损压缩图片

        2)使用 TinyPNG 有损压缩图片。使用的时候直接执行 tinypng *.png -k token 脚本即可

      4、其他技巧(选用)

        1)用 LaunchScreen.storyboard 替换启动图片

        2)本地大图片都使用 webp

        3)资源按需加载,非必要资源都等到使用时再从服务端拉取

    二、编译选项优化

      1、Optimization Level 在 release 状态设置为 Fastest/Smallest

      2、Strip Debug Symbols During Copy 在 release 状态设置为 YES

      3、Strip Linked Product 在 release 状态设置为 YES

      4、Make String Read-Only 在 release 状态设置为 YES

      5、Dead Code Stripping 在 release 状态设置为 YES

      6、Deployment PostProcessing 在 release 状态设置为 YES

      7、Symbols hidden by default 在 release 状态设置为 YES

    三、可执行文件优化

      1、使用 LinkMap 分析库的使用情况

      2、第三方库优化

        1)删除不使用的第三方库

        2)功能用得少但是体积大的三方库可以考虑自己重写

        3)合并功能重复的三方库

      3、代码分析

        1)用 AppCode 进行代码扫描

        2)去掉无用的类及文件

        3)清理import

        4)去掉空方法

        5)去掉无用的 log

        6)去掉无用的变量

      4、其他技巧(选用)

          1)将业务打包成动态库。如果动态库的加载时机不控制好,会影响App的启动速度,权衡使用

          2)动态化。将一部分 Native 界面用 RN/Weex 重写

          3)去除 Swift 代码,Swift 的标准库是打包在安装包里的,一般都有10M+。然后苹果官方说等到 Swift Runtime 稳定之后会合并到iOS系统里,那时候 Swift 就不会显著增加包大小了

          4)在 target -> Build Setting -> Other Link Flags 里添加如下指令,会把 TEXT 字段的部分内容转移到 RODATA 字段,避免苹果对 TEXT 字段的审核限制。当然其实跟安装包瘦身好像没有什么关系,所以这作为最后的优化尝试。

    -Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring 
    -Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab 
    -Wl,-rename_section,__TEXT,__const,__RODATA,__const 
    -Wl,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname 
    -Wl,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname 
    -Wl,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype

      5、苹果官方的策略

        1)App Thinning

          1】使用 xcasset 管理图片

        2)开启 BitCode

        

  • 相关阅读:
    Alcatraz的安装和使用
    TableView didSelectRowAtIndexPath 不执行
    iphone6 plus 为什么打印出的宽度是375
    GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
    strcmp传入nil导致崩溃
    修改工程名称
    Mac OS X 系统12个常用的文本编辑快捷键(移动、选中)
    删除配置文件解决OS X各种WiFi无法连接的顽固问题,解决MAC无法连接wif的情况 Preferences
    textViewDidChange: crashes in iOS 7
    iOS7隐藏状态栏 statusBar
  • 原文地址:https://www.cnblogs.com/cchHers/p/14977062.html
Copyright © 2011-2022 走看看