集成Reactive Cocoa

众所周知, 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:

  1. Add the ReactiveCocoa repository as a submodule of your application’s repository.
  2. Run git submodule update --init --recursive from within the ReactiveCocoa folder.
  3. Drag and drop ReactiveCocoa.xcodeprojCarthage/Checkouts/ReactiveSwift/ReactiveSwift.xcodeproj, andCarthage/Checkouts/Result/Result.xcodeproj into your application’s Xcode project or workspace.
  4. On the “General” tab of your application target’s settings, add ReactiveCocoa.frameworkReactiveSwift.framework, and Result.framework to the “Embedded Binaries” section.
  5. If your application target does not contain Swift code at all, you should also set the EMBEDDED_CONTENT_CONTAINS_SWIFTbuild setting to “Yes”.

Or, if you’re using Carthage, simply add ReactiveCocoa to your Cartfile:

github "ReactiveCocoa/ReactiveCocoa"

Make sure to add ReactiveCocoa.frameworkReactiveSwift, and Result.framework to "Linked Frameworks and Libraries" and "copy-frameworks" Build Phases.

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

这里说到了添加 Git 子模块, 关于添加 Git 以及添加 Git 子模块在这都不作不详细赘述。
首先在工程目录中, 添加一个 Git 仓库:


对应到终端


调用git初始化命令
gitinit
显示初始化成功如下图

然后调用命令
gitsubmoduleaddhttps://github.com/ReactiveCocoa/ReactiveCocoa.git external/ReactiveCocoa

开始下载 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。

进入到  ReactiveCocoa  的目录


进入目录后

gitcheckoutv4.2.1

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

github"antitypical/Result"~>2.1.3

接下来执行

carthageupdate

执行过程如下图


执行完成后, 此步骤完成

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

Xcode 8

官方给出的文档中, 已经说明需要将 ReactiveCocoa.xcodeprojCarthage/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.frameworkReactiveCocoa.frameworkReactiveSwift.framework


Xcode 7.3.1

分别引入 Result.frameworkReactiveCocoa.framework


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


创建并修改Podfile

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

pod init
然后使用如下命令打开 Podfile 文件
open-aXcodePodfile
打开后的界面如下图:

修改后, 如下图:


代码如下:

# 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

搜索结果如下:


然后打开 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 打开, 会出现以下问题:


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


解决问题 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 文件


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

编译, 运行

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

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

原文地址:http://ios.jobbole.com/89131/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值