Swift - Framework的制作与使用教程2(引用第三方库)
作者:hangge | 2016-11-11 09:00
在我们创建的自定义框架中,也是可以再引用其它第三方的框架库。本文以实现一个网络定时请求的 framework 为例,其内部使用到了 Alamofire。关于 Alamofire 的详细介绍,可以参考我之前写的这篇文章:Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
一、framework的制作(引用第三方库 )
1,创建framework工程项目
(1)新建项目的时候选择“Cocoa Touch Framework”。

(2)项目名就叫做“HanggeSDK”。

(3)为了让制作出的 framework 在低版本的系统上也能使用,可以在“General”->“Deployment Info”里设置个较低的发布版本。(这里选择 9.0)


(5) General -> Linked Frameworks and Libraries 项,把 iOS 版的 framework 添加进来: Alamofire.framework

(6)创建一个功能实现类(HttpScheduledTask.swift),代码如下。
import Foundation
import Alamofire
public class HttpScheduledTask {
//请求地址
var url:String?
//请求参数
var params:[String:Any]?
//定时请求时间间隔
var timeInterval:TimeInterval!
//请求响应回调
var callBack:(Data)->Void
//定时任务Timer,用于停止定时任务
var timer:Timer?
//初始化。参数默认为空,时间间隔默认为1秒,默认没用回调处理。
public init(url:String, params:[String:Any] = [:],timeInterval:TimeInterval = 1,
callBack:@escaping (Data)->Void = {_ in}) {
self.url = url
self.params = params
self.timeInterval = timeInterval
self.callBack = callBack
}
//启动任务
public func start(){
//如果之前有定时任务,先停止
self.timer?.invalidate()
self.timer = Timer.scheduledTimer(timeInterval: self.timeInterval,
target:self,selector:#selector(onTime),
userInfo:nil,repeats:true)
}
//时间到,开始请求
@objc func onTime() {
Alamofire.request(self.url!, parameters: params).response { (response) in
if let data = response.data {
//调用回调函数
self.callBack(data)
}
}
}
//停止任务
public func stop() {
self.timer?.invalidate()
}
}
2,生成framework库文件
生成的 framework 文件是分为模拟器使用和真机使用这两种。
(1)发布编译目标选择“Generic iOS Device”后,使用快捷键 command+B 或者点击菜单 Product > Build 编译生成的是真机调试使用的 framework。

(2)如果发布编译目标选择的是模拟器,那么编译出来的模拟器使用的 framework。

(3)编译后右键点击项目中生成的 framework,选择“Show in Finder”,即可打开 framework 所在的文件夹。



二、framework的使用
1,引入framework
(1)将生成的 HanggeSDK.framework 添加到项目中来。(注意:要根据你是使用真机调试还是模拟器调试选择对应的 framework)

(2)接着在“General”->“Embedded Binaries”中把 HanggeSDK.framework 添加进来。

(3)除了将我们自定义类库 HanggeSDK 引入外,还需要将其依赖库也给引入进来(Alamofire)。

否则运行后会报“dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire”错误。

2,使用样例
import UIKit
import HanggeSDK
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//新建一个定时请求任务
let task1 = HttpScheduledTask(url: "https://httpbin.org/get"){
data in
if let utf8Text = String(data: data, encoding: .utf8) {
print("----- 获取到的数据 -----")
print(utf8Text)
}
}
//启动定时任务
task1.start()
//停止定时任务
//task1.stop()
/**** 带参数的定时请求任务 *****/
let task2 = HttpScheduledTask(url: "https://httpbin.org/get",
params: ["name":"hangge.com", "password":123],
timeInterval: 10) { (data) in
//处理响应
}
//启动定时任务
//task2.start()
//停止定时任务
//task2.stop()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
运行效果如下:

源码下载:
HanggeSDK+Sample.zip
三、将第三方库也打包进framwork中
上面的样例可以看到,如果我们自定义的 framework 用到了第三方库。那么在使用这个自定义的 framework 的项目中,也需要将这些第三方依赖库给引用进来。如果嫌麻烦的话,我们也可以把第三方依赖库一起编译打包进 framewrok 中。
(1)点击“Build Phases”中左上角的加号,选择“New Copy Files Phase”。

(2)在新建的“Copy Files”中,将 Destination 属性选择“Framework”,添加类库(Alamofire)。“Copy only when installing” 与 “Code Sign On Copy” 都不勾选。

(3)重新编译生成新的 HanggeSDK.framework,可以看到这个新的 framework 体积比原来大很多,说明 Alamofire 也被一同打包进了了。


(4)我们工程使用这个新的 framework 时,就不需要再引入 Alamofire 了。
全部评论(0)