众所周知, ReactiveCocoa 是由 Github 工程师主导设计的一款 FRP 应用框架, 关于 RAC和 FRP 在这里不再多作赘述。今天主要来介绍下RAC的引入。
引入方式
- 手动引入
- CocoaPods
- Carthage
引入前准备
本教程使用 Xcode 8 和 Xcode 7.3.1 同时讲解(因为Xcode8已经发布GM版本, 因此主要讲解Xcode8的适配工作)
新建工程 起名 RACImport
手动引入
在手动引入之前, 我们先来看看官方给出的引入流程。
ReactiveCocoa supports OS X 10.9+
, iOS 8.0+
, watchOS 2.0
, and tvOS 9.0
.
To add RAC to your application:
- Add the ReactiveCocoa repository as a submodule of your application’s repository.
- Run
git submodule update --init --recursive
from within the ReactiveCocoa folder. - Drag and drop
ReactiveCocoa.xcodeproj
,Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
, andCarthage/Checkouts/Result/Result.xcodeproj
into your application’s Xcode project or workspace. - On the “General” tab of your application target’s settings, add
ReactiveCocoa.framework
,ReactiveSwift.framework
, andResult.framework
to the “Embedded Binaries” section. - If your application target does not contain Swift code at all, you should also set the
EMBEDDED_CONTENT_CONTAINS_SWIFT
build setting to “Yes”.
Or, if you’re using Carthage, simply add ReactiveCocoa to your Cartfile
:
github "ReactiveCocoa/ReactiveCocoa"
Make sure to add ReactiveCocoa.framework
, ReactiveSwift
, and Result.framework
to "Linked Frameworks and Libraries" and "copy-frameworks" Build Phases.
添加 ReactiveCocoa 的源到你的工程中, 需要使用到 Git 子模块
这里说到了添加 Git 子模块, 关于添加 Git 以及添加 Git 子模块在这都不作不详细赘述。
首先在工程目录中, 添加一个 Git 仓库:
对应到终端
下载完毕后, 提示如下:
此时, 官方给出的导入步骤中的第一步完成
运行子模块更新命令
执行以下代码, 更新子模块
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。
进入目录后
gitcheckoutv4.2.1
然后查看工程目录中的 Cartfile 文件, 文件内容如下:
github"antitypical/Result"~>2.1.3
接下来执行
carthageupdate
执行过程如下图
执行完成后, 此步骤完成
拖拽 .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 框架
#import查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。
CocoaPods引入
使用 CocoaPods 引入时, 其实相对于手动导入就简单很多。
首先, 在引入 ReactiveCocoa 之前, 先来看看 RAC 最低支持的 iOS 版本是多少。
创建并修改Podfile
明确了最低支持的版本, 在需要使用 CocoaPods 的工程中创建 Podfile 文件
pod init修改后, 如下图:
代码如下:
检测 Repo 中的 RAC是否为最新版本
这里会出现问题, 因为 CocoaPods 的 repo 会时刻更新, 因此在安装前先来查看下本地的 repo 中的 ReactiveCocoa 是不是最新版本
在终端中使用以下命令
pod search ReactiveCocoa搜索结果如下:
然后打开 ReactiveCocoa Github 传送门, 查看其分支中的 tags 最新的版本为4.2.2, 如下图
通过图片发现, 本地 Repo 中的库不是最新版本, 因此需要更新下本地 Repo
podrepoupdate
这个过程可能会非常的漫长, 接下来大家喝杯咖啡休息休息。
更新完成后, 再次搜索, 如下图:
执行 pod init 方法
pod install -- verbose -- no - repo - update
Xcode 8.0
因为 Xcode 8.0 使用了 Swift 3.0 , 因此使用 Xcode 8.0 打开, 会出现以下问题:
解决方案: 如下图, 按步骤进行即可
编译运行, 一切正常
Xcode 7.3.1
编译运行, 一切正常。
验证
上述几步完成后, 引入 ReactiveCocoa 框架
#import编译, 运行
查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。
Carthage 引入
新建工程, 起名 RACCarthage, 在工程目录中进行如下操作
创建 Cartfile 文件
touchCartfile
openCartfile
在 Cartfile 中填入如下代码
github"ReactiveCocoa/ReactiveCocoa"
执行 carthage update 命令
保存并关闭后, 在终端中执行如下命令:
carthageupdate
执行完毕, 效果如下:
将 Framework 引入工程
打开工程目录, 发现工程中多出了一个 Carthage 目录, 如下图所示:
找到 Carthage 目录下的 Framework目录, Carthage -> Build -> iOS 找到 ReactiveCocoa.framework
和 Result.framework
两个库, 如下图:
打开 RACCarthage.xcodeproj 工程文件, 然后将刚刚找到的两个 Framework 文件引入工程, 如下操作:
Xcode 8
编译通过, 一切正常
Xcode 7.3.1
编译通过, 一切正常
验证
上述几步完成后, 引入 ReactiveCocoa 框架
#import编译, 运行
查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。