一、优点
1. 对于开发者而言,可以保证使用者无法修改其中的代码,破坏目录结构,保证核心代码不外泄。
2. 对于使用者而言,方便集成和使用,只需要把文件拖入项目即可。
3. 可以对固有模块进行封装,方便开发,提供效率。
二、.framework 和 .a的区别
1. 两者都是静态库。
2. a是一个纯二进制文件,而.framework里面除了二进制文件还包括资源文件。
3. .a文件不能直接使用,需要.h文件配合使用,而.framework可独立使用。
4. .a无需暴露内部文件,而.framework 需要至少暴露一个头文件。
三、注意事项
1. 系统的.framework是动态库,而开发者建立的.framework是静态库。
2. 当.framework中的文件存在类别(category)时,我们要在使用静态库的工程上配置other linker flags的值为-ObjC,否则程序在使用到该类别时,程序将会闪退。
四、制作流程
1. 创建工程--选择Cocoa Touch Framework
2. 删除系统默认创建的.h文件
3. 配置Build Settings --Architecture -- 添加armv7s 让.framework 适配iphone se
4. 配置Build Settings --Build Active Architecture Only 设置为NO
5. 配置Build Settings --Mach-o Type 设置成 Static Library
6. 把需要打包的类文件拖入项目中,我这边使用AFNetworking做为例子
7. 配置对外公开的头文件,其中分别有三个属性,public,private(公开的,放在此栏目下的头文件,可视,且可以被外部引用),project(项目内的,存放在此栏目下的头文件,不可视,且无法被外部引用),文件要放在哪个分组底下,依自己的实际情况,无特殊要求,但至少要暴露一个头文件。
8. 生成.framework 文件
我们需要运行2次分别生成2个.framework 文件,一个是用来跑真机的库文件,一个是用来跑模拟器的库文件
生成真机的库文件,在运行项目前,需要选择运行设备为 Generic iOS Device,然后运行即可。
生成模拟器的库文件,在运行项目前,选择模拟器选择(推荐6s(含6s))的设备,然后运行即可
9. 在项目底下的 products文件下,点击xxxxxxx.framework 选择show in finder 查看生成的库文件,其中
Debug-iphoneos 为存放真机的.framework文件。Debug-iphonesimulator 为存放模拟器的.framework 文件
10. 打开终端,用命令行 lipo -info 你的.framework 文件的存放路径, 查看.framework 支持的框架
注意点:路径不是精确到.framework 的那个文件。而是.framework 点击进去后的xxxxx(项目名)不带后缀的那个文件
11. 合并2个.framework 使库文件能够同时支持模拟器和真机,若无需,此步骤可略过。
在终端运行 lipo -create xxxxxxxxxxxx(真机的framework路径) xxxxxxxxxxxxx(模拟器的framework路径) -output xxxxxxxxxxxxx(生成文件的存放路径)。
我在这边是放在模拟器framework下生成了一个ATTestFramework2 的文件加以区分。生成成功后,只需要删除原来的ATTestFramework。然后把ATTestFramework2的命名改成ATTestFramework即可
11. 打开终端,使用lipo -info xxxxxxx(文件路径)查看合并后的.framework 是否支持真机和模拟器。
即原有的模拟器+真机 = 现有的支持框架
12. 打开一个项目,导入.framework,测试.framework 是否可以正常使用
可被编译成功,即表示该.framework 可被正常使用
13. 至此打包framework文件已完成。有不对的地方欢迎指出。