在开发中我们常常会用到一些第三方 SDK 库,使用时只需将 framework 文件添加到项目中即可,十分方便。同样地,我们也可以创建自己的 framework 框架,用来封装一些常用的工具方法、框架类等。一来不会使源代码完全暴露在外,二来也便于代码复用。
下面演示一个最基础framework的开发及使用
一、framework的制作
- 新建一个工程,创建时选择
iOS->Framework & Library ,如下图所示
2. 在“General”->“Deployment Info”里设置个较低的发布版本,设置好之后的文件目录如下图所示:
3. 之后我们在工程中创建一个测试类及一个测试方法,如下:
import UIKit
class MyTest: NSObject
{
class func sayHello()
{
print("Hello World")
}
}
但是需要注意的是:对于那些需要暴露出来,即在框架外部也能访问使用的类、方便、变量前面需要加上关键字 Public。如果还允许 override 和继承的话,可以使用 open 关键字。所以修改后的代码如下:
import UIKit
public class MyTest: NSObject
{
public class func sayHello()
{
print("Hello World")
}
}
- 生成framework库文件
- 发布编译目标选择“Generic iOS Device”后,使用快捷键 command+B 或者点击菜单 Product > Build 进行编译。这时生成的是真机调试使用的 framework。
- 如果发布编译目标选择的是模拟器,那么编译出来的模拟器使用的 framework。
- 分别编译后我们可以选择 项目中的
Products -> SDKDemoOne.framework 然后右键选择Show in Finder 即可进入所在文件夹,这是我们可以看到分别对应于 真机 和 模拟器的连个文件夹,里面各有一个.framework 文件。如下图所示:
二、framework的使用
- 引入framework
- 将生成的
SDKDemoOne.framework 添加到项目中来。(注意:要根据你是使用真机调试还是模拟器调试选择对应的 framework)
- 接着在“General”->“Embedded Binaries”中把
SDKDemoOne.framework 添加进来。这两步完成之后的工程文件目录如下:
- 使用
由于之前定义的是一个类方法,所以我们在需要使用的地方直接调用该方法即可,如下所示
import UIKit
import SDKDemoOne
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
SDKTest.sayHello()
}
}
如此,即完成了这个framework的调用
三、常见问题
- 制作的Framework是动态库、还是静态库?
- framework 文件可以是动态库,也可以是静态库。创建 framework 的时候默认是 Dynamic Library(即动态库),像本文样例就是动态库。
- 如果要制作静态库,只需要编译 framework 时指定Build Settings-< Mach-O Type 为 Static Library
- 开发的sdk怎么同时支持模拟器和真机
- 首先我们先进入到真机和模拟器对应的静态库文件路径
- 打开终端:使用如下命令:
lipo -create 模拟器文件路径/SDKDemoOne.framework/SDKDemoOne 真机文件路径/SDKDemoOne.framework/SDKDemoOne -output 输出路径/SDKDemoOne.framework
即可得到在真机和模拟器下均可使用的静态库文件。
|
请发表评论