High SierraでCarthageをinstallする (RealmSwiftをinstallする)

はじめに

Carthageは、CocoaPodsのようなSwift製のライブラリ管理ツールです。
CocoaPodsも現役バリバリでライブラリ管理として非常に優れているのですが、workspaceを勝手に弄ったり、プロジェクトファイルを汚してしまうデメリットがあります。
Carthageはそのデメリットを払拭しており、余計なことをしません。

また、Carthage経由でライブラリをインストールすると、そのライブラリを事前ビルドしFrameworkを作成してくれるため、CocoaPodsよりコンパイル時間が短くなります。

新規で作ろうとしているアプリで、Realmを使おうと思い、RealmがCarthage対応しているため、Carthageをインストールしようとした際に、標題のHigh Sierra特有の壁にぶつかったので、どうやって解決したかを記載します。

ここでは、CarthageでRealmSwiftをinstallするまでをゴールとして紹介します!

Carthageをinstallする

以下のコマンドでinstallします。

$ brew install carthag

ただ、High Sierraの場合、以下のようにエラーになります。

==> Downloading https://homebrew.bintray.com/bottles/carthage-0.27.0.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring carthage-0.27.0.high_sierra.bottle.tar.gz
Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

または、既に入っているとかの場合は、以下のような警告になるケースもあります。

Updating Homebrew...
Warning: carthage 0.27.0 is already installed, it's just not linked.
You can use `brew link carthage` to link this version.

ただこの場合も、linkを貼ろうと以下のコマンドを叩くと

$ brew link carthage 
Linking /usr/local/Cellar/carthage/0.27.0... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

上記のように、結局Permissionで弾かれます。

過去に、以下の記事でbrewが入らないときの様にPermissionを指定してみます。

www.project-unknown.jp

$ sudo chown -R $(whoami):admin /usr/local 
chown: /usr/local: Operation not permitted

まさかの失敗。
どうやら、High Sierraではセキュリティの兼ね合い上、ガッツリディレクトリのPermissionを指定するのは無理っぽいです。

なので、今回の場合、結局

/usr/local/Frameworks

のディレクトリが無いのでエラーになっているだけっぽいので、手動でディレクトリを作成します。

$ sudo mkdir /usr/local/Frameworks 

Permissionを変えておきます。

$ sudo chown -R $(whoami):admin /usr/local/Frameworks

最後に、先程失敗したlinkを行います。

$ brew link carthage 
Linking /usr/local/Cellar/carthage/0.27.0... 4 symlinks created

うまく動きました。
後は、XCodeのプロジェクトファイルがある箇所で、RealmSwiftを入れていきます。

Cartfileを用意する

$ vim Cartfile

以下の様に編集します

github "realm/realm-cocoa"

RealmSwiftを導入する

vimを抜けて、以下のコマンドを入力します。

$ carthage update --platform iOS 

(このコマンド、メチャクチャ時間かかります…。

*** Cloning realm-cocoa
*** Downloading realm-cocoa.framework binary at "v3.0.2"
*** Skipped installing realm-cocoa.framework binary due to the error:
    "Incompatible Swift version - framework was built with 4.0.2 (swiftlang-900.0.69.2 clang-900.0.38) and the local version is 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)."
*** Checking out realm-cocoa at "v3.0.2"
*** xcodebuild output can be found in /var/folders/f2/63kqzhpd39g_kxw1zcv7bx2c0000gn/T/carthage-xcodebuild.1DLM2a.log
*** Building scheme "Realm" in Realm.xcworkspace
*** Building scheme "RealmSwift" in Realm.xcworkspace

正常にinstallが出来ました。
次にProjectのXCodeを開きます。

Projectファイルから、Linked Frameworks and Librariesでライブラリを追加します。

f:id:project-unknown:20180114200437p:plain

f:id:project-unknown:20180114200250p:plain

次に、BuildPhases -> New Run Script Phaseを選択

f:id:project-unknown:20180114200712p:plain

Run Scriptと言う項目が出てきたので、以下のキャプチャの様に入力

f:id:project-unknown:20180114200942p:plain

Shellの部分に

/usr/local/bin/carthage copy-frameworks

Input Filesの部分に、

$(SRCROOT)/Carthage/Build/iOS/Realm.framework
$(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework

これで導入が完了しました。
念のため、⌘ + Bでbuildしてみて、実行できるか確認します。

さいごに

今回は、導入まで記載しました。
Realmじたい、あまり知識が無いのと、CoreDataとの違いすらあまりわかっていない状態ですので、何か発見があったら、追記していこうと思います。