<commit_before>---
layout:     post
title:      "Carthage的使用"
subtitle:   ""
date:       2015-04-06 11:00:00
author:     "steven"
catalog:    true
tags:
    - IOS
---

Carthage 是一个轻量级的项目依赖管理系统，比CoCoaPods更灵活，对项目的侵略性比较小。

Carthage是使用xcodebuild来将第三方类库编译为二进制库，剩下的集成工作由开发人员完成。

CocoaPods和Carthage相比，CocoaPods是一个生态，可以方便的查找和集成第三方代码库。Carthage是一个去中心化的依赖管理系统，不提供能依赖的项目列表，减少维护成本和单点失败的概率。不好的地方就是找第三方类库没CocoaPods那么方便。

Carthage还有一个好处就是依赖的项目大部分都是从github 直接clone下来，速度还是比较快的。CocoaPods的情况就比较复杂，有的特别慢，比如Realm。

安装
---

1.使用Homebrew安装


```shell
brew update
brew install carthage
```

2.直接下载安装包，从[github/Carthage](https://github.com/Carthage/Carthage/releases)上下载安装包，安装就行了。


添加第三方库
---

和CocoaPads类似，需要在项目根目录下添加一个文本文件列出需要依赖的类库

文本文件的名称为“Cartfile”
然后在文件中写入要依赖的类库，如：


```java
github "RxSwiftCommunity/RxAlamofire" "master"
```

第三方类库中一般都会写明怎么使用carthage添加依赖，与CocoaPods差不多。


编译
---

执行命令：

```java
carthage update
```

就会开始clone和编译已经写入的类库。编译时，会在当前目录下新建一个Carthage文件夹和一个Cartfile.resolved文本文档。

Cartfile.resolved就是解析导入的第三方类库地址，将类库关联的所有其他类库及真实的版本号都导入。

Carthage文件夹下有两个文件夹：Build和Checkouts

Build 就是编译所有第三方类库时候生成的文件

Checkouts 里面就是从github上checkout下来的所有第三方类库的源码

默认情况下会编译所有支持的平台，如TvOS,mac,watchOS和IOS，也可以指定要编译的目标平台，如IOS:

```java
carthage build --platform iOS
```

导入第三方类库
---

打开项目，在项目的Target -> Build Phases -> Link Library with Libraries下，将Build文件夹下的所有. framework文件都导入进去。

添加额外的编译脚本：点击Build Phases左上角的加号，选择添加 “New Run Script Phase”,点击后会在该页面的最下方添加一个“Run Script”模块，在黑色背景的文本框内输入：

```shell
/usr/local/bin/carthage copy-frameworks
```

然后在下方的“Input Files”中添加所有导入的frameWork文件的路径，如：

```java
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
```

之所以需要这个做是因为Appstore 提交应用的一个BUG:[ App Store submission bug](http://www.openradar.me/radar?id=6409498411401216)

导入完成之后就可以在代码中使用添加的类库了。<commit_msg>Update 2015-04-06-Carthage的使用.md<commit_after>---
layout:     post
title:      "Carthage的使用"
subtitle:   ""
date:       2015-04-06 11:00:00
author:     "steven"
catalog:    true
tags:
    - IOS
---

Carthage 是一个轻量级的项目依赖管理系统，比CoCoaPods更灵活，对项目的侵略性比较小。

Carthage是使用xcodebuild来将第三方类库编译为二进制库，剩下的集成工作由开发人员完成。

CocoaPods和Carthage相比，CocoaPods是一个生态，可以方便的查找和集成第三方代码库。Carthage是一个去中心化的依赖管理系统，不提供能依赖的项目列表，减少维护成本和单点失败的概率。不好的地方就是找第三方类库没CocoaPods那么方便。

Carthage还有一个好处就是依赖的项目大部分都是从github 直接clone下来，速度还是比较快的。CocoaPods的情况就比较复杂，有的特别慢，比如Realm。

安装
---

1.使用Homebrew安装


```shell
brew update
brew install carthage
```

2.直接下载安装包，从[github/Carthage](https://github.com/Carthage/Carthage/releases)上下载安装包，安装就行了。


添加第三方库
---

和CocoaPads类似，需要在项目根目录下添加一个文本文件列出需要依赖的类库

文本文件的名称为“Cartfile”
然后在文件中写入要依赖的类库，如：


```java
github "RxSwiftCommunity/RxAlamofire" "master"
```

第三方类库中一般都会写明怎么使用carthage添加依赖，与CocoaPods差不多。


编译
---

执行命令：

```java
carthage update
```

就会开始clone和编译已经写入的类库。编译时，会在当前目录下新建一个Carthage文件夹和一个Cartfile.resolved文本文档。

Cartfile.resolved就是解析导入的第三方类库地址，将类库关联的所有其他类库及真实的版本号都导入。

Carthage文件夹下有两个文件夹：Build和Checkouts

Build 就是编译所有第三方类库时候生成的文件

Checkouts 里面就是从github上checkout下来的所有第三方类库的源码

默认情况下会编译所有支持的平台，如TvOS,mac,watchOS和IOS，也可以指定要编译的目标平台，如IOS:

```java
carthage build --platform iOS
```

导入第三方类库
---

打开项目，在项目的Target -> Build Phases -> Link Library with Libraries下，将Build文件夹下的所有. framework文件都导入进去。

添加额外的编译脚本：点击Build Phases左上角的加号，选择添加 “New Run Script Phase”,点击后会在该页面的最下方添加一个“Run Script”模块，在黑色背景的文本框内输入：

```shell
/usr/local/bin/carthage copy-frameworks
```

然后在下方的“Input Files”中添加所有导入的frameWork文件的路径，如：

```java
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
```

之所以需要做这一步是因为Appstore提交应用的一个BUG:[ App Store submission bug](http://www.openradar.me/radar?id=6409498411401216)

导入完成之后就可以在代码中使用添加的类库了。
{'fraction_non_alphanumeric': 0.10612475303415185, 'fraction_numerical': 0.02032176121930567, 'mean_word_length': 7.072892938496583, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2541473', 'n_tokens_mistral': 2237, 'n_tokens_neox': 2432, 'n_words': 173}