avatar

Catalog
iOS性能优化09-安装包瘦身

我们开发完一个项目将来肯定是要进行编译,然后打包上传到APPStore提供给用户下载,那我们最终打包是什么格式呢?其实是一个IPA包,那首先我们来看看安装包的组成

安装包(ipa)主要由可执行文件、资源组成

  • 资源(图片、音频、视频等)

    • 采取无损压缩:网上有很多,我常用的像 TinyPngSquoosh图好快 等等

    • 去除没用到的资源:大家可以试试GitHub上有个开源项目可以检测项目里没用的资源文件 GitHub传送门

  • 可执行文件瘦身

    • 编译器优化 现在的新版Xcode已经自动给优化了,如果你的项目比较旧的话,可以去XCode设置这些选项,不确定的话最好都去搜下然后设置下 Strip Linked ProductMake Strings Read-OnlySymbols Hidden by Default设置为YES

    • 去掉异常支持,Enable C++ ExceptionsEnable Objective-C Exceptions设置为NOOther C Flags添加-fno-exceptions

    • 利用AppCode(这个软件是收费的,可以试用30天,当然有钱的大家可以支持下正版,没钱的话想办法也可以搞到)检测未使用的代码:菜单栏 -> Code -> Inspect Code

    • 编写LLVM插件检测出重复代码、未被调用的代码(这个比较高级,也比较复杂,涉及到的知识有点多,后面会用专门一篇文章来记录)

    • 还有个东西叫LinkMap(可以查看可执行文件的具体组成),我们可以用Xcode来生成LinkMap文件
      LinkMap
      不过系统生成的这个txt文件可能看着比较难分析,那么我们可以借助三方工具来分析LinkMap文件,GItHub上有开源Mac OS项目,大家下载完编译完就可以用了

  • 解析LinkMap文件工具传送门

解析前

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Sections:
# Address Size Segment Section
0x100000F30 0x00000553 __TEXT __text
0x100001484 0x0000003C __TEXT __stubs
0x1000014C0 0x00000074 __TEXT __stub_helper
0x100001534 0x00000D26 __TEXT __objc_methname
0x10000225A 0x00000070 __TEXT __objc_classname
0x1000022CA 0x00000ADA __TEXT __objc_methtype
0x100002DA4 0x00000090 __TEXT __cstring
0x100002E34 0x0000017E __TEXT __entitlements
0x100002FB4 0x00000048 __TEXT __unwind_info
0x100003000 0x00000018 __DATA_CONST __got
0x100003018 0x00000020 __DATA_CONST __cfstring
0x100003038 0x00000018 __DATA_CONST __objc_classlist
0x100003050 0x00000020 __DATA_CONST __objc_protolist
0x100003070 0x00000008 __DATA_CONST __objc_imageinfo
0x100004000 0x00000050 __DATA __la_symbol_ptr
0x100004050 0x00001308 __DATA __objc_const
0x100005358 0x00000018 __DATA __objc_selrefs
0x100005370 0x00000010 __DATA __objc_classrefs
0x100005380 0x00000008 __DATA __objc_superrefs
0x100005388 0x00000008 __DATA __objc_ivar
0x100005390 0x000000F0 __DATA __objc_data
0x100005480 0x00000188 __DATA __data
# Symbols:
# Address Size File Name
0x100000F30 0x00000039 [ 2] -[ViewController viewDidLoad]
0x100000F70 0x00000080 [ 3] -[AppDelegate application:didFinishLaunchingWithOptions:]
0x100000FF0 0x00000120 [ 3] -[AppDelegate application:configurationForConnectingSceneSession:options:]
0x100001110 0x0000006C [ 3] -[AppDelegate application:didDiscardSceneSessions:]
0x100001180 0x00000090 [ 4] _main
0x100001210 0x000000A0 [ 5] -[SceneDelegate scene:willConnectToSession:options:]
0x1000012B0 0x00000040 [ 5] -[SceneDelegate sceneDidDisconnect:]
0x1000012F0 0x00000040 [ 5] -[SceneDelegate sceneDidBecomeActive:]
0x100001330 0x00000040 [ 5] -[SceneDelegate sceneWillResignActive:]
0x100001370 0x00000040 [ 5] -[SceneDelegate sceneWillEnterForeground:]
0x1000013B0 0x00000040 [ 5] -[SceneDelegate sceneDidEnterBackground:]
0x1000013F0 0x00000020 [ 5] -[SceneDelegate window]
0x100001410 0x00000040 [ 5] -[SceneDelegate setWindow:]
0x100001450 0x00000033 [ 5] -[SceneDelegate .cxx_destruct]
0x100001484 0x00000006 [ 6] _NSStringFromClass

解析后:

-

One More Thing

点击查看 2020—课程列表 全网IT各种资源有需求的可以微我,或者你喜欢的课程都可以给我发链接剩下的我来搞定

喜欢的朋友可以扫描关注我的公众号(多多点赞,多多打赏,您的支持是我写作的最大动力)关注有福利可以使用免费梯子自由上网

iOS_DevTips

Author: 木子召
Link: https://lizhaobomb.github.io/2020/03/05/iOS%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%9609-%E5%AE%89%E8%A3%85%E5%8C%85%E7%98%A6%E8%BA%AB/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment