众所周知, ReactiveCocoa 是由 Github 工程师主导设计的一款 FRP 应用框架, 关于 RAC 和 FRP 在这里不再多作赘述。今天主要来介绍下RAC的引入。
引入方式
- 手动引入
- CocoaPods
- Carthage
引入前准备
本教程使用 Xcode 8 和 Xcode 7.3.1 同时讲解(因为Xcode8已经发布GM版本, 因此主要讲解Xcode8的适配工作)
手动引入
在手动引入之前, 我们先来看看官方给出的引入流程。
添加 ReactiveCocoa 的源到你的工程中, 需要使用到 Git 子模块
这里说到了添加 Git 子模块, 关于添加 Git 以及添加 Git 子模块在这都不作不详细赘述。
首先在工程目录中, 添加一个 Git 仓库:
对应到终端
调用git初始化命令
1 |
git init |
显示初始化成功如下图
然后调用命令
1 |
git submodule add https://github.com/ReactiveCocoa/ReactiveCocoa.git external/ReactiveCocoa |
此时, 官方给出的导入步骤中的第一步完成
运行子模块更新命令
执行以下代码, 更新子模块
1 |
git submodule update --init --recursive |
运行结果如下:
其中更新完成后, 会多出如下几个依赖库:
注: 最新版本中添加了, ReactiveSwift , 并且支持 Xcode 8
Xcode 8
注: 不需做任何操作
Xcode 7.3.1
如果是 Xcode 7.3.1 需要注意, 工程中的 Result 和 ReactiveSwift 都是基于 Swift3 的。语法会有很大变化
因此, 需要从 Git 分支中, Checkout 出旧 tag 版本的 ReactiveCocoa 。
查看 ReactiveCocoa Git仓库 的 tag 找到 v4.2.2。
进入目录后
1 |
git checkout v4.2.1 |
然后查看工程目录中的 Cartfile 文件, 文件内容如下:
1 |
github "antitypical/Result" ~> 2.1.3 |
接下来执行
1 |
carthage update |
执行过程如下图
执行完成后, 此步骤完成
拖拽 .xcodeproj 文件到你的工程中
Xcode 8
官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj
, Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
, and Carthage/Checkouts/Result/Result.xcodeproj
拖拽到你自己的工程中。 这三个文件相互依赖, 因此缺一不可。
在工程中创建一个 Group 起名 Frameworks
导入ReactiveCocoa.xcodeproj
导入ReactiveSwift.xcodeproj
导入Reuslt.xcodeproj
Xcode 7.3.1
官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj
and Carthage/Checkouts/Result/Result.xcodeproj
拖拽到你自己的工程中。 ( Xcode 7.3.1 的版本中没有 ReactiveSwift.xcodeproj )
导入ReactiveCocoa.xcodeproj
导入Reuslt.xcodeproj
工程目录的 “General” 的 “Embedded Binaries”添加Framework
注:这里因为一般是iOS开发因此举例导入都是iOS的Framework框架
Xcode 8
分别引入 Result.framework, ReactiveCocoa.framework, ReactiveSwift.framework
Xcode 7.3.1
分别引入 Result.framework, ReactiveCocoa.framework
引入Framework完成后, 编译完成如果没有错误, 该步骤完成。
工程不包含Swift代码, 设置EMBEDDED_CONTENT_CONTAINS_SWIFT
设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFT 为 YES
验证
上述几步完成后, 引入 ReactiveCocoa 框架
1 |
#import |
编译, 运行
1 2 3 4 5 6 7 |
RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id subscriber) { [subscriber sendNext:@"暮落晨曦"]; return nil; }]; [singal subscribeNext:^(id x) { NSLog(@"%@", x); }]; |
查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。
CocoaPods引入
使用 CocoaPods 引入时, 其实相对于手动导入就简单很多。
首先, 在引入 ReactiveCocoa 之前, 先来看看 RAC 最低支持的 iOS 版本是多少。
创建并修改Podfile
明确了最低支持的版本, 在需要使用 CocoaPods 的工程中activeCocoa 之前, 先来看看 RAC 最低支持的 iOS 版本是多少。
创建并修改Podfile
明确了最低支持的版本, 在需要使用 CocoaPods 的工程中 trong> 在这里不再多作赘述。今天主要来介绍下RAC的引入。
引入方式
- 手动引入
- CocoaPods
- Carthage
引入前准备
本教程使用 Xcode 8 和 Xcode 7.3.1 同时讲解(因为Xcode8已经发布GM版本, 因此主要讲解Xcode8的适配工作)
手动引入
在手动引入之前, 我们先来看看官方给出的引入流程。
添加 ReactiveCocoa 的源到你的工程中, 需要使用到 Git 子模块
这里说到了添加 Git 子模块, 关于添加 Git 以及添加 Git 子模块在这都不作不详细赘述。
首先在工程目录中, 添加一个 Git 仓库:
对应到终端
调用git初始化命令
1 |
git init |
显示初始化成功如下图
然后调用命令
1 |
git submodule add https://github.com/ReactiveCocoa/ReactiveCocoa.git external/ReactiveCocoa |
此时, 官方给出的导入步骤中的第一步完成
运行子模块更新命令
执行以下代码, 更新子模块
1 |
git submodule update --init --recursive |
运行结果如下:
其中更新完成后, 会多出如下几个依赖库:
注: 最新版本中添加了, ReactiveSwift , 并且支持 Xcode 8
Xcode 8
注: 不需做任何操作
Xcode 7.3.1
如果是 Xcode 7.3.1 需要注意, 工程中的 Result 和 ReactiveSwift 都是基于 Swift3 的。语法会有很大变化
因此, 需要从 Git 分支中, Checkout 出旧 tag 版本的 ReactiveCocoa 。
查看 ReactiveCocoa Git仓库 的 tag 找到 v4.2.2。
进入目录后
1 |
git checkout v4.2.1 |
然后查看工程目录中的 Cartfile 文件, 文件内容如下:
1 |
github "antitypical/Result" ~> 2.1.3 |
接下来执行
1 |
carthage update |
执行过程如下图
执行完成后, 此步骤完成
拖拽 .xcodeproj 文件到你的工程中
Xcode 8
官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj
, Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
, and Carthage/Checkouts/Result/Result.xcodeproj
拖拽到你自己的工程中。 这三个文件相互依赖, 因此缺一不可。
在工程中创建一个 Group 起名 Frameworks
导入ReactiveCocoa.xcodeproj
导入ReactiveSwift.xcodeproj
导入Reuslt.xcodeproj
Xcode 7.3.1
官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj
and Carthage/Checkouts/Result/Result.xcodeproj
拖拽到你自己的工程中。 ( Xcode 7.3.1 的版本中没有 ReactiveSwift.xcodeproj )
导入ReactiveCocoa.xcodeproj
导入Reuslt.xcodeproj
工程目录的 “General” 的 “Embedded Binaries”添加Framework
注:这里因为一般是iOS开发因此举例导入都是iOS的Framework框架
Xcode 8
分别引入 Result.framework, ReactiveCocoa.framework, ReactiveSwift.framework
Xcode 7.3.1
分别引入 Result.framework, ReactiveCocoa.framework
引入Framework完成后, 编译完成如果没有错误, 该步骤完成。
工程不包含Swift代码, 设置EMBEDDED_CONTENT_CONTAINS_SWIFT
设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFT 为 YES
验证
上述几步完成后, 引入 ReactiveCocoa 框架
1 |
#import |
编译, 运行
1 2 3 4 5 6 7 |
RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id subscriber) { [subscriber sendNext:@"暮落晨曦"]; return nil; }]; [singal subscribeNext:^(id x) { NSLog(@"%@", x); }] |