【Swift】Carthage導入手順

## はじめに
本記事では、ライブラリ管理ツールであるCarthageをMacにインストールし、SVProgressHUDをプロジェクトにインポートして、HUDを表示するところまでをやっていきます。

# 環境
macOS 10.12.1 (Sierra)
Xcode 8.1
[Homebrew](http://brew.sh/) 1.1.1
[Carthage](https://github.com/Carthage/Carthage) 0.18.1

# Homebrewのインストール

[Homebrewの公式ページ](http://brew.sh/)の最初に書いているコマンドをターミナルにコピペします。

<img width="877" alt="Homebrew_—_The_missing_package_manager_for_macOS.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/7e789b19-4b6a-5b71-125d-3c20fed2aef2.png">

該当のコマンドがこちら

```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

fishshellなどをお使いで、そのまま使えない方は、`bash`とターミナルで打って、bashにしてから使用してください。

これでHomebrew(以下、brew)のインストールは完了です。


# Carthageのインストール

続いて、brewを使用して、[Carthage](https://github.com/Carthage/Carthage)をインストールします。
[CarthageのREADME](https://github.com/Carthage/Carthage/blob/master/README.md)に従って、以下のコマンドをターミナルで打ちます。

```
brew install carthage
```

ここまでなら、Cocoapodsよりも簡単です。（同じくらい簡単かも）
これだけで、carthageのインストールも完了です。

# ライブラリの導入
では、これからCarthageを使って、ライブラリを導入します。
手順として、以下の4つのステップを踏みます。

1. Cartfileを生成
2. Cartfileの編集
3. Cartfileに記述したライブラリのインストール
4. Xcodeのプロジェクトにビルドしたライブラリの導入

Cartfileを生成する前に、該当のプロジェクトのフォルダまでディレクトリ移動しましょう。

## 1. Cartfileの生成
移動したところで、`touch`を使ってCartfileを生成します。

```
touch Cartfile
```

これで、まっさらなCartfileがつくられたので、Cartfileを編集していきます。

## 2. Cartfileの編集
SVProgressHUDのREADMEに記述されているように、Cartfileに以下のように記述します。

```:Cartfile
github "SVProgressHUD/SVProgressHUD"
```

Carthageは公開されているライブラリしか使えないため、`github "ライブラリのOwner/repository"`のように記述します。
大体READMEに記述してくれていますので、それに従いましょう。

続いて、編集してCartfileに従って、ライブラリを落とします。

## 3. Cartfileに記述したライブラリのインストール
Cartfileに従って、ライブラリをインストールする方法は以下のコマンドを打つだけです。

```
carthage update
```

OSなどを指定したい場合は、`--platform`でiosなどを指定してください。

```
carthage update --platform ios
```

これで、githubからクローンしてきたプロジェクトから、`〇〇.framework`を生成してくれます。
クローンしてきたプロジェクトはプロジェクトフォルダの`Carthage/Checkouts`に、生成したバイナリは`Carthage/Build`にそれぞれ入れてくれます。

`Checkouts`したもののうまくバイナリにできなかった場合などは、以下のコマンドを打ってあげると、Checkoutsからバイナリを生成し直してくれます。

```
carthage build
```

Checkoutsされたライブラリは、`Cartfile.resolved`に記述されますので、`Cartfile.resolved`に記述されているライブラリは個別に`update`や`build`をかけることができます。

例えば、以下のようにすることができます。

```
carthage update SVProgressHUD
```


## 4. Xcodeのプロジェクトにビルドしたライブラリの導入
作成したバイナリをXcodeプロジェクトに追加していきます。
まず
プロジェクトファイル > General > Linked Frameworks and Libraries
のプラスボタンから、`Carthage/Build`に入っているframeworkを追加します。

<img width="1140" alt="SampleCarthage_xcodeproj_と_「【Swift】Carthage導入手順」を編集_-_Qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/1931c215-7753-11e8-179d-a832c3f90909.png">


`Add Other...`を選択
<img width="886" alt="SampleCarthage_xcodeproj_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/3ccbc225-4f6c-9557-cc0c-a80dd2c85b26.png">

その後、Finderから`Carthage > Build > 該当のライブラリ.framework`を追加します。


<img width="991" alt="SampleCarthage_xcodeproj_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/bd336b78-e679-bb3b-ae24-eee431399d1b.png">

そうすると以下のようになります。
<img width="886" alt="SampleCarthage_xcodeproj_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/332f06c4-868e-578d-058b-67de432fd987.png">




続いて
プロジェクトファイル > Build Phases
の左上のプラスボタンから`New Run Script Phase`を選択し、新しいRun Scriptを作成します。

<img width="1163" alt="スクリーンショット_2016-11-24_2_23_21.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/35151d88-bb03-4a38-f401-1c4185232cf5.png">

そうすると、以下のように新しいRun Scriptがつくられます。
<img width="703" alt="SampleCarthage_xcodeproj_5.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/86e3d0c3-6096-51bd-59ef-f49bc7be6d23.png">


そして、Run Scriptの黒い部分に以下のスクリプトを追記します。

```:script
/usr/local/bin/carthage copy-frameworks
```

<img width="715" alt="SampleCarthage_xcodeproj_4.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/40b53f00-a3a8-0bb8-9de0-0ca9c783f0fc.png">

その後、該当のライブラリを`Input Files`にプラスボタンから追加していきます。
プラスボタンを押すと、`$(SRCROOT)/myfiles`となっているので、`myfiles`に`Carthage/Build/iOS/SVProgressHUD.framework`のように該当のライブラリのディレクトリを指定します。

**`$(SRCROOT)/Carthage/Build/該当のOS/該当のライブラリ.framework`はライブラリごとに追加していかなれけばなりません。**

今回の場合は以下のようになります。
<img width="781" alt="SampleCarthage_xcodeproj_6.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/f7726ee9-852a-db4a-f45c-1c3d2d0f3e35.png">


以上でライブラリの導入は完了です。
あとは、Swiftファイルにimportとコードを書いていけばOKです。

## コード
SVProgressHUDを導入する今回は`ViewController.swift`を以下のように編集します。

```swift:ViewController.swift
import UIKit
import SVProgressHUD // 追記

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        SVProgressHUD.show() // 追記
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
```

# サンプルプロジェクト

以下のURLにサンプルプロジェクトを上げていますので、参考にしていただければと思います。

https://github.com/ShinokiRyosei/SampleCarthage

# 参考URL

ブランチやバージョンの管理の仕方
[ライブラリ管理ツールCarthageのCartfileの書き方](http://egg-is-world.com/2016/02/01/carthage-cartfile/)

Carthageのコマンドや、そもそもCarthageって？的なスライド
[Carthageについて知りたいn個のこと](http://www.slideshare.net/syoikeda/carthagen)

# その他
わかりにくい点などございましたら、編集リクエストをお願いします。
また間違っている点がございましたら、コメントをいただけると幸いです。