見出し画像

【Swift】PodfileとPodfile.lockの使い分け【CocoaPods】

前回書いた記事はこちらです。
初歩的なライブラリインストールの為の情報を書いております。

また、私の環境がM1チップ環境ですが、バグに遭遇して、
pod installが正常に行えなかった事象をまとめております。

PodfileファイルとPodfile.lockファイル

画像1

プロジェクトファイルが存在するディレクトリを指定して、pod initを行うとPodfileファイルが自動生成されます。

その状態でpod installを行うとPodfile.lockファイルが自動生成されます。
(ライブラリを何も指定しなくても自動生成はされます)

最初にライブラリをインストールする際に、
Podfileファイルだけを触るので、Podfileだけを利用すればいいかと思いきや違います。

Podfile.lockファイルの存在意義

Podfile.lockファイルにバージョンを指定指定から、pod installを行うことで、ライブラリのバージョンをロック(固定)することができます。

なぜライブラリのバージョン固定が必要だったのか?

チーム開発での運用をイメージしてみてください。
2020年に入社し、ライブラリを導入して開発していたAさん。
2023年に入社し、プロジェクトに合流したBさん。

その間3年間、ライブラリもアップデートが重ねられているとします。

この状態でBさんがPodfile.lockファイルを指定しないで、
pod installを実行するとどういうことが予想されるでしょうか。

答えはAさんのライブラリと異なったライブラリが導入され、
github上でコンフリクト(衝突)が起きます。

また、動作面に関してもAさんが動いていた状態と
同じ状況ではないので、動作が保障されていません。

ここまで話した内容をまとめると、
プロジェクトの開発に用いているライブラリを特定バージョンに揃える為にPodfile.lockファイルでのバージョン指定が必要になります。

用途別の利用方法について

細かい仕様など説明して網羅すると、長い記事になってしまうので、
パターン別で要約します。

だいたいこのパターンだろう、って分類を行います。

・1.新規開発を行う際にライブラリを導入する場合
・2.先行開発者と同じライブラリを導入したい場合
・3.他のライブラリを追加で導入したい場合
・4.ライブラリをアップデートする場合

1.新規開発を行う際にライブラリをインストールする場合

1.Podfileの書き方

冒頭の記事でバージョン指定を行う必要がある場合の書き方を触れております。

しかしながら、基本的には無指定で最新版をインストールしてから
Podfile.lockで指定バージョンに固定する(変更する)でいいと思います。
(導入時は最新版を導入で問題ない為)

なので下記コードは、
SVProgressHUDを最新の状態でインストールしています。

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

use_frameworks!

target 'SwiftMVC' do
pod 'SVProgressHUD'
end

target 'SwiftMVCTests' do

end

target 'SwiftMVCUITests' do

end

1.Podfile.lockの書き方

今までの手順を行うとPodfileが以下のように自動生成されたかと思います。
これでOKです。

PODS:
 - SVProgressHUD (1.1.3)

DEPENDENCIES:
 - SVProgressHUD

SPEC REPOS:
 trunk:
   - SVProgressHUD

SPEC CHECKSUMS:
 SVProgressHUD: 748080e4f36e603f6c02aec292664239df5279c1

PODFILE CHECKSUM: 64caa2896155b905f8d8917e9deb4de0017958e0

COCOAPODS: 1.10.1

2.先行開発者と同じライブラリを導入したい場合

Podfile.lockファイルなどを触らずに、素直にpod installを行います。

pod installを実行する際にPodfile.lockファイルがある場合は、
Podfile.lockファイルに指定しているバージョンをインストールします。

無指定で良い理由は「1.新規開発を行う際にライブラリをインストールする場」で行った際のpod installで、Podfile.lockに自動でバージョンが記載されている為です。

なので、pod installを行った段階でPodfile.lockファイルのバージョン指定は完了しております。

これで終わりです。


3.他のライブラリを追加で導入したい場合

podfileファイルに1行ライブラリを追加して、pod installでOKです。

バージョン指定もPodfile.lockファイルに自動で書き込まれるので、
バージョン指定は不要です。

4.ライブラリをアップデートする場合

この作業は、注意が必要です。

また、「すべてのライブラリ」か、
「一部のライブラリ」かを確認しましょう。

実際に動いている開発プロダクトで全てのライブラリを一気にアプデすると、確認の工数を考えると可能性が低いと思いますので、実際に多く使われる場面でいうと一部のライブラリのアップデートが多いと思います。

その場合はpod updateを行ってください。
そうすると、最新版のライブラリがインストールされ、またPodfile.lockファイルも更新されます。

pod update SVProgressHUD // SVProgressHUDライブラリのみを更新

使う機会が限られますが、すべてのライブラリを更新する場合は、
pod updateと入力してください。

pod installとpod updateの使い分けについて

よく誤った捉え方をしている人がいますが、
ライブラリを新たに追加する場合は前述の通り、pod installを行います。

ライブラリを構成内容を更新するというイメージが先行するのか、
pod updateを行うのは誤りです。

その場合の挙動は以下のように異なります。

pod installの場合
→ 既存ライブラリはバージョン固定されているので変化なし、新規で追加されたライブラリのみを最新版で導入(バージョン指定でインストールも可能)

pod updateの場合
→ 既存ライブラリ・新規で追加されたライブラリも含め、すべてを最新の状態で導入



この記事が気に入ったらサポートをしてみませんか?