Carthage(カーセッジ)を使うとビルド時間が短縮

Carthage(カーセッジ)はSwift用のライブラリ管理ツールです。
Carthageは非常にシンプルです。CocoaPodsに比べての優位点は「コンパイル時間が短く」なります。
それはCarthageはライブラリをインストールすると、そのライブラリを事前にビルドして、フレームワークを作成してくれるため、CocoaPodsに比べコンパイル時間を短くすることができるのです。

Homebrewインストール

既にインストールしている方は本作業不要です。
私も使っていなかったのでインストールされているの?という状況だったので以下の通り確認しました。

$ brew -v
Homebrew 1.3.4
Homebrew/homebrew-core (git revision 875ec; last commit 2017-09-26)

インストールされていなければ

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

一応、最新版に更新

$ brew update

おっと、

・・・
Permission denied @ rb_file_s_symlink - (../../../Homebrew/completions/zsh/_brew, /usr/local/share/zsh/site-functions/_brew)

というエラーで怒られてしまいました。
このような場合は、

$ sudo chown -R $USER /usr/local

で/usr/local配下のオーナー権限を自分に付与します。-Rは配下のディレクトリも再帰的に権限付与するオプションです。

Carthageインストール

brewを使ってcarthageをインストールします。

$ brew install carthage
==> Downloading https://homebrew.bintray.com/bottles/carthage-0.27.0.sierra.bott
######################################################################## 100.0%
==> Pouring carthage-0.27.0.sierra.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/carthage/0.27.0: 69 files, 26.6MB

インストールできました。

外部ライブラリの導入

Swiftプログラムを作っていてインストールするベスト10には入っている
Alamofire
SwiftyJSON
のライブラリを導入してみたいと思います。
まずはライブラリをインストールしたいプロジェクトディレクトリへ移動します。

$ cd /Users/xxx/Documents/application/dummy/test000

touchコマンドなどを使ってフィアルを作成

$ touch Cartfile

Cartfileを以下のように編集します。

$ vim Cartfile

中身を以下のように書き換えます(最初は何もありません)

github "Alamofire/Alamofire"
github "SwiftyJSON/SwiftyJSON"

外部ライブラリをビルド

$ carthage update --platform iOS
*** Cloning SwiftyJSON
*** Cloning Alamofire
*** Checking out SwiftyJSON at "4.0.0"
*** Checking out Alamofire at "4.6.0"
*** xcodebuild output can be found in /var/folders/7n/d0mqckr94rb5s1lxbdm_h2700000gn/T/carthage-xcodebuild.7VicAW.log
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
*** Building scheme "SwiftyJSON iOS" in SwiftyJSON.xcworkspace

iOSのみをビルドします。少々時間がかかります。
インストールできました。

XCodeにてフレームワーク導入

プロジェクトファイルのGeneralタブから
f:id:englishskill:20171209225624p:plain
「Linked Frameworks and Library」にある「+」を押します。
f:id:englishskill:20171209225643p:plain
Frameworksを選択する画面で「Add Other…」を押します。
f:id:englishskill:20171209225654p:plain
先ほど外部ライブラリをビルドしたディレクトリでCarthage/Build/iOSへと移動してライブラリ名.frameworkを選びます。複数選ぶときにはcommandボタンを押しながら選択すると複数選べます。
f:id:englishskill:20171209225750p:plain


ライブラリが追加できたら、Build Phasesタブに移動して「+」ボタンから「New Run Script Phase」を選びます。
f:id:englishskill:20171209225829p:plain
「Run Script」が現れます。
Shellの下に

/usr/local/bin/carthage copy-frameworks

を入力します。
f:id:englishskill:20171209225911p:plain

「input Files」にて「+」ボタンを押し、以下のようにframwwork情報を記述します。

$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework

swiftファイルにて外部ライブラリをインポート

ViewController.swift
などで、

import UIKit
import SwiftyJSON
import Alamofire

のようにライブラリをインポートして利用します。