iOS (Swift & Objective-C & Xcode)iOS从入门到放弃ReactiveCocoa

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

2016-09-12  本文已影响1169人  暮落晨曦

原文链接: 暮落晨曦

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

一、引入方式

二、引入前准备

本教程使用 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 暮落晨曦

上一篇下一篇

猜你喜欢

热点阅读