はじめに
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を指定してみます。
$ 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でライブラリを追加します。
次に、BuildPhases -> New Run Script Phaseを選択
Run Scriptと言う項目が出てきたので、以下のキャプチャの様に入力
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との違いすらあまりわかっていない状態ですので、何か発見があったら、追記していこうと思います。