ReactiveCocoa(1) :环境集成

众所周知, ReactiveCocoa 是由 Github 工程师主导设计的一款 FRP 应用框架, 关于 RACFRP 在这里不再多作赘述。今天主要来介绍下RAC的引入。

引入方式

  • 手动引入
  • CocoaPods
  • Carthage

引入前准备

本教程使用 Xcode 8Xcode 7.3.1 同时讲解(因为Xcode8已经发布GM版本, 因此主要讲解Xcode8的适配工作)

新建工程 起名 RACImport
11djskjflsj_fgdkjf

手动引入

在手动引入之前, 我们先来看看官方给出的引入流程。

12rac%e5%ae%98%e6%96%b9%e5%af%bc%e5%85%a5%e6%b5%81%e7%a8%8b2

添加 ReactiveCocoa 的源到你的工程中, 需要使用到 Git 子模块

这里说到了添加 Git 子模块, 关于添加 Git 以及添加 Git 子模块在这都不作不详细赘述。
首先在工程目录中, 添加一个 Git 仓库:
13git%e6%89%80%e6%94%be%e7%9b%ae%e5%bd%95
对应到终端
14%e7%bb%88%e7%ab%af%e8%bf%9b%e5%85%a5%e5%b7%a5%e7%a8%8b

调用git初始化命令

显示初始化成功如下图

15%e4%bb%93%e5%ba%93%e5%88%9d%e5%a7%8b%e5%8c%96

然后调用命令

开始下载 Git 子模块
16djskjflsj_fgdkjf

下载完毕后, 提示如下:
17djskjflsj_fgdkjf

此时, 官方给出的导入步骤中的第一步完成

运行子模块更新命令

执行以下代码, 更新子模块

运行结果如下:

18djskjflsj_fgdkjf

其中更新完成后, 会多出如下几个依赖库:

19djskjflsj_fgdkjf

注: 最新版本中添加了, ReactiveSwift , 并且支持 Xcode 8

Xcode 8

注: 不需做任何操作

Xcode 7.3.1

如果是 Xcode 7.3.1 需要注意, 工程中的 ResultReactiveSwift 都是基于 Swift3 的。语法会有很大变化
因此, 需要从 Git 分支中, Checkout 出旧 tag 版本的 ReactiveCocoa
查看 ReactiveCocoa Git仓库tag 找到 v4.2.2。

进入到 ReactiveCocoa 的目录
20djskjflsj_fgdkjf

进入目录后

然后查看工程目录中的 Cartfile 文件, 文件内容如下:

接下来执行

执行过程如下图

21djskjflsj_fgdkjf

执行完成后, 此步骤完成

拖拽 .xcodeproj 文件到你的工程中

Xcode 8

官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj, Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj, and Carthage/Checkouts/Result/Result.xcodeproj 拖拽到你自己的工程中。 这三个文件相互依赖, 因此缺一不可。

在工程中创建一个 Group 起名 Frameworks

导入ReactiveCocoa.xcodeproj

22djskjflsj_fgdkjf

导入ReactiveSwift.xcodeproj

23djskjflsj_fgdkjf

导入Reuslt.xcodeproj

24djskjflsj_fgdkjf

Xcode 7.3.1

官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj and Carthage/Checkouts/Result/Result.xcodeproj 拖拽到你自己的工程中。 ( Xcode 7.3.1 的版本中没有 ReactiveSwift.xcodeproj )

导入ReactiveCocoa.xcodeproj

25djskjflsj_fgdkjf

导入Reuslt.xcodeproj

26djskjflsj_fgdkjf

工程目录的 “General” 的 “Embedded Binaries”添加Framework

注:这里因为一般是iOS开发因此举例导入都是iOS的Framework框架

Xcode 8

分别引入 Result.framework, ReactiveCocoa.framework, ReactiveSwift.framework

Xcode 7.3.1

分别引入 Result.framework, ReactiveCocoa.framework

28djskjflsj_fgdkjf

引入Framework完成后, 编译完成如果没有错误, 该步骤完成。

工程不包含Swift代码, 设置EMBEDDED_CONTENT_CONTAINS_SWIFT

设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFTYES

验证

上述几步完成后, 引入 ReactiveCocoa 框架

编译, 运行

查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。

CocoaPods引入

使用 CocoaPods 引入时, 其实相对于手动导入就简单很多。

首先, 在引入 ReactiveCocoa 之前, 先来看看 RAC 最低支持的 iOS 版本是多少。
RAC的支持的版本

创建并修改Podfile

明确了最低支持的版本, 在需要使用 CocoaPods 的工程中创建 Podfile 文件

然后使用如下命令打开 Podfile 文件

打开后的界面如下图:
30djskjflsj_fgdkjf

修改后, 如下图:
31djskjflsj_fgdkjf

代码如下:

检测 Repo 中的 RAC是否为最新版本

这里会出现问题, 因为 CocoaPodsrepo 会时刻更新, 因此在安装前先来查看下本地的 repo 中的 ReactiveCocoa 是不是最新版本

在终端中使用以下命令

搜索结果如下:

32djskjflsj_fgdkjf

然后打开 ReactiveCocoa Github 传送门, 查看其分支中的 tags 最新的版本为4.2.2, 如下图
33djskjflsj_fgdkjf

通过图片发现, 本地 Repo 中的库不是最新版本, 因此需要更新下本地 Repo

这个过程可能会非常的漫长, 接下来大家喝杯咖啡休息休息。

更新完成后, 再次搜索, 如下图:
34djskjflsj_fgdkjf

执行 pod init 方法

Xcode 8.0

因为 Xcode 8.0 使用了 Swift 3.0 , 因此使用 Xcode 8.0 打开, 会出现以下问题:
35djskjflsj_fgdkjf

解决方案: 如下图, 按步骤进行即可
36djskjflsj_fgdkjf

解决问题 stackoverflow.com 链接

编译运行, 一切正常

Xcode 7.3.1

编译运行, 一切正常。

验证

上述几步完成后, 引入 ReactiveCocoa 框架

编译, 运行

查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。

Carthage 引入

新建工程, 起名 RACCarthage, 在工程目录中进行如下操作

创建 Cartfile 文件

Cartfile 中填入如下代码

执行 carthage update 命令

保存并关闭后, 在终端中执行如下命令:

执行完毕, 效果如下:

37djskjflsj_fgdkjf

将 Framework 引入工程

打开工程目录, 发现工程中多出了一个 Carthage 目录, 如下图所示:
38djskjflsj_fgdkjf

找到 Carthage 目录下的 Framework目录, Carthage -> Build -> iOS 找到 ReactiveCocoa.frameworkResult.framework 两个库, 如下图:

39djskjflsj_fgdkjf

打开 RACCarthage.xcodeproj 工程文件, 然后将刚刚找到的两个 Framework 文件引入工程, 如下操作:
40djskjflsj_fgdkjf

Xcode 8

编译通过, 一切正常

Xcode 7.3.1

编译通过, 一切正常

验证

上述几步完成后, 引入 ReactiveCocoa 框架

编译, 运行

查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。

总结

至此, 三种引入方式都已介绍完毕。 写这篇博客时, 恰好赶上 Xcode 8 GM 发行, 因此, 在博客中就将 Xcode 8 的集成方式也做了详细描述, 希望能帮到大家。如有疑问或错误, 欢迎评论指出。

1 收藏 评论

关于作者:暮落晨曦

一名热爱技术的程序员, 积极乐观。 个人主页 · 我的文章 ·     

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部