酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

CocoaPodsでインストールしたRealmをCartageで管理するように変更する

もうかれこれRealmを使い出して、はや2年半くらいになります。

Realmは大きなライブラリなのでビルドする度にとても時間がかかっていました。ビルド1回終わるのに7〜8分かかってしまいます*1

その都度ブーブー言ってたわけなんですけれど、ようやく重い腰を上げてCarthageを使ってみることにしました。

Carthageはライブラリをあらかじめビルドしてframeworkを作っておいてリンクするだけなので、ビルド時間を短縮することができます。この話を聞いてRealmをCartageで管理させることを決意しました。

今回、ikatomoを例にしてRealm,RealmSwiftのインストールをCartage経由でおこなうようにしたいと思います。

CocoaPodsからRealmを削除する

Carthageで管理するのであれば、CocoaPodsで管理する必要はないので、PodfileからRealmを削除します。

pod 'RealmSwift'を削除しました。

Podfile

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

def shared_pods
#    pod 'RealmSwift'
    pod 'SDWebImage'
end

pod installを実行してRealmを削除します。

$ pod install

Analyzing dependencies
Removing Realm
Removing RealmSwift

これでRealmとRealmSwiftの削除が完了しました。

CarthageでRealmを追加する

次にRealmをCarthageで管理するためにCartfileを作成します。

$ touch Cartfile

Cartfileを生成しました。

Cartfile

github "realm/realm-cocoa"

インストールします。

$ carthage update

*** Fetching realm-cocoa
*** Downloading realm-cocoa.framework binary at "v2.9.0"
*** xcodebuild output can be found in /var/folders/vb/5rg....log

XcodeのプロジェクトからビルドしたRealm.frameworkを参照します。

ビルドフェーズにRub Scriptを追加します。

f:id:ch3cooh393:20170728153932p:plain

/usr/local/bin/carthage copy-frameworks

Input Filesに以下のframeworkを追加します。

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

f:id:ch3cooh393:20170728154048p:plain

*1:Realmのビルドだけではないけれど、ビルド時間の大半をRealmが占めているのでやっぱり目立っちゃいます