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

原文链接: 暮落晨曦

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

一、引入方式

  • 手动引入
  • CocoaPods
  • Carthage

二、引入前准备

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

新建工程 起名 RACImport

ReactiveCocoa(一) 环境集成(含Xcode8)_第1张图片
新建工程

三、手动引入

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第2张图片
RAC官方导入流程

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

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第3张图片
进入到工程目录中

对应到终端
ReactiveCocoa(一) 环境集成(含Xcode8)_第4张图片
终端命令进入文件夹

调用git初始化命令

git init

显示初始化成功如下图

初始化

然后调用命令

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

开始下载 Git 子模块


ReactiveCocoa(一) 环境集成(含Xcode8)_第5张图片
下载子模块

下载完毕后, 提示如下:


ReactiveCocoa(一) 环境集成(含Xcode8)_第6张图片
子模块下载完毕

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

2.运行子模块更新命令

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

git submodule update --init --recursive

运行结果如下:

ReactiveCocoa(一) 环境集成(含Xcode8)_第7张图片
运行命令后

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第8张图片
依赖库

注: 最新版本中添加了, 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

执行过程如下图

ReactiveCocoa(一) 环境集成(含Xcode8)_第9张图片

执行完成后, 此步骤完成

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

Xcode 8

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

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

导入ReactiveCocoa.xcodeproj
ReactiveCocoa(一) 环境集成(含Xcode8)_第10张图片
导入ReactiveCocoa.xcodeproj
导入ReactiveSwift.xcodeproj
ReactiveCocoa(一) 环境集成(含Xcode8)_第11张图片
导入ReactiveSwift.xcodeproj
导入Reuslt.xcodeproj
ReactiveCocoa(一) 环境集成(含Xcode8)_第12张图片
导入Result.xcodeproj

Xcode 7.3.1

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

导入ReactiveCocoa.xcodeproj
ReactiveCocoa(一) 环境集成(含Xcode8)_第13张图片
导入ReactiveCocoa
导入Reuslt.xcodeproj
ReactiveCocoa(一) 环境集成(含Xcode8)_第14张图片
导入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

ReactiveCocoa(一) 环境集成(含Xcode8)_第15张图片
添加两种Framework

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

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

设置 Bulid Settings 中的 EMBEDDED_CONTENT_CONTAINS_SWIFTYES

6.验证

上述几步完成后, 引入 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的支持的版本

1.创建并修改Podfile

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

pod init

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

open -a Xcode Podfile

打开后的界面如下图:


ReactiveCocoa(一) 环境集成(含Xcode8)_第16张图片

修改后, 如下图:


ReactiveCocoa(一) 环境集成(含Xcode8)_第17张图片

代码如下:

# 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

搜索结果如下:

ReactiveCocoa(一) 环境集成(含Xcode8)_第18张图片
Repo中的RAC版本

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第19张图片

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

pod repo update

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

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


ReactiveCocoa(一) 环境集成(含Xcode8)_第20张图片
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 错误

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第21张图片

解决问题 stackoverflow.com 链接

编译运行, 一切正常

4.验证

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

#import 

编译, 运行

    RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id 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

执行完毕, 效果如下:

ReactiveCocoa(一) 环境集成(含Xcode8)_第22张图片
carthage update执行完毕

3.将 Framework 引入工程

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第23张图片
Carthage update

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第24张图片
Framwork

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

ReactiveCocoa(一) 环境集成(含Xcode8)_第25张图片
Framwork

Xcode 8

编译通过, 一切正常

Xcode 7.3.1

编译通过, 一切正常

4.验证

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

#import 

编译, 运行

RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id 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 暮落晨曦

你可能感兴趣的:(ReactiveCocoa(一) 环境集成(含Xcode8))