iOS開発でサードパーティ製frameworkの導入をお手軽に

  • 36
    Like
  • 0
    Comment
More than 1 year has passed since last update.

背景

iOSアプリを開発しているとき、サードパーティ製のframeworkを使うことがあります。例えば、revealはツールを使ううえでprojectにframeworkの導入が必要ですし、広告SDKなどもframeworkや静的ライブラリを導入する必要があります。

このとき、クッソ丁寧なscreenshot付きの導入手順で解説してくれるのは良いのですが、fileをD&Dでprojectに追加したり、Xcodeの設定の海をかき分けながら注意深く設定を追加する必要があったりします。
設定が一度切りならまだしも、新しいprojectのたびに同じようなことをするのは怠惰を美徳とするエンジニアにとっては苦痛です。

CococaPodsを知っている開発者としては、「それCocoaPodsでできるよ」で済ましたいものです。ですので、済むようにしましょう。

手順

今回はrevealを例にpodを作成します。すでにrevealにはspecがありますが、ここでは例として自分で書いてみます。
まずはpodspecのひな形を作ります。

$ mkdir reveal_pod
$ cd reveal_pod
$ pod spec create reveal
$ ls
reveal.podspec

そこに必要な設定を書き加えます。今回必要な設定は以下の三点です。

  • 用意されたReveal.frameworkを使う
  • CFNetwork, QuartsCoreのframeworkをprojectに追加
  • other link flags-ObjCを追加

上記の設定をPodspec Syntax Referenceを参考に記述すると以下のようになります。
外部に公開するためのpodならきちんと説明やlicenseを加えるべきですが、これはlocalでしか使わないので最小限の設定のみとします。

reveal.podspec
Pod::Spec.new do |s|
  s.name                = "reveal"
  s.version             = "1.0.3"
  s.frameworks          = "CFNetwork", "QuartzCore"
  s.vendored_frameworks = "Reveal.framework"
  s.compiler_flags      = "-ObjC"
end

上記のpodspecを用意したら、podspecが参照する導入Reveal.frameworkを、作成したreveal.podspecと同じ所に配置します。

$ cp /opt/homebrew-cask/Caskroom/reveal/latest/Reveal.app/Contents/SharedSupport/iOS-Libraries/Reveal.framework .

ここまで来たら、導入対象のprojectのPodfileに作成したpodを追加します。
localのpodはpathを使うことで指定することができます。

Podfile
pod "reveal", :path => "<reveal.podspecのあるdir>"

あとはpod installで導入です。

$ pod install
Fetching podspec for `reveal` from `~/projects/reveal_pod`
Downloading dependencies
Installing reveal
Generating Pods project
Integrating client project

あとは期待通り動くか確認しましょう。
うまく行ったら、次回からはPodfileを記述してpod installするだけで導入完了です!

さいごに

podの作成は意外と簡単で、それでいて上記のようにサードパーティ製ツールの導入手順をpod 'hoge'で終わらせることができるようになります。

また、個人で作っているprojectから小さくてもpodとして切り出していくと、「このframeworkは何に依存してる?」とか、「このflag消したら動かなくなっちゃった」みたいなproject内の依存関係を自分の頭で処理しなくても済むようになります。

Cocoapodsはpod installだけしてる、みたいな方も、自分で何度もコピペして再利用しているようなコードはpod化すると未来の自分が幸せになれます。

よかったらそれをさらにcocoapods.orgに登録してみんなが使えるようにするとハッピーですね!

参考リンク