金曜日, 1月 23, 2015

天丼屋さんを教える

今回教えたのは天丼屋さんの場所。 平日でもお昼には行列が出来るくらい有名で、一度行ったことがあるけど確かにおいしかった。 駅から少し離れているのが難点で、今回道を聞かれたおじいさんも、駅から歩いてきて、なかなか辿り着けずに不安だった様子。 道沿いにあるので、見逃すことは無いはず。

木曜日, 1月 22, 2015

CarthageでGPUImageをSwiftから使う

CarthageでGPUImageをSwiftから使う

XCodeで何かを作ろうとした場合、標準のframework以外のフレームワークを導入したくなります。
Objective-Cな時代にはCocoaPodsを使うのが定石だったようですが、Swift時代にはどうしたらよいのか、調べていたところCarthage(カルタゴ)というものが存在している事を知りました。

https://github.com/Carthage/Carthage

備忘録代わりに、Carthageを使ってGPUImageを使ったアプリケーションを作成してみます。Carthageの使い方の説明を主とするため、アプリケーション自体は、GPUImageのSimpleSwiftVideoFilterExampleをそのまま用います。

https://github.com/BradLarson/GPUImage/tree/master/examples/iOS/SimpleSwiftVideoFilterExample

0. 前提

この記事はYosemite 10.10.1、XCode 6.1.1の環境で確認しています。
Carthageは0.4.0を使いました。
実機確認する場合、実機とiOS Developer Programへの登録が必要となります。

1. Carthageのインストール

CarthageのREADME.mdを読めば分かりますが、pkgファイル、Homebrew、makeの3通りの方法でインストール出来ます。
私はHomebrewでbrew install carthageしました。
2015-01-19時点で、Homebrew経由でインストールされるのは0.4.0でした。
pkg版は0.5.2まで上がっており、いろいろ機能が追加されているようですが、今回の場合は0.4.0の機能でも問題ありません。

2. XCodeプロジェクトを作る

ベースとなるXCodeプロジェクトを作ります。
XCodeを開き、”File -> New -> Project…”を選択し、”iOS -> SingleView Application”を選んで、Nextを押します。
次の画面でLanguageにSwiftを、DevicesにiPhoneを選びます。
他の項目は適当に入力してください。
Nextを押すと、プロジェクトの保存場所を選択すると、新しいプロジェクトが作られ、XCodeに表示されます。

3. Cartfileの作成

Cartfileを作成します。Cartfileは利用したいframeworkを記述したファイルです。npmのpackage.json、mvnのpomです。

作成したプロジェクトのディレクトリの*.xcodeprojと同じ階層に、Cartfileという名前のテキストファイルを作成し、以下のように記述します。

git "https://github.com/BradLarson/GPUImage.git" == 0.1.6

==の部分には他にも~>>=が使えます。バージョンはsemverで解決されるそうです。
対象となるリポジトリがgithubの場合、以下のような指定も出来ます。

github "BradLarson/GPUImage" == 0.1.6

4. 外部フレームワークのビルド

ターミナルで、プロジェクトのディレクトリに移動します。
その位置でcarthage updateを実行すると、対象のgitリポジトリからソースコードがプロジェクトディレクトリ下の”Carthage/Checkouts/”以下にコピーされます。
その後、ビルドが実行され、生成物がプロジェクトディレクトリ下の”Carthage/Build”以下に出力されます。

5. 外部フレームワークをプロジェクトに追加

XCodeのプロジェクトのTARGETSのGeneralタブにある、”Linked frameworks and Libraries”に、”Carthage/Build/iOS/GPUImage.framework”をドラッグアンドドロップします。

次にBuild Phasesタブの左上にある”+”を押し、”New Run Script Phase”を選びます。
Shell欄の下の”Type a Script or …”と書いてある欄に、/usr/local/bin/carthage copy-frameworksと入力し、”Input Files”に$(SRCROOT)/Carthage/Build/iOS/GPUImage.frameworkと入力します。

ここまででCarthageを使って、frameworkを導入するという作業は終わりました。後はコードを書いていくだけです。

6. コードを書く

ここからはCarthageとは関係なく、GPUImageViewの使い方になります。
最初にMain.storyboardを開き、ViewのCustom ClassをGPUImageViewに変更します。

次にViewController.swiftの内容を、SimpleSwiftVideoFilterExampleのそれと同じにします。

https://raw.githubusercontent.com/BradLarson/GPUImage/master/examples/iOS/SimpleSwiftVideoFilterExample/SimpleSwiftVideoFilterExample/ViewController.swift

7. 実行する

iPhoneに転送して実行してみましょう。

8. 感想

他言語における依存性解決ツールに比べると、やっていることは単純ですが、XCodeというGUIが大前提のツールと共存させようとすると、これが正解な気がします。
CocoaPodsとは違い、ソースのダウンロードとビルド以上の事は一切行わないところも、個人的には好感が持てます。
Bridging Headerもいらないので、これからは積極的に使っていき、かつ自分でライブラリを書くときも、*.frameworkを吐くように作ろうと思います。