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

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

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

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

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

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

  • 可执行文件瘦身

    • 编译器优化 现在的新版Xcode已经自动给优化了,如果你的项目比较旧的话,可以去XCode设置这些选项,不确定的话最好都去搜下然后设置下 Strip Linked ProductMake Strings Read-OnlySymbols Hidden by Default设置为YES
      iOS性能优化09-安装包瘦身_第1张图片

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

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

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

    • 还有个东西叫LinkMap(可以查看可执行文件的具体组成),我们可以用Xcode来生成LinkMap文件
      iOS性能优化09-安装包瘦身_第2张图片
      不过系统生成的这个txt文件可能看着比较难分析,那么我们可以借助三方工具来分析LinkMap文件,GItHub上有开源Mac OS项目,大家下载完编译完就可以用了

  • 解析LinkMap文件工具传送门

解析前

# 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

解析后:
iOS性能优化09-安装包瘦身_第3张图片


One More Thing

喜欢的朋友可以扫描关注我的公众号
iOS_DevTips

你可能感兴趣的:(iOS底层原理,ios,objective-c,swift,小程序,xcode)