cocoapodsのpodのバージョン指定の書き方



#podのversion numberの指定指針
cocoapodsに限らず様々な所で`1.0.4`のようなバージョン情報を見たことがあると思います。
これは[セマンティックバージョン](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0#:~:text=%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%EF%BC%88%E8%8B%B1%E8%AA%9E%EF%BC%9ASemantic,%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E6%96%B9%E6%B3%95%E3%81%AE%E4%B8%80%E3%81%A4%E3%80%82&text=API%E3%81%AE%E5%A4%89%E6%9B%B4%E3%81%AB%E4%BA%92%E6%8F%9B,%E3%81%AF%E3%83%91%E3%83%83%E3%83%81%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%82%8B%E3%80%82)と呼ばれるバージョン管理方法で、.で区切られた数字はそれぞれ`major.minor.patch`と呼びます。
 major では重大なアップデートが行われます。
 minor では新機能のアップデートが行われます。
 patch ではバグの修正が行われます。
 
 major で重大な変更が行われることが多いので、 minor 以下のアップデートのみ行われるようにしたほうが良いでしょう。


##instagramのバージョン指針
instagramなどでは基本的にMajorバージョンをあげていき、細かい修正がある場合に Minorを使用するという管理方法もあります。
[リンク](https://apps.apple.com/jp/app/instagram/id389801252)を貼っておくので、確認してみると良いかもしれません。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409860/a4f2e0e1-12bf-37c4-ac79-512a469bb074.jpeg" width="400">


## version　指定の方法
バージョン指定の方法は大きく分けて３つあるのでそれぞれ記述していきます。
※ライブラリ名は適宜変更してください。

###1.固定バージョンの取得
`pod 'ライブラリ名', '1.0.4'`
このように指定した場合はversionが変更されることはありません。

###2.>, <によるバージョンを取得

`pod 'ライブラリ名', '>1.0.0'`
1.0.0より大きい最新バージョンを取得します。

`pod 'ライブラリ名', '>=1.0.0'`
1.0.0以上の最新バージョンを取得します。

`pod 'ライブラリ名', '<1.0.0'`
1.0.0未満の最新バージョンを取得します。

`pod 'ライブラリ名', '<=1.0.0'`
1.0.0以下の最新バージョンを取得します。

###3.~>によるバージョン取得

`pod 'ライブラリ名', '~> 1.1.0'`
1.1.xの範囲での最新バージョンを取得します。

`pod 'ライブラリ名', '~> 1.0'`
1.xの範囲での最新バージョンを取得します。

`pod 'ライブラリ名', '~> 1'`
1.xの範囲での最新バージョンを取得します。
こちらでもバージョンは取得できますが、`pod 'ライブラリ名', '~> 1.0'`と同じバージョンが取得されるのであまり使われない書き方です。

# 練習問題
このようなバージョンが存在していた場合、次のバージョン指定ではどのバージョンがインストールされるか考えてみてください。

```:バージョン履歴
1.0.0
1.5.2
1.9.3
2.0.0
```

Q1. '1.0.0'を指定された場合どのバージョンが選択されるでしょうか？
<details><summary>答えはこちら</summary>
正解は**'1.0.0'**です。
こちらは、[1.固定バージョンの取得](https://qiita.com/drafts/e2f9edc0f991eee22d9d/edit#1%E5%9B%BA%E5%AE%9A%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97)の問題です。
'1.0.0'は指定されたバージョンが選択されます。なので、答えは`1.0.0`です。
</details>

Q2. '> 1.0.0'を指定された場合どのバージョンが選択されるでしょうか？
<details><summary>答えはこちら</summary>
正解は**'2.0.0'**です。
こちらは、[2.>, <によるバージョンを取得](https://qiita.com/drafts/e2f9edc0f991eee22d9d/edit#2-%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97)の問題です。
'> 1.0.0'は'1.0.0'よりも大きいということなので、選択肢は`1.0.0 < x`となります。今回のバージョン履歴では、`1.5.2`, `1.9.3`, `2.0.0`が選択肢に入ります。
この中で最新のバージョンが選択されるので、`2.0.0`が答えです。
</details>

Q3. '<= 1.6.0'を指定された場合どのバージョンが選択されるでしょうか？
<details><summary>答えはこちら</summary>
正解は**'1.5.2'**です。
こちらは、[2.>, <によるバージョンを取得](https://qiita.com/drafts/e2f9edc0f991eee22d9d/edit#2-%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97)の問題です。
'<= 1.6.0'は'1.6.0'以下ということなので、選択肢は`0.0.0<= x <= 1.6.0`となります。今回のバージョン履歴では、`1.0.0`, `1.5.2`が選択肢に入ります。
この中で最新のバージョンが選択されるので、`1.5.2`が答えです。
</details>

Q4.　'~> 1.0.0' を指定された場合どのバージョンが選択されるでしょうか？
<details><summary>答えはこちら</summary>
正解は**'1.0.0'**です。
こちらは[3.~>によるバージョン取得](https://qiita.com/drafts/e2f9edc0f991eee22d9d/edit#3%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%8F%96%E5%BE%97)の問題です。
'~> 1.0.0'は'1.0.x'ということなので、選択肢は`1.0.0 <= x < 1.1.0`となります。今回のバージョン履歴では、`1.0.0`が選択肢に入ります。
この中での最新のバージョンが選択されるので、`1.0.0`が答えです。
</details>

Q5. '~> 1.0' を指定された場合どのバージョンが選択されるでしょうか？
<details><summary>答えはこちら</summary>
正解は**'1.9.3'**です。
こちらは[3.~>によるバージョン取得](https://qiita.com/drafts/e2f9edc0f991eee22d9d/edit#3%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%8F%96%E5%BE%97)の問題です。
'~> 1.0'は`1.x`ということなので、選択肢は`1.0 <= x < 2.0`となります。今回のバージョン履歴では、`1.0.0`, `1.5.2`, `1.9.3`が選択肢に入ります。
この中の最新バージョンが選択されるので、`'1.9.3'`が答えです。
</details>