【Swift】CocoaPods導入手順

#はじめに

今回はMacにCocoaPodsを設定し、SVProgressHUDを使ってライブラリを使うところまでをこの記事では行います。

##開発環境
OSX 10.11.3 (El Capitan) and macOS 10.12.4 (Sierra) and macOS 10.15.4 (Catalina)
Xcode 7.2.1 and Xcode 8.3.1 and Xcode 11.4.1
CocoaPods 0.39 and CocoaPods 1.2.0 and Cocoapods 1.9.1

#CocoaPodsの環境構築

CocoaPodsを設定します。
ターミナルで以下のコマンドを打ってください。

```sh
sudo gem install cocoapods
```
上記のコマンドが使えない方で、OSXがEl Capitan以降の方は、ターミナルで以下のコマンドを打ってください。
※Catalinaでは`sudo gem install cocoapods`でいけました

```sh
sudo gem install -n /usr/local/bin cocoapods
```

理由はこちらから
[MacOSX El Capitanでcocoapodsインストールが出来ない時の対処法](http://qiita.com/AcaiBowl/items/4bb4708de03e6ee14a4a)

次に、インストールが終わった段階で、以下のコマンドを打ちます。

```sh
pod setup
```

以上で完了です！！

#ライブラリの導入
ターミナルからCocoaPodsを使って、プロジェクトにライブラリを導入します。
まずターミナルから、以下の3つのコマンドを使ってプロジェクトファイルまで移動しましょう。

```
cd
//ディレクトリ移動

ls
//ファイルを表示

pwd
//現在のディレクトリを表示
```

詳しくはこちらから
[今さら聞けない！ターミナルの使い方【初心者向け】](http://techacademy.jp/magazine/5155)

##Podfileを生成
プロジェクトファイルを選択後、以下のコマンドを打ちます。

```sh
pod init
```

```pod init```はかならず行ってください。
理由はこちらから
[Cocoapods 1.0.0で注意すること](http://qiita.com/ShinokiRyosei/items/7187ffb71862aba7e240)

このコマンドでPodfileが自動的につくられます。
生成されたPodfileは、初期状態は以下の状態です。

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

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

  # Pods for sample-cocoapods

  target 'sample-cocoapodsTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'sample-cocoapodsUITests' do
    # Pods for testing
  end

end


```

Cocoapodsのバージョンが1.0.0の場合の、初期状態は以下のようになっています

```rb:Podfile
target 'アプリ名' do
  # Comment this line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for SampleLocation

  target 'アプリ名Tests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'アプリ名UITests' do
    inherit! :search_paths
    # Pods for testing
  end

end
```

この状態から4行目の```use_frameworks!```のコメントを取ります。
Cocoapodsのバージョンが1.0.0の場合は、```use_frameworks!```のコメントがすでに取れています。
これにより、Objective-Cにより作成されたライブラリでも、Bridging-Headerを作成する必要がなくなり、Swiftにより作成されたライブラリの場合は、コメントを取るのが必須なので、どちらにしても、#を消して有効化することをオススメします。
理由はこちら
[Swift 対応版 CocoaPods を使う](http://qiita.com/taketin/items/8264aeebc5a626c6d48f)

##Podfileを編集

今回はSVProgressHUDを使用しますので、以下のように編集します。

```rb
# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!

target 'アプリ名' do
pod 'SVProgressHUD'
end

target 'アプリ名Tests' do

end

target 'アプリ名UITests' do

end
```

Cocoapodsのバージョンが1.0.0の場合は以下のように編集

```rb:Podfile

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

target 'アプリ名' do
  # Comment this line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for SampleLocation
　pod 'SVProgressHUD'

  target 'アプリ名Tests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'アプリ名UITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

```

ライブラリのバージョンを指定したい場合は、

```rb
pod 'SVProgressHUD', '~> 1.1.3'
```

バージョン管理の書き方はこちら
[Cocoapodのバージョン管理](http://hacknote.jp/archives/15217/)

##ライブラリをインストール

初めてプロジェクトにライブラリを導入するときは、

```sh
pod install
```

2回目以降(ライブラリの追加や削除)は、

```sh
pod update
```
というコマンドを打ちます。

##コードの記入
以下のマークのxcworkspaceを開きます。
<img width="179" alt="スクリーンショット 2016-02-19 18.33.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/75302/19b48427-ecfc-f022-61a6-f6e52e50a9e3.png">

次に、ローダーを表示したい画面のViewController.swiftで
まず、ライブラリをインポートします

```swift
import SVProgressHUD
```

あとは、必要な箇所に

```swift
SVProgressHUD.show()
```
などと記述するだけです！

例えば、ViewController.swiftが表示されると同時に、ローディングを表示する場合は、以下のように書いていただければ、大丈夫です。

```swift:ViewController.swift
import UIKit
import SVProgressHUD // インポートは必ずここ

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        SVProgressHUD.show()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
```