ios 开发中,对静态库 .a,.framework的一点思考
1,最近在做项目代码优化,为减少最终输出的ipa包的大小,遇到这个疑虑:
第三方提供的静态库 .a .framework 是多架构支持的 包括x86_86、i386、arm64、armv7、armv7s,
如腾讯提供的 TencentOpenAPI.framework
其中 TencentOpenAPI 7.1MB ,通过file命令 输出如下
疑虑来了 x86_86、i386 这些符号 是否会合成到最最终生成的可执行文件中呢?
答案是 NO
下面做个验证
(1)做了个静态库
(2)建个demo app 使用libMyOscarLib.a
(3) archive打包 分析 可执行文件
xcode6 默认配置,archive输出 这个app 是2中架构的 armv7 arm64; 在上面通过otool -o 输出信息中 可发现 2个 functionTest 的MetaClass
这样想来,在生成的可执行文件中,是每一种架构 对应 相应的符号表!? 继续验证
配置xcode
otool -o 分析可执行文件 结果只发现一个 functionTest 的MetaClass
疑虑迎刃而解,作如下结论
‘
第三方提供的静态库 .a .framework 是多架构支持的 包括x86_86、i386、arm64、armv7、armv7s,
最终输出app 的架构 决定copy 第三方提供的静态库 .a .framework 哪个架构符号 进入可执行文件
在生成的可执行文件中,是每一种架构 对应 相应的符号表
’
参考链接
中科大移动云计算系统实验室 http://www.mc2lab.com/?p=68
http://blog.jobbole.com/58814/ 使用class-dump-z分析支付宝app