Framework--怎么制作Framework
1、什么是Framework?
Framework是资源的集合,将静态库和其头文件包含到一个结构中,让Xcode可以方便地把它纳入到你的项目中(framework本身就是静态库加上一组头文件)。
framework本质上是静态库的“一站式采购点”。
第一,framework 能将不同类型的资源打包在一起,使之易于安装,卸载与定位;
第二,framework 能够进行版本管理,这使得 framework 能不断更新并向后兼容;
第三,在同一时间,即使有多个应用程序使用同一 framework,但在内存中只有一份 framework 只读资源的拷贝,这减少了对内存的占用
2、创建静态库
2.1、创建一个静态库工程
a、将工程命名为A,然后将工程保存到一个空目录下。
b、一个静态库工程由头文件和实现文件组成,这些文件将被编译为库本身。
2.2、前期操作
a、为了方便其他开发者使用你的库和framework,你将进行一些操作,让他们仅需要导入一个头文件便可以访问所有你想公开的类。
b、当创建静态库工程时,Xcode会自动添加A.h和A.m。你不需要实现文件,因此右键单击A.m选择delete,将它删除到废纸篓中。
c、打开A.h,将所有内容替换为:
//导入UIKit的头文件,这是创建一个库所需要的。当你在创建不同的组成类时,你将会将它们添加到这个文件中,确保它们能够被库的使用者获取到。
#import < UIKit/UIKit.h>
2.3、向工程中添加依赖库
你所构建的项目依赖于UIKit,然而Xcode的静态库工程不会自动连接到UIKit。要解决这个问题,就要将UIKit作为依赖库添加到工程中。
2.4结合头文件
如果不结合头文件,静态库是没有用的,静态库编译一组文件,在这些文件中类和方法都以二进制数据的形式存在。在你创建的库中,有些类将能够被公开访问到,有些类只能由库内部访问并使用。
1)在build栏中添加新的phase
如果你发现按上面找到的菜单项是灰色的(不可点击的),点击下方Build Phases界面的白色区域来获取Xcode的应用焦点,然后重新试一下。
2)添加头文件
把A.h从项目导航栏中拖到中央面板的Copy Headers下的Public部分。这一步确保任何使用你的库的用户均可以获取该头文件。
2.5、注意
显然,所有包含在你的公共头文件中的头文件必须是对外公开的,这一点非常重要。否则,开发者在使用你的库时会产生编译错误。如果Xcode在读取公共头文件时不能读到你设为public的头文件,会崩溃。
3、给静态库添加功能
3.1、下载范列ui控件
http://cdn2.raywenderlich.com/wp-content/uploads/2014/02/BuildAFramework.zip
3.2、添加范例UI控件
把下载好的压缩包文件中找到RWKnobControl目录,从Finder中拖到Xcode下A目录下。
要选择复制RWKnobControl
注意:
在你弄清楚之前,这三个组的名称可能会让你迷惑,Public是你期望的,Private下的头文件依然是可以暴露出来的,因此名字可能有些误导。讽刺的是,在Project下的头文件对你的工程来说才是“私有”的,因此,你将会更多地希望你的头文件或者在Public下,或者在Project下。
3.3、将控件的头文件RWKnobControl.h分享出来
3.4、将新加入的头文件导入到A.h中
将其添加到库的主头文件RWnobControls.h中。在这个主头文件的帮助下,开发者使用你的库仅仅需要导入一个头文件。
//在A.h中添加如下代码
// Knob Control
#import "RWKnobControl.h"
4、配置Build Settings
1)
确保当你使用静态库的时候可以定位到相关头文件的位置
因为你正在创建framework供他人使用,最好禁掉这些功能(无效代码和debug用符号),让用户自己选择对自己的项目有利的部分使用。和之前一样,使用搜索框,改变下述设置:
2)Dead Code Stripping设置为NO
3)Strip Debug Symbol During Copy 全部设置为NO
4)Strip Style设置为Non-Global Symbols
5、产生静态库libA.a
5.1、
编译然后运行,到目前为止没什么可看的,不过确保项目可以成功构建,没有错误和警报就可以了。
5.2、
选择目标为iOS Device,按下command + B进行编译,一旦成功,工程导航栏中Product目录下libA.a文件将从红色变为黑色,表明现在该文件已经存在了。右键单击libA.a,选择Show in Finder。