美文网首页
[今日头条]iOS 包大小二进制优化,一行代码减少 60 MB

[今日头条]iOS 包大小二进制优化,一行代码减少 60 MB

作者: joeal | 来源:发表于2021-02-03 14:52 被阅读0次

    原文链接

    一、代码配置

    如果使用 xcconfig 来管理构建参数的,如果你也使用该方式,那么使用下面这一行代码就能完成配置:

    APP_THIN_LINK_FLAGS = -Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab,-rename_section,__TEXT,__const,__RODATA,__const,-rename_section,__TEXT,__text,__BD_TEXT,__text,-rename_section,__TEXT,__textcoal_nt,__BD_TEXT,__text,-rename_section,__TEXT,__StaticInit,__BD_TEXT,__text,-rename_section,__TEXT,__stubs,__BD_TEXT,__stubs,-rename_section,__TEXT,__picsymbolstub4,__BD_TEXT,__picsymbolstub4,-segprot,__BD_TEXT,rx,rx
    

    如果你是没有使用这种方式,在Other Linker Flags中逐行添加以下配置即可:

    -Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring
    -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
    -Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab
    -Wl,-rename_section,__TEXT,__const,__RODATA,__const
    -Wl,-rename_section,__TEXT,__text,__BD_TEXT,__text
    -Wl,-rename_section,__TEXT,__textcoal_nt,__BD_TEXT,__text
    -Wl,-rename_section,__TEXT,__StaticInit,__BD_TEXT,__text
    -Wl,-rename_section,__TEXT,__stubs,__BD_TEXT,__stubs
    -Wl,-rename_section,__TEXT,__picsymbolstub4,__BD_TEXT,__picsymbolstub4,
    -Wl,-segprot,__BD_TEXT,rx,rx
    

    如果你的二进制文件中存在自定义 Section 的话,比如使用了类似attribute((section("__TEXT,__custom_section")))的方式创建了自定义 Section,则可能需要做如下的配置以移走自定义 Section,具体见 「2.3.3 场景三」 的详细分析。

    APP_THIN_LINK_FLAGS = -Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab,-rename_section,__TEXT,__const,__RODATA,__const,-rename_section,__TEXT,__text,__BD_TEXT,__text,-rename_section,__TEXT,__textcoal_nt,__BD_TEXT,__text,-rename_section,__TEXT,__StaticInit,__BD_TEXT,__text,-rename_section,__TEXT,__stubs,__BD_TEXT,__stubs,-segprot,__BD_TEXT,rx,rx,-rename_section,__TEXT,__picsymbolstub4,__BD_TEXT,__picsymbolstub4,-rename_section,__TEXT, __custom_section,__CUSTOM_TEXT,__text,-segprot, __CUSTOM_TEXT,rx,rx
    

    二、验证

    1、如何找到Mach-O文件

    xcode项目编译后,在项目目录下找到Product文件夹,下面有个xxxx.app的文件,右键show in finder,下面有个和项目同名的可执行文件这个就是Mach-O文件

    2、查看Mach-O

    在终端进入此文件夹,运行下面命令:比如你的文件名叫MachDemo

    $xcrun size -lm MachDemo
    

    没移动__TEXT之前

    mach-o before.png
    移动后
    mach-o after.png

    三、成果

    将最新的IPA上传App Store后查看下载大小及安装大小。发现新上传的1.9.3版本明细下载大小减少了十几兆。安装大小也有不同程度的减少。第一列是下载大小,第二列是安装大小。

    1.9.2.png 1.9.3.png

    相关文章

      网友评论

          本文标题:[今日头条]iOS 包大小二进制优化,一行代码减少 60 MB

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