ReactiveCocoa(一) 环境集成(含Xcode8)
原文链接: 暮落晨曦
众所周知, ReactiveCocoa 是由 Github 工程师主导设计的一款 FRP 应用框架, 关于 RAC 和 FRP 在这里不再多作赘述。今天主要来介绍下RAC的引入。
一、引入方式
- 手动引入
- CocoaPods
- Carthage
二、引入前准备
本教程使用 Xcode 8 和 Xcode 7.3.1 同时讲解(因为Xcode8已经发布GM版本, 因此主要讲解Xcode8的适配工作)
新建工程 起名 RACImport
三、手动引入
在手动引入之前, 我们先来看看官方给出的引入流程。
RAC官方导入流程1.添加 ReactiveCocoa 的源到你的工程中, 需要使用到 Git 子模块
这里说到了添加 Git 子模块, 关于添加 Git 以及添加 Git 子模块在这都不作不详细赘述。
首先在工程目录中, 添加一个 Git 仓库:
对应到终端
终端命令进入文件夹
调用git初始化命令
git init
显示初始化成功如下图
初始化然后调用命令
git submodule add https://github.com/ReactiveCocoa/ReactiveCocoa.git external/ReactiveCocoa
开始下载 Git 子模块
下载子模块
下载完毕后, 提示如下:
子模块下载完毕
此时, 官方给出的导入步骤中的第一步完成
2.运行子模块更新命令
执行以下代码, 更新子模块
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。
进入到 ReactiveCocoa 的目录
进入目录后
git checkout v4.2.1
然后查看工程目录中的 Cartfile 文件, 文件内容如下:
github "antitypical/Result" ~> 2.1.3
接下来执行
carthage update
执行过程如下图
执行完成后, 此步骤完成
3.拖拽 .xcodeproj 文件到你的工程中
Xcode 8
官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj
, Carthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj
, and Carthage/Checkouts/Result/Result.xcodeproj
拖拽到你自己的工程中。 这三个文件相互依赖, 因此缺一不可。
在工程中创建一个 Group 起名 Frameworks
导入ReactiveCocoa.xcodeproj
导入ReactiveCocoa.xcodeproj导入ReactiveSwift.xcodeproj
导入ReactiveSwift.xcodeproj导入Reuslt.xcodeproj
导入Result.xcodeprojXcode 7.3.1
官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeproj
and Carthage/Checkouts/Result/Result.xcodeproj
拖拽到你自己的工程中。 ( Xcode 7.3.1 的版本中没有 ReactiveSwift.xcodeproj )
导入ReactiveCocoa.xcodeproj
导入ReactiveCocoa导入Reuslt.xcodeproj
导入Result4.工程目录的 "General" 的 "Embedded Binaries"添加Framework
注:这里因为一般是iOS开发因此举例导入都是iOS的Framework框架
Xcode 8
分别引入 Result.framework, ReactiveCocoa.framework, ReactiveSwift.framework
添加三种FrameworkXcode 7.3.1
分别引入 Result.framework, ReactiveCocoa.framework
添加两种Framework引入Framework完成后, 编译完成如果没有错误, 该步骤完成。
5.工程不包含Swift代码, 设置EMBEDDED_CONTENT_CONTAINS_SWIFT
设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFT 为 YES
6.验证
上述几步完成后, 引入 ReactiveCocoa 框架
#import <ReactiveCocoa/ReactiveCocoa.h>
编译, 运行
RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"暮落晨曦"];
return nil;
}];
[singal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。
四、CocoaPods引入
使用 CocoaPods 引入时, 其实相对于手动导入就简单很多。
首先, 在引入 ReactiveCocoa 之前, 先来看看 RAC 最低支持的 iOS 版本是多少。
1.创建并修改Podfile
明确了最低支持的版本, 在需要使用 CocoaPods 的工程中创建 Podfile 文件
pod init
然后使用如下命令打开 Podfile 文件
open -a Xcode Podfile
打开后的界面如下图:
修改后, 如下图:
代码如下:
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
target 'RACCocoaPods' do
# Uncomment this line if you're using Swift or would like to use dynamic frameworks
use_frameworks!
pod 'ReactiveCocoa'
# Pods for RACCocoaPods
end
2.检测 Repo 中的 RAC是否为最新版本
这里会出现问题, 因为 CocoaPods 的 repo 会时刻更新, 因此在安装前先来查看下本地的 repo 中的 ReactiveCocoa 是不是最新版本
在终端中使用以下命令
pod search ReactiveCocoa
搜索结果如下:
Repo中的RAC版本然后打开 ReactiveCocoa Github 传送门, 查看其分支中的 tags 最新的版本为4.2.2, 如下图
通过图片发现, 本地 Repo 中的库不是最新版本, 因此需要更新下本地 Repo
pod repo update
这个过程可能会非常的漫长, 接下来大家喝杯咖啡休息休息。
更新完成后, 再次搜索, 如下图:
ReactiveCocoa最新版本
3.执行 pod init 方法
pod install --verbose --no-repo-update
Xcode 7.3.1
编译运行, 一切正常。
Xcode 8.0
因为 Xcode 8.0 使用了 Swift 3.0 , 因此使用 Xcode 8.0 打开, 会出现以下问题:
解决方案: 如下图, 按步骤进行即可
编译运行, 一切正常
4.验证
上述几步完成后, 引入 ReactiveCocoa 框架
#import <ReactiveCocoa/ReactiveCocoa.h>
编译, 运行
RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"暮落晨曦"];
return nil;
}];
[singal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。
五、Carthage 引入
新建工程, 起名 RACCarthage, 在工程目录中进行如下操作
1.创建 Cartfile 文件
touch Cartfile
open Cartfile
在 Cartfile 中填入如下代码
github "ReactiveCocoa/ReactiveCocoa"
2.执行 carthage update 命令
保存并关闭后, 在终端中执行如下命令:
carthage update
执行完毕, 效果如下:
carthage update执行完毕3.将 Framework 引入工程
打开工程目录, 发现工程中多出了一个 Carthage 目录, 如下图所示:
找到 Carthage 目录下的 Framework目录, Carthage -> Build -> iOS 找到 ReactiveCocoa.framework
和 Result.framework
两个库, 如下图:
打开 RACCarthage.xcodeproj 工程文件, 然后将刚刚找到的两个 Framework 文件引入工程, 如下操作:
Xcode 8
编译通过, 一切正常
Xcode 7.3.1
编译通过, 一切正常
4.验证
上述几步完成后, 引入 ReactiveCocoa 框架
#import <ReactiveCocoa/ReactiveCocoa.h>
编译, 运行
RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"暮落晨曦"];
return nil;
}];
[singal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
查看打印结果, 如果是 暮落晨曦 , 证明框架导入成功。
六、总结
至此, 三种引入方式都已介绍完毕。 写这篇博客时, 恰好赶上 Xcode 8 GM 发行, 因此, 在博客中就将 Xcode 8 的集成方式也做了详细描述, 希望能帮到大家。如有疑问或错误, 欢迎评论指出。
补充:
ReactiveCocoa 库已支持 Swift3.0 , 但是还会出现问题,因为 CocoaPods 版本过低。需要将 CocoaPods 升级至 1.1.0 ,即可正常运行。
版权声明: 如需转载, 请说明出处。谢谢!by 暮落晨曦