ReactiveCocoa环境集成(含Xcode8)(包含通过子模块)

26 篇文章 0 订阅
17 篇文章 0 订阅

转自:http://www.itnose.net/detail/6643946.html

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

引入方式

  • 手动引入
  • CocoaPods
  • Carthage

引入前准备

本教程使用 Xcode 8 和 Xcode 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初始化命令

git init

显示初始化成功如下图

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

然后调用命令

git submodule add https://github.com/ReactiveCocoa/ReactiveCocoa.git external/ReactiveCocoa

开始下载 Git 子模块 16djskjflsj_fgdkjf

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

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

运行子模块更新命令

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

git submodule update --init --recursive

运行结果如下:

18djskjflsj_fgdkjf

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

19djskjflsj_fgdkjf

注: 最新版本中添加了, 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 的目录 20djskjflsj_fgdkjf

进入目录后

git checkout v4.2.1

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

github "antitypical/Result" ~> 2.1.3

接下来执行

carthage update

执行过程如下图

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.frameworkReactiveCocoa.frameworkReactiveSwift.framework

ReactiveCocoa(一) 环境集成16

Xcode 7.3.1

分别引入 Result.frameworkReactiveCocoa.framework

28djskjflsj_fgdkjf

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

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

设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFT 为 YES

验证

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

#import

编译, 运行

RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
[subscriber sendNext:@"暮落晨曦"];
return nil;
}];
[singal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];

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

CocoaPods引入

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

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

创建并修改Podfile

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

pod init

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

open -a Xcode Podfile

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

修改后, 如下图: 31djskjflsj_fgdkjf

代码如下:

# 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

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

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

在终端中使用以下命令

pod search ReactiveCocoa

搜索结果如下:

32djskjflsj_fgdkjf

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

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

pod repo update

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

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

执行 pod init 方法

pod install --verbose --no-repo-update

Xcode 8.0

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

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

解决问题 stackoverflow.com 链接

编译运行, 一切正常

Xcode 7.3.1

编译运行, 一切正常。

验证

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

#import

编译, 运行

RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
[subscriber sendNext:@"暮落晨曦"];
return nil;
}];
[singal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];

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

Carthage 引入

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

创建 Cartfile 文件

touch Cartfile

open Cartfile

在 Cartfile 中填入如下代码

github "ReactiveCocoa/ReactiveCocoa"

执行 carthage update 命令

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

carthage update

执行完毕, 效果如下:

37djskjflsj_fgdkjf

将 Framework 引入工程

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

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

39djskjflsj_fgdkjf

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

Xcode 8

编译通过, 一切正常

Xcode 7.3.1

编译通过, 一切正常

验证

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

#import

编译, 运行

RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
[subscriber sendNext:@"暮落晨曦"];
return nil;
}];
[singal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];

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

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值