【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(ココアポッズ)のトップページ

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は以下のような特徴と違いを持っています。

他のツールに比べて歴史のあるツールのため圧倒的に対応しているライブラリが多いのが大きなメリットです。

インストールの手順

インストール手順は公式ドキュメントにも記載されていますが流れを記しておきます。

インストール手順と使用までの流れ

インストールの手順は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

おすすめ記事:【CocoaPods:Error】Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5

最後に正常にインストールできているかバージョンを確認してみてください。

$ 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 バージョン

インストールできるバージョンは以下のサイトから確認できます。

Cocoa Podsの全バージョン履歴

Homebrewではなぜかうまくインストールできませんでした。

$ brew install cocoapods -v バージョン ×

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

「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ディレクトリの中身(ライブラリをインストール時との比較)

中には「Pods.xcodeproj」というXcodeを起動するファイルが格納されていますが、実際にアプリ開発をするために起動させるのは次に紹介する「プロジェクト名.xcworkspace」です。

プロジェクト名.xcworkspace

プロジェクト名.xcworkspace」は実際にアプリ開発をするXcodeを開くファイルです。

CocoaPodsを使用していく場合は今までの「プロジェクト名.xcodeproj」ではなく「プロジェクト名.xcworkspace」からXcodeを開いて開発をしていくことになります。

実際に「プロジェクト名.xcworkspace」から起動させてみるとナビゲータエリアのファイル構造部分には「アプリディレクトリ」と「Pods」ディレクトリが確認できます。

xcworkspaceからアプリ開発のXcodeを起動させている様子

CocoaPodsの特徴まとめ

コマンド(更新やリセット)

ライブラリの更新

$ 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学習に使用した参考書

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index