iOS组件化、架构iOS-Framework

浅谈FrameWork,静态库, 动态库

2015-09-28  本文已影响1593人  南国青天

最近在研究使用FrameWork制作一些高度复用的模块, 学习中做一下笔记.

入门

在Xcode6 之前制作FrameWork只能通过 static Libaray和一系列脚本去完成, 还有一个iOS-Universal-Framework可以完成工作, 作者已经说明不会再维护了, Xcode6之后的版本都开始支持制作FrameWork了.

framework 一般情况下就是 对library的封装,同时封装了对应的header文件、以及引用的资源文件(如果有)

静态库链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝 存在形式

动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

更多关于它们的讨论在静态库与动态库的区别, 静态与动态的区别

AppStore Reject

在iOS 8之前, 苹果只不允许开发者提交链接动态库的应用. 但是在iOS 8之后Xcode支持动态库编译, 也就是说你可以提交动态库的应用.

什么产品经理还想升级, 更新你的动态库代码? PM 不作死就不会屎:
App Store Review Guidelines 2.7 Apps that download code in any way or form will be rejected
关于AppStore 拒绝 动态库编译的应用

关于armv7, armv7s, armv64

armv6:iPhone 2G/3G,iPod 1G/2G 
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G 
armv7s:iPhone5, iPod5 
arm64:iPhone5s,ipad air,ipad mini2 
i386: 模拟器
兼容性的讨论:

iPhone4(armv7)编译出来的APP,可以在iPhone5(armv7s)上运行,因为armv7s向下兼容armv7,但是不可以在iPhone3G(armv6)上运行。

Xcode Build Setting的选项说明

Architectures:

该编译选项指定了工程将被编译成支持哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大。

Valid Architectures``

该编译项指定可能支持的指令集,该列表和Architectures列表的交集,将是Xcode最终生成二进制包所支持的指令集。 比如,你的Valid Architectures设置的支持arm指令集版本有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。

Build Active Architecture Only

该编译项用于设置是否只编译当前使用的设备对应的arm指令集。 当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。 当然该选项起作用的前提是你的Xcode必须成功连接了调试设备。如果你没有任何活跃设备,即Xcode没有成功连接调试设备,就算该设置项设置成YES依然还会编译Valid Architectures和Architectures指定的二进制包。 通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。

如何选择支持的指令集

如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。

我们的项目之前支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。

根据向下兼容原则,armv7指令集的应用是可以正常在支持armv7s/arm64指令集的机器上运行的。

不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,个人认为是不会影响用户体验的.

ios指令集以及基于指令集的app包压缩策略

未完待续...

参考文献
Framework制作教程
Framework生成的目录
Framework古老的方法(非常复杂)
关于armv7s的讨论

上一篇下一篇

猜你喜欢

热点阅读