CocoaPodsのまとめ(Xcode13.2.1、M1チップ対応)

#参考リポジトリ

https://github.com/rwakizaka7/ArchitectureIOs/releases/tag/v3

個人的には、ライブラリがしっかりローカルに保存されるので、SwiftPMより、
Cocoapodsの方が安心感があります。Github等のリポジトリ等が削除されても、
プロジェクトのPodsフォルダにライブラリがあるのでリポジトリ管理できる。

##1. Homebruwのインストール

```
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

パスを通す（bash利用時は~/.bashrc）

```
% vi ~/.zshrc
export PATH=$PATH:/opt/homebrew/bin
% source ~/.zshrc
```

##2. CocoaPodsのインストール

```
$ sudo gem install cocoapods
$ pod setup
```

##3. CocoaPods環境を作る
Podfileを作成する。
CococaPodsでインストールするライブラリを指定する。

```
$ pod init
$ vi Podfile
```

###バージョン指定について
例：v13.2.1
メジャーバージョン ... 13の部分。互換性がない修正バージョン
マイナーバージョン ... 2の部分。互換性がある1つ以上の機能追加
パッチ ... 1の部分。マイナーバージョンのバグ修正

つまり、機能面で同じ動作を保証するにはパッチのみをあげればよい。
<b>マイナーバージョンを上げるには動作確認する必要がある。</b>

参考：https://dev.classmethod.jp/articles/versoning-with-pictures/

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

target 'ArchitectureIOs' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for ArchitectureIOs
  # 完全一致バージョン
  # pod 'Alamofire', '5.3.0'
  # それより上バージョン
  # pod 'Alamofire', '> 5.3.0'
  # それ以上バージョン
  # pod 'Alamofire', '>= 5.3.0'
  # それより下バージョン
  # pod 'Alamofire', '< 5.3.0'
  # それ以下バージョン
  # pod 'Alamofire', '<= 5.3.0'
  # 同一マイナーバージョンで最大
  pod 'Alamofire', '~> 5.3.0'
end
```

参考：https://note.com/iga34engineer/n/nf1930c395730

##3. プロジェクトにpodを適用する
Podフォルダ内にライブラリをインストールする。

###ライブラリをPodファイルにインストール

```
$ pod install
$ pod install --repo-update
```

--repo-updateはローカルに保管されたライブラリの更新時に行う。
m1チップの時は「m1チップの時のpod install時にffiを使用する対処」を参照
次から起動時は「.xcworkspace」を使用する。

###インストールしたライブラリ

Podfile.lockにはpod installでインストールした、ライブラリのバージョンが記載される。大事なファイルなのでGitなどバージョン管理ソフトの対象にする。

再度、pod installをした場合は、このファイルを元に同じライブラリを取得します。ただ、ライブラリが廃止される可能性もあるので、Podsフォルダ内はリポジトリ管理することが公式で推奨されている。

参考：https://qiita.com/SatoshiN21/items/8c5308432b3f09b100bc

```
PODS:
  - Alamofire (5.3.0)

DEPENDENCIES:
  - Alamofire (~> 5.3.0)

SPEC REPOS:
  trunk:
    - Alamofire

SPEC CHECKSUMS:
  Alamofire: 2c792affbdc2f18016e08fdbcacd60aebe1ba593

PODFILE CHECKSUM: c23ce754a08ea402be3a502649f0ea1616b51ecc

COCOAPODS: 1.11.2
```

###最新版へライブラリをアップデート

```
$ pod update
```

Podfileの指定バージョンで最新バージョンに更新します。未対応のライブラリで更新される場合もあり、pod install/pod update実行前の、Podfile.lockから適切なバージョン推測してPodfileを編集してpod updateをする。

##a. podトラブル解消

```
$ sudo gem install cocoapods-deintegrate cocoapods-clean
$ pod deintegrate
$ pod clean
```

参考：https://stackoverflow.com/questions/16427421/how-to-remove-cocoapods-from-a-project

##b1. CocoaPodsのバージョンアップ
```
$ sudo gem install cocoapods
```

##b2. CocoaPodsのバージョン合わせ

最大のバージョンが使用されるが、使用するCocoaPodが動かないとpodコマンドを受け付けなくなるので注意が必要になる。

```
$ pod --version
$ sudo gem install -n /usr/local/bin -v 1.5.0 cocoapods
$ sudo gem uninstall cocoapods --version=1.5.0
```

##c. m1チップの時のpod install時にffiを使用する対処

```
$ sudo arch -x86_64 gem install ffi
$ arch -x86_64 pod install
```

参考：https://developer.apple.com/forums/thread/652822

##d. このPodプロジェクトの最小バージョンによるワーニング
対象バージョンを最小iOS12以上にXcodeが推奨しているだけです。
チェックを外してDoneでOKを押す。
ここでチェックを入れると、CocoaPodsで自動生成するPodフォルダ内のプロジェクトを編集してしまう。

参考：https://stackoverflow.com/questions/64052611/prompted-to-update-ios-deployment-target-to-12-0-when-deployment-set-to-ios-10-0

![スクリーンショット 2022-02-06 18.35.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545849/cb8d8676-aa7d-bd21-49b3-d751e8b4c23d.png)

#番外

https://github.com/rwakizaka7/ArchitectureIOs/releases/tag/v2.5

CocoaPodsなどバージョン管理ツールを使わない場合は、Github等でライブラリのプロジェクトフォルダ（プロジェクトファイルを含むフォルダ）をプロジェクトに含めて、プロジェクトのTAEGETSのTarget、General、Frameworks, Libraries, and Embedded Contentからプロジェクトフォルダを指定するだけで使用できるようになる。

##1.バッケージ追加

XcodeのMenuBarのAdd Packages...
Add Local...

![スクリーンショット 2022-02-06 20.43.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545849/777994c7-79a5-95bc-9474-998a855b729f.png)

Githubなどから持ってきたライブラリのプロジェクト

![スクリーンショット 2022-02-06 18.50.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545849/df5768c7-4f04-5cb6-e61e-8d61289e8d1f.png)

Frameworks, Libraries, and Embedded Content > + > Alamofire

![スクリーンショット 2022-02-06 19.22.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545849/5f1ab4d6-027a-2c45-eaea-09563077e948.png)

ここまででCocoapodsと同じ環境になる。

![スクリーンショット 2022-02-06 18.42.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545849/3ec18706-372f-0f65-756b-35b476beb0ed.png)