CocoaPods の Swift ライブラリを使えるようにする。

CocoaPods


CocoaPods がSwift に対応したと聞き、さっそく自分のプロジェクトでも使えるようにしてみました。

久しぶりにCocoaPods を使ったせいか、いろんなところでエラーが発生したので、その解消法が中心となります。OS は OS X Yosemite 10.10.1 です。

以前にCocoaPods を使ってみたときのお話はEZ-NET: CocoaPods を使ってオープンソースのライブラリをプロジェクトで簡単に管理する : Objective-C プログラミング に記しています。

Cocoapods 0.35 での Swift への対応方法

CocaPods 0.35 を Swift に対応させるには、次の準備が必要になるようでした。

そうして準備ができたら、普段通りに pod update などを使って Swift 対応パッケージを更新できます。

用意する Gemfile

プロジェクトに用意するGemfile は次の通りです。

source 'https://rubygems.org'

gem 'cocoapods', :git => 'https://github.com/CocoaPods/CocoaPods.git', :branch => 'swift'
gem 'cocoapods-core', :git => 'https://github.com/CocoaPods/Core.git'
gem 'xcodeproj',  :git => 'https://github.com/CocoaPods/Xcodeproj.git'
gem 'claide', :git => 'https://github.com/CocoaPods/CLAide.git'

プロジェクトの更新方法

Gemfile を用意したら、次のコマンドを実行します。

bundle install

このコマンドが正常終了すれば Swift 対応のCocoaPods を利用できるようになります。

Swift 対応

各プロジェクトごとにGemfile を作ってbundle install を実行しておけば、あとは従来通りの方法で CocoaPods の Swift ライブラリを利用できます。

たとえば、次のようなPodfile を用意したとします。

source 'https://github.com/CocoaPods/Specs.git'

platform :osx, '10.10'
pod 'SwiftyJSON', :git => "https://github.com/orta/SwiftyJSON", :branch => "podspec"

これでpod installpod update を行うと、該当するライブラリがフレームワークとして組み込まれ、すぐに利用できるようになります。

たとえば今回のSwiftyJSON の場合、名前空間が「SwiftyJSON」で定義されているので、これを使いたいコード内で、次のようにしてモジュールをインポートできます。

import SwiftyJSON

これで、このモジュールに含まれるオブジェクトをJSONSwiftyJSON.JSON のようにして利用できます。

自分の環境でCocoaPods をSwift 対応させてみたところ…

自分の環境でも CocoaPods を Swift に対応させようと、上記の手順でbundle install を実行したところで次のエラーが発生しました。

An error occurred while installing i18n (0.6.11), and Bundler cannot continue.

Make sure that `gem install i18n -v '0.6.11'` succeeds before bundling.

bundle install で失敗する

エラーメッセージの上に表示されていた警告には、次のメッセージが表示されていました。

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems.org/gems/i18n-0.6.11.gem)

どうやらHTTPS の証明書のチェックでエラーが発生している様子です。

サーバー証明書を更新する

ターミナルからrvm osx-ssl-certs status all を実行してみたところ、次のような結果が得られました。

Certificates for /etc/openssl/cert.pem: Old.

どうやら証明書情報が古い様子なので、次のコマンドを実行して、証明書情報を更新してみました。

rvm osx-ssl-certs update all

これで証明書情報が更新されて、先ほどのrvm osx-ssl-certs status all コマンドの出力結果もCertificates for /etc/openssl/cert.pem: Up to date. になりました。

これで無事にbundle install コマンドも成功するようになりました。

pod install で失敗する

rvm osx-ssl-certs status all コマンドが成功したので、さっそくpod install を実行してみたところ、次のエラーが発生しました。

[!] Invalid `Podfile` file: undefined method `source' for #<Pod::Podfile:0x007f9d9183fc08>. Updating CocoaPods might fix the issue.

そしてこのエラーは、用意しておいたPodfile の次の行で発生している様子でした。

source 'https://github.com/CocoaPods/Specs.git'

とりあえずpod update を実行してみたところ、処理が正常に終わった後で、次のメッセージがターミナルに表示されました。

CocoaPods 0.35.0 is available.
To update use: sudo gem install cocoapods\n
Setup completed (read-only access)

CocoaPods をアップデートする

どうやらCocoaPods のバージョンが古かったようで、次のコマンドを実行することで CocoaPods 0.35.0 をインストールできるようだったので、実行してみました。

sudo gem install cocoapods

そうしたところCocoaPods が無事にアップデートされて、pod install も成功するようになりました。