一:什么是framework
Framework是资源的集合,将静态库(iOS8以后可以是动态库)和其头文件包含到一个结构中,让Xcode可以方便地把它纳入到你的项目中。
分为真机—Debug(调试)版本、真机—Release(发布)版本、模拟器—Debug版本、模拟器—Release版本;开发中一般都打包Release(发布)版本,将真机和模拟器版本合并,提供外界。
在项目开发的过程中,例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成framework,别人只能调用接口,而不能知道其中实现的细节。
framework对CPU架构的支持,首先了解iOS设备CPU架构方面的知识,ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的。
模拟器:iphone4s-5 : i386 , iphone5s-6plus : x86_64。
真机:iphone3gs-4s : armv7 , iphone5-5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上), iphone5s-6plus : arm64。
armv6, armv7, armv7s是ARM CPU的不同指令集,原则是向下兼容的。例如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。
###将GameSDK_Resource文件夹 和 FamesFWSDK.framework 加入项目。
二,制作Framework
1.打开Xcode 创建一个framework工程。
按照下图步骤创建一个framework。1选择iOS平台。2选择Framework & Libarary栏下的 Cocoa Touch Framework。3点击Next 进行下一步
按照下图步骤1给Framework起个名字。2选择语言OC或Swift。3点击Next 进行下一步
2.创建好framework 以后记得一下两个配置:
---设置Build Active Architecture Only 的值 为NO:
---设置Mach-O Type 的值 为Static Library(静态库):
三,开发使用Framework
可自行查阅,不做过多阐述。
生成framework合并真机和模拟器:http://www.jianshu.com/p/298c54d51bdc
四,补充Framework,如果使用了category。
编译过程:
从C代码到可执行文件经历的步骤是:源代码 > 预处理器 > 编译器 > 汇编器 > 机器码 > 链接器 > 可执行文件
在最后一步需要把.o文件和C语言运行库链接起来,这时候需要用到ld命令。源文件经过一系列处理以后,会生成对应的.obj文件,然后一个项目必然会有许多.obj文件,并且这些文件之间会有各种各样的联系,例如函数调用。链接器做的事就是把这些目标文件和所用的一些库链接在一起形成一个完整的可执行文件。Other linker flags设置的值实际上就是ld命令执行时后面所加的参数
下面逐个介绍3个常用参数:
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载