【Swift UI】CocoaPodsのインストール方法と使い方!
この記事からわかること
- Swiftのライブラリ管理ツールとは?
- CocoaPodsのインストール方法と使い方
- プロジェクトへの導入方法
- ライブラリのインストール方法
- gemとは?
- PodFileとは?
- Podfile.lock/ Podsディレクトリ/プロジェクト名.xcworkspaceとは?
- [BUG] Bus Error at 0x0000000102f38000 ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]の解決法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
iOSアプリ開発を補助するための便利で多彩なライブラリを導入することができる「CocoaPods」についてまとめていきます。
CocoaPods(ココアポッズ)とは?
CocoaPods(ココアポッズ)はObjective-C時代から使用されているツールであり、今でも使用されているツールの1つです。公式ドキュメントには以下のように記載されています。
公式ドキュメントより引用
CocoaPodsとはObjective-CまたはSwiftのCocoaプロジェクト依存関係マネージャーです。9万以上のライブラリが管理されており300万以上のアプリで実際に使用されています。
CocoaPodsとは要するにライブラリ管理ツールです。同じようなライブラリ(※)の依存関係管理ツールとして「Carthage」や「Swift Package Manager」などがあります。
おすすめ記事:【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール
おすすめ記事:【Swift】Carthageの導入と使い方!ライブラリ管理ツール
※ライブラリとは汎用性の高い特定の機能や処理をまとめたプログラムのこと
膨大にあるライブラリは「AをインストールしたらBもインストールしてないと動かない」といった依存関係を有しているものも多く、それらを手動でインストールするのは非常に困難です。その依存関係を考慮して自動でインストールまたはアンインストールしてくれるのがCocoaPodsを始めとしたライブラリ管理ツールのメリットです。
CocoaPodsのメリットと違い
複数存在する依存関係管理ツールの中でもCocoaPodsは以下のような特徴と違いを持っています。
- コマンドラインから操作
- ライブラリが豊富
- Rubyが使用されている
- 操作が簡単
他のツールに比べて歴史のあるツールのため圧倒的に対応しているライブラリが多いのが大きなメリットです。
インストールの手順
インストール手順は公式ドキュメントにも記載されていますが流れを記しておきます。
インストール手順と使用までの流れ
- ターミナルを起動
- CocoaPodsをインストール
- 設定ファイルの生成
- プロジェクトにライブラリをインストール
インストールの手順は1.2だけです。まずはターミナルを起動します。続いて起動したまま公式ドキュメントにも記載されているインストールコマンドを実行します。
$ sudo gem install cocoapods
sudo
はスーパーユーザー(管理者)でコマンドを実行するためのコマンドです。パスワードを問われるので管理者のパスワードを打ち込み実行します。以下のように出ればインストールは成功です。
$ sudo gem install cocoapods
Password:
Fetching concurrent-ruby-1.1.10.gem
Fetching i18n-1.12.0.gem
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
33 gems installed
最後に正常にインストールできているかバージョンを確認してみてください。
$ pod --version
1.15.5
gemとは?
gem(ジェム)とは日本で開発されたプログラミング言語Rubyのパッケージ管理システムです。MacにはデフォルトでRubyが導入されており、gemも同様に組み込まれているので特別な操作は必要なくコマンドを実行することができます。
使っているMacのモデルやバージョンによってはRubyのバージョンなどが異なる場合がありエラーが発生することもありますが、Rubyをバージョンアップすれば解決できると思います。
なぜRubyなのかというとCocoaPods自体がRubyを使って作成されているからです。
gem以外のインストール方法
Cocoa Podsを公式の手順ではmacOSにデフォルトで組み込まれているRubyのgemを使用することになります。しかし大元となるシステムでインストールするにはそれなりのリスクもあり、また管理者権限での実行が必須になります。
公式にもその他のパッケージ管理システムを使用してもインストール可能と明記されています。
方法1:Homebrew
Homebrew(ホームブルー)はmacOSのパッケージ管理システムです。Homebrew自体をインストールする必要はありますが分かりやすく管理できます。
おすすめ記事:【Mac】Homebrewの使い方と環境変数の通し方!
$ brew install cocoapods
方法2:rbenv
rbenvとはRubyのバージョン管理ツールです。rbenv自体もHomebrewを使ってインストールすることが可能です。
rbenvの中にはRubyが入っており、gemも使用できます。なのでシステムのRubyではなく、新規で組み込んだRubyで管理することになります。
おすすめ記事:【Mac】Cocoa PodsをHomebrewとrbenvでインストールする方法!
バージョンを指定してインストールする
バージョンを指定してインストールするには-v
の後に任意のバージョンを渡します。
$ sudo gem install cocoapods -v バージョン
インストールできるバージョンは以下のサイトから確認できます。
Homebrewではなぜかうまくインストールできませんでした。
$ brew install cocoapods -v バージョン ×
CocoaPodsの使い方
インストール手順と使用までの流れ
- ターミナルを起動
- CocoaPodsをインストール
- 設定ファイルの生成
- プロジェクトへの反映
CocoaPodsをインストールすることが完了したので3.4部分である実際の使用方法を見ていきます。CocoaPodsはプロジェクト単位でライブラリを管理できます。プロジェクト内に「PodFile」という名前の設定用ファイルを設置し、必要に応じて書き込みながら使用していきます。
PodFileを作成する
「PodFile」は手動で作成するのではなくターミナルからコマンドを実行して作成します。ターミナルを起動し、カレントディレクトリを管理したいプロジェクトに合わせます。
$ cd プロジェクトまでのパス
合わせたら以下のコマンドを実行すると「PodFile」がプロジェクトファイル内直下に作成されます。
$ pod init
PodFileの中身
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target '(プロジェクト名)' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for (プロジェクト名)
end
PodFileの中身は上記のようになっており、Rubyを使って記述されています。#
はコメントアウトされている箇所です。
設定ファイルでできることはライブラリの追加です。諸々の設定が終わった後にtarget '(プロジェクト名)' do〜end
の間に追加したいライブラリを記述し、再度後述しているpod install
を実行することでライブラリがプロジェクトにインストールされます。
ライブラリを追加した例
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target '(プロジェクト名)' do
use_frameworks!
pod 'Google-Mobile-Ads-SDK'
end
任意のバージョン指定したライブラリを追加した例
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target '(プロジェクト名)' do
use_frameworks!
pod 'RealmSwift', '1.8.0'
end
プロジェクトにライブラリをインストール
pod init
コマンドは設定ファイルを作成しただけなのでプロジェクトに実際に反映(ライブラリをインストール)させるには以下のコマンドを実行します。
$ pod install
実行するとプロジェクトファイル内にさらに3つのファイルが作成されます。
このタイミングで以下のようなエラーが発生することがあります。解決方法は後述しています。
$ pod install
/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.4/lib/ffi/library.rb:275: [BUG] Bus Error at 0x0000000102f38000
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]
-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
-- Control frame information -----------------------------------------------
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: https://www.ruby-lang.org/bugreport.html
[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.
zsh: abort pod install
作成される3つのファイルの使い方
pod install
の実行は追加するライブラリを記述していなくても実行できます。実行された以下の3つのファイルにはそれぞれ役割があります。
自動生成された3つのファイル
- Podfile.lock
- Podsディレクトリ
- プロジェクト名.xcworkspace
Podfile.lock
「Podfile.lock」の役割はインストールするバージョンの固定(指定)です。ライブラリを記述後インストールを実行すると自動的に最新バージョンがインストールされます。しかし「Podfile.lock」にそのライブラリの記述があれば、最新バージョンではなく、指定されたバージョンがインストールされます。
つまりそのプロジェクトで使用したいバージョンを「Podfile.lock」に記述しておけば、再度その「Podfile.lock」を参照してライブラリをインストールする際もバージョンの齟齬なくインストールが可能になります。
初回インストール時は「Podfile.lock」がありませんがpod install
実行後、自動でその時インストールしたバージョンが記述された状態で生成されます。
Podfile.lockの中身の例
PODS:
- Google-Mobile-Ads-SDK (9.8.0):
- GoogleAppMeasurement (< 10.0, >= 7.0)
- GoogleUserMessagingPlatform (>= 1.1)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
- GoogleUtilities/Environment (7.7.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.7.0):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (7.7.0):
- GoogleUtilities/Logger
- GoogleUtilities/Network (7.7.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.7.0)"
- GoogleUtilities/Reachability (7.7.0):
- GoogleUtilities/Logger
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
- nanopb/decode (2.30909.0)
- nanopb/encode (2.30909.0)
- PromisesObjC (2.1.1)
DEPENDENCIES:
- Google-Mobile-Ads-SDK
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
COCOAPODS: 1.11.3
Podsディレクトリ
「Podsディレクトリ」は実際にインストールされたライブラリファイルが格納されるディレクトリです。
ライブラリがない場合は最低限のファイルのみですが、インストールすると付随したファイルが「Podsディレクトリ」の中に格納されます。
中には「Pods.xcodeproj」というXcodeを起動するファイルが格納されていますが、実際にアプリ開発をするために起動させるのは次に紹介する「プロジェクト名.xcworkspace」です。
プロジェクト名.xcworkspace
「プロジェクト名.xcworkspace」は実際にアプリ開発をするXcodeを開くファイルです。
CocoaPodsを使用していく場合は今までの「プロジェクト名.xcodeproj」ではなく「プロジェクト名.xcworkspace」からXcodeを開いて開発をしていくことになります。
実際に「プロジェクト名.xcworkspace」から起動させてみるとナビゲータエリアのファイル構造部分には「アプリディレクトリ」と「Pods」ディレクトリが確認できます。
CocoaPodsの特徴まとめ
- Objective-CまたはSwiftのライブラリ管理ツール
- Rubyで構築されている
- ターミナルでインストールできる
- プロジェクトごとにライブラリを管理
- PodFile:設定ファイル
- プロジェクト名.xcworkspace:実際に開発するファイル
コマンド(更新やリセット)
ライブラリの更新
$ pod update
Pod Fileのリセット
$ pod deintegrate
[BUG] Bus Error at 0x0000000102f38000 ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]
解決方法
「gem install --user-install ffi -- --enable-libffi-alloc」の実行
pod install
コマンドを実行すると以下のようなエラーが発生してしまいました。
$ pod install
/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.4/lib/ffi/library.rb:275: [BUG] Bus Error at 0x0000000102f38000
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]
-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
-- Control frame information -----------------------------------------------
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: https://www.ruby-lang.org/bugreport.html
[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.
zsh: abort pod install
このエラーはどうやらM1チップのMacで上記のコマンドを実行時に発生することがあるようです。詳細は分かりませんがどうやらアーキテクチャの不一致が原因で発生してしまうようです。
解決するには以下のコマンドを実行すればOKです。
$ gem install --user-install ffi -- --enable-libffi-alloc
上記のコマンド実行後に再度pod install
を実行してみるとエラーを吐くことなく処理が終了しました。
$ pod install
Analyzing dependencies
Downloading dependencies
Generating Pods project
Integrating client project
Pod installation complete! There are 0 dependencies from the Podfile and 0 total pods installed.
[!] The Podfile does not contain any dependencies.
[!] Automatically assigning platform `iOS` with version `15.4` on target `Test` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
この解決法はGitHubに上げてくれる人がいたのでリンクを貼っておきます。
インストールされているライブラリのバージョンを確認する
インストールされているライブラリのバージョンを確認するにはpod outdated
コマンドを使用します。
$ pod outdated
Analyzing dependencies
The color indicates what happens when you run `pod update`
<green> - Will be updated to the newest version
<blue> - Will be updated, but not to the newest version because of specified version in Podfile
<red> - Will not be updated because of specified version in Podfile
The following pod updates are available:
- FirebaseAnalytics 10.6.0 -> 10.7.0 (latest version 10.7.0)
- FirebaseAuth 10.6.0 -> 10.7.0 (latest version 10.7.0)
- FirebaseCore 10.6.0 -> 10.7.0 (latest version 10.7.0)
- FirebaseCoreInternal 10.6.0 -> 10.7.0 (latest version 10.7.0)
- FirebaseDatabase 10.6.0 -> 10.7.0 (latest version 10.7.0)
- FirebaseInstallations 10.6.0 -> 10.7.0 (latest version 10.7.0)
- Google-Mobile-Ads-SDK 10.2.0 -> 10.3.0 (latest version 10.3.0)
- GoogleAppMeasurement 10.6.0 -> 10.7.0 (latest version 10.7.0)
私がSwift UI学習に使用した参考書
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。