ReactiveCocoa(一) 环境集成(含Xcode8)

原文链接: 暮落晨曦

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

一、引入方式

  • 手动引入
  • CocoaPods
  • Carthage

二、引入前准备

本教程使用 Xcode 8Xcode 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 需要注意, 工程中的 ResultReactiveSwift 都是基于 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.xcodeproj

Xcode 7.3.1

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

导入ReactiveCocoa.xcodeproj
导入ReactiveCocoa
导入Reuslt.xcodeproj
导入Result

4.工程目录的 "General" 的 "Embedded Binaries"添加Framework

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

Xcode 8

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

添加三种Framework

Xcode 7.3.1

分别引入 Result.framework, ReactiveCocoa.framework

添加两种Framework

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

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

设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFTYES

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 版本是多少。

RAC的支持的版本

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是否为最新版本

这里会出现问题, 因为 CocoaPodsrepo 会时刻更新, 因此在安装前先来查看下本地的 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 打开, 会出现以下问题:

Xcode8 错误

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

解决问题 stackoverflow.com 链接

编译运行, 一切正常

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 update

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

Framwork

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

Framwork

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 暮落晨曦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容