Swift

【Swift入門】CocoaPodsでライブラリをインストールする

はじめに

iOSアプリ開発において、だいたいのアプリには何かしらのライブラリが入っているのではないかなと思います。初心者の場合わりとこのあたりで躓いてしまう人が多いのではないのかなと思います。そこで今回はiOS開発において避けて通ることはできないライブラリの導入の仕方をまとめていきます。

ライブラリとは

ライブラリというのは、便利機能をまとめてくれて使いやすくしてくれているものです。色んな人が公開してくれていて、ありがたいことに自由に使うことができます。作るの大変だなーって思ってたとしても選ぶライブラリ次第ではそれさえ導入してしまえば自分で実装する部分は一瞬なんてことも合ったりします。多くのライブラリはgithubで公開されています。

ライブラリ導入ツール

開発しているアプリに使いたいライブラリを導入するためにはそれ用のツールが用意されています。
iOS開発で主流なのが、

  1. CocoaPods(ココアポッド)
  2. Carthage(カルタゴ or カーセッジ)

の2つです。

今回はCocoaPodsを利用してライブラリを導入したいと思います。

CocoaPodsのライブラリをインストールするまでの手順

CocoaPodsをインストールする

まずはCocoaPodsをインストールします。
これにはRubyの環境が必要になりますが、Macを使っている場合はデフォルトで備わっているので大丈夫です。

最初にターミナルで以下のコマンドを打ちましょう。


sudo gem update --system

ちなみにですがこのgemというコマンドがRubyのコマンドになっています。

次に、


sudo gem install cocoapods

または、エラーになる場合は、


sudo gem install -n /usr/local/bin cocoapods

を打ちましょう。

その後に、


pod setup

このコマンドを叩けば完了です!

この手順はパソコンが同じであれば1回やってしまえば他のアプリを作成する場合でも2回め以降はやる必要はありません。

Podfileの設定

ここから実際に、ライブラリを入れる手順になってきます。
CocoaPodsの場合、Podfileというファイルでどのライブラリをいれるかなどの管理をしていきます。

まずはこのPodfileを作成していきます。

ターミナルでプロジェクトファイルがある場所へと移動した状態で、


pod init

と叩いてください。

それによって自動的に中身もテンプレが入った状態のPodfileが作成されます。


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

target 'SampleApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for SampleApp
 
  target 'SampleAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'SampleAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

こんなかんじのファイルが作成されました。

僕はバージョン1.3.1を使用しています。
1.0.0より以前のものはこれとは違った形で作成されるのでバージョンアップすることをおすすめします。

Podfileに関して今回のようにpod initしなくても作成することはできなくはないのですがもろもろの設定をこの1つのコマンドでやってくれるのでこれでやるほうがいいと思います。

これで準備が整いました。

実際にライブラリをインストールする

SDWebImageをインストールする

今回SDWebImageというライブラリを入れてみたいと思います。
これは画像をURLから表示させたり画像をキャッシュさせたりするときに便利なライブラリでよく使われます。

ライブラリを導入したい場合はそのライブラリのgithubのページに飛びます。
SDWebImageのgithubのページはこちらです

Readmeの部分に導入の仕方がおそらく書いてあると思うので、CocoaPodsでの導入の仕方が書いてある部分を探します。


pod 'SDWebImage', '~> 4.0'

というように書くようにという部分がありました。

だいたいの場合は、


pod '「ライブラリの名前」', '「バージョン指定」'

で書かれていて、「,」移行のバージョン指定の部分は指定があるだけで大丈夫です。指定しない場合は最新版が入ります。

バージョン指定の仕方ですが、いろいろな仕方があって、

条件 指定
完全一致 ‘1.0’
1.0より上 ‘> 1.0’
1.0以上 ‘>= 1.0’
1.0未満 ‘< 1.0’
1.0以下 ‘<= 1.0’| |1.0.1以上1.1未満|’~> 1.0.1’

というようになっています。

Podfileに追加

今回は先程の、


pod 'SDWebImage', '~> 4.0'

PodFileに追加していきます。


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

target 'SampleApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for SampleApp
  pod 'SDWebImage', '~> 4.0'  // この行に追加しました

  target 'SampleAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'SampleAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

上の例のように書き換えてください。

これが完了したらターミナルでprojectファイルがある階層で


pod install

と打ちましょう。
そうするとライブラリのインストールが始まります。

このようになればインストール完了です!

SDWebImageを使って画像をいれることができました。(出典:https://moshimodogu.com/)

他にもライブラリをインストールしたい場合

さらに追加したい場合は同様にしてPodfileに導入したいライブラリを書いて、pod installをすれば大丈夫です。

Podfile.lockとは

ところで、先程SDWebImageを導入しましたが、その際に行ったpod installの後にPodfile.lockというファイルがいつの間にか出来上がっています。

これは現在どのバージョンのどのライブラリがインストールされているかを記録しているファイルです。


PODS:
  - SDWebImage (4.1.0):
    - SDWebImage/Core (= 4.1.0)
    - SDWebImage/Core (4.1.0)

DEPENDENCIES:
  - SDWebImage (~> 4.0)

SPEC CHECKSUMS:
  SDWebImage: 0e435c14e402a6730315a0fb79f95e68654d55a4

PODFILE CHECKSUM: f707910419a4ae47e7ede6817a45eeef6ba8a928

COCOAPODS: 1.3.1

こんなかんじになっています。

pod installをする場合は、このPodfile.lockをみて、インストールされていないものがあればインストールをしてくれるという仕組みになっているわけですね。

ライブラリのバージョンを更新する方法

一度インストールしたライブラリのバージョンを変更したい場合はどうすればよいでしょうか。

その場合は、


pod update

というコマンドを叩きます。ただし、これをするとPodfileにかかれているライブラリ全てがバージョン指定の範囲内で最新バージョンにアップデートされてしまうので注意です。

個別にアップデートしたい場合は、


pod update [ライブラリ名]

複数指定したい場合は


pod update [ライブラリ1] [ライブラリ2]

のようにスペースで区切ってつなげていけば大丈夫です。

まとめ

要点まとめ
  • インストールしたいライブラリはPodfileで管理
  • pod installでインストール
  • pod update でアップデート(個別指定もできる)

このようなかんじでした。どこかのタイミングでCarthageについても記事を書こうかなと思います。