XcodeにCarthageを入れてOSSライブラリを利用する
はじめに
いつのまにやらiOSのライブラリ管理ツールはCocoapodsよりもCarthageになってきているらしい cocoapodsでは必須だった謎のxcworkspaceは不要になり、全然良くわかってないがビルドの速度が上がるようだ
https://github.com/Carthage/Carthage
Carthageの読み方は町の名前のカルタゴではなく英語読みのカーセッジが一般的らしい
Carthageの良さについての日本語はCarthageのReadMeを訳した下記の記事が詳しい http://qiita.com/nori0620/items/b81ae171f0e82b0c2d8a
ゴール
- Carthageを利用できるようMac及びXcodeの設定
- サンプルプロジェクトにCarthageを適用し、httpクライアントの定番OSS Alamofireを入れて動作確認する
チーム開発が可能な形でGitで管理できる設定をする
Carthageの細かいバージョン指定や、ローカルや非公開のライブラリを取得するような細かい使い方は今回は調べない
動作環境
Carthageをhomebrewからインストール
# インストール > brew install carthage # インストールの確認でバージョン番号を調べる >carthage version 0.16.2
carthageをすでにインストールしてアップデートしたい場合もbrewのupgradeコマンドを素直に実行するだけで良い
> brew upgrade carthage
サンプルのXcodeプロジェクトを新規作成する
適当にSimpleViewApplicationのプロジェクトを作成する
git管理にする
プロジェクト作成時に、プロジェクト名を決めて設置する場所をしてするダイアログで 「Source Control」のチェックが入っていて、セレクトボクスMy Macになっていればローカル保存のGit管理にされていることになる
gitignoreファイルを作成する
xcodeのGit管理がだけが入っている状態ではxcode上では変更・削除されたファイルはxcodeのプロジェクトで管理されたものだけが表示されるが、 コンソールからxcodeのディレクトリに行き git statusで確認するとunstageなファイルとしてテンポラリーで利用するファイルがやらある
xcodeからはCartFileとかはコミットできないのかこの辺はよくわかってない
Githubが公開してくれているgitignoreファイルのテンプレートをつかう https://github.com/github/gitignore/blob/master/Swift.gitignore 上記テンプレートを見るとどうやらCarthegeで作られる余分なファイルにも対応してくれている
xcodeプロジェクト直下で以下のコマンドでgithubのテンプレートから.gitignoreファイルを作成する
> curl https://raw.githubusercontent.com/github/gitignore/master/Swift.gitignore > .gitignore
.gitignoreファイルから下記項目のコメントを外す
# Carthage/Checkouts Carthage/Checkouts
こうすることで、CarthageでDLしたライブラリのリポジトリをクローンしたソースコードが入っているだけなので、git管理を無視する対象にする。対象のライブラリのURLが無くなったり変わったりしないかぎり、ここを許容する必要が無いため
Carthageを使ってライブラリをインストールする
Cartfileファイルを作成
xcodeプロジェクトの直下にCartfileファイルを作成する
> touch Carthage
これを"Emacs"で編集する(vimで編集しようとするとmacが爆散します)
Cartfileファイルに内に以下のように追記して保存する 今回使うAlamofireをgithubからDLして利用できるようにする記述をしている
github "Alamofire/Alamofire"
AlamofireをCarthageを利用してビルド
ビルドには時間がかかるので、ビルド対象を選ばないと様々なプラットフォーム向けにビルドしてしまうので必要な物だけ利用する
# --platformオプションを付けてiOSを指定してビルドする > carthage update --platform iOS carthage update *** Fetching Alamofire *** Checking out Alamofire at "3.4.0" *** xcodebuild output can be found in /var/folders/lg/h7kjqrs51qs417r4ysy2z_3r0000gn/T/carthage-xcodebuild.COQug2.log *** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
/Carthage/Build/iOS/Alamofire.framework のコンパイルされたframeworkファイルが有るのが確認できる
XcodeのプロジェクトでAlamofireを利用する
Linked Frameworks and Librariesにライブラリを追加する
Xcodeでプロジェクトファイルを選択し、 Generalメニューを開く Linked Frameworks and Libraries の項目にあるリストに、 Finderで/Carthage/Build/iOS/Alamofire.framework を選択しドラックアンドドロップで追加する
またプラスボタンでダイアログを使って追加することも出来る。
Run Scriptの追加
Xcodeでプロジェクトファイルを選択し、 Build Phraseメニューを開く
プラスボタンを押し、「New Run Script Phrase」を選択する 選択すると「Run Script」と言う項目が追加されるので、そこをクリックして詳細設定を開く
ここでまず「Shell」の下にある黒い部分に以下を追記する
/usr/local/bin/carthage copy-frameworks
つぎにinput fileにあるプラスボタンを押し以下の様に、Alamofire.frameworkのパスを追加してやる。
$(SRCROOT)以降はどこでAlamofire.frameworkをコンパイルしてもこのパスで書かなければならないっぽい、ここもよくわかってない
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
Alamofireを利用してみる
ViewController.swiftファイルのviewDidLoadメソッド内に、 Alamofireを利用してTwitterのトップページを取得してコンソールに出力するコードを追加する これでシミュレータを起動してコンソールにHTMLが吐き出される
import UIKit # 追記 import Alamofire class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() # ここから追加 Alamofire.request(.GET, "https://twitter.com/") .responseString { response in print(response.result.value) } # 追加終わり } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
refs: * https://github.com/Carthage/Carthage * http://blog.dalt.me/1199 * http://blog.morizotter.com/2015/07/19/how-to-carthage-distribution/
買っておいて損はない
- 作者: 荻原剛志
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/12/25
- メディア: 単行本
- この商品を含むブログを見る