CocoaPodsでインストールできるオリジナルライブラリを作成する(1)

#目次

[CocoaPodsでインストールできるオリジナルライブラリを作成する(1)](http://qiita.com/nakau1/items/ec8117d789c4fb2d697a)
[CocoaPodsでインストールできるオリジナルライブラリを作成する(2)](http://qiita.com/nakau1/items/cc22985e2aad15ca02ff)
[CocoaPodsでインストールできるオリジナルライブラリを作成する(3)](http://qiita.com/nakau1/items/c3ea1d60fa81bbd87890)
[CocoaPodsでインストールできるオリジナルライブラリを作成する(4)](http://qiita.com/nakau1/items/15e7187d422cbf8ffb7e)

> 注意
> 
> この話を書く上の例として、
> 自作ライブラリの名前として `"NeroBlu"` という名前をつけています
> 
> これは自分の屋号から取ってきた名前なので、ただの「サンプル名」としてご認識ください
> 名前は各自でご自由につけなおしてくださいね

#まえがき

iOS開発をやってると `CocoaPods` は何かと便利です

`Podfile` ひとつを書き換えるだけで
誰かの作った便利なクラスたちをポコッと自分のアプリに導入したり
不必要であればバサッと削除できたり
たまに融通効かないですけど、いいヤツです

で、

こいつを自分の作ったクラスで
自分のために導入できるとなれば更に便利ですね

どうせ、新しくアプリを作ることになっても
だいたい最初に実装したりすることは同じです

同じことを何度も何度も書くのは非効率ですから
そのあたりを共通化しておいて
`CocoaPods` の仕組みを使って
`CocoaPods` で人のライブラリを使うように管理できるとすれば・・・

うん、便利かも!

ということで、
今回はそのあたりを書いていこうと思います

#作ってみる

## GitHubでリポジトリ作成

GitHub上でリポジトリを新しく作りました

<img width="866" alt="スクリーンショット 2016-06-29 23.57.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/73668/599ea459-1ac6-d31a-873b-05b53321052a.png">

`Repository name` は `"NeroBlu"`にしました

リポジトリは `Public` にする必要があるようです

リポジトリ作成前に
`README.md` 、`LICENCE`、`.gitignore` を勝手にコミットしてくれる設定があるので、
勝手にやってもらうことにしました

`.gitignore`に関しては `Swift` を選んでおけば後々楽ですね

ちなみに　`.gitignore`　は、
自動作成後、`Pods/` 以下のファイルは無視するように設定しておくと後々便利です
(GitHubで作られたデフォルトではそうなっていていないので、書き換えておくとよいかと)

この時点でのディレクトリはこんな感じです

```bash
.DS_Store
.git
.gitignore
LICENSE
README.md
```


## プロジェクトを作成

このディレクトリの中で
Xcodeで新しくプロジェクトを作成しました

`File` > `New` > `Project` から `iOS SingleView Project` を選択
名前の初期設定を行いますが
ここでプロジェクト名は本来の `"NeroBlu"` という名前にはせず
`"NeroBluDemo"` という名前にしました

この理由はあとで書きますが、ここがちょっとしたミソになります


この時点でのディレクトリはこんな感じです

```
.DS_Store
.git
.gitignore
Build
LICENSE
NeroBluDemo
NeroBluDemo.xcodeproj
README.md
```


## CocoaPods を使って xcworkspace を作る

Xcodeは一旦終了して
このディレクトリにて `CocoaPods` に `Podfile` を作ってもらいます

```
pod init
```

この時に出来る `Podfile` は特に編集せずに
次にインストールを指示します

```
pod install --verbose
```
(`--verbose` を付けても付けなくてもよいです)

この時点でディレクトリ内は以下のようになりました

```
.DS_Store
.git
.gitignore
Build
LICENSE
NeroBluDemo
NeroBluDemo.xcodeproj
NeroBluDemo.xcworkspace
Podfile
Podfile.lock
Pods
README.md
```

## ライブラリ部分を作成する

`NeroBluDemo.xcworkspace` をダブルクリックするなどして、Xcodeを再起動します

ここに「本体」であるライブラリ部分を追加します

要は、このプロジェクト自体は「本体」を載っけるための器であり、
同時にライブラリの動作を確認したり、デモしたりするために使うというわけです

なので、最初につけた名前が `"NeroBlu"` ではなく `"NeroBluDemo"` にしたというわけです

`File` > `New` > `Target` から
`Framework & Library` を選んで、 `CocoaTouchFramework` を選びました
ここで `ProductName` にはじめて `"NeroBlu"` という名前をつけます
それ以外の設定は特にいじらず Finish しました

<img width="449" alt="スクリーンショット 2016-06-30 2.17.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/73668/1cbf5aae-0b7b-cf25-4db7-40f927e333b9.png">

Xcode上はこういう構成になったかと思います

## podspecファイルを作る

`CocoaPods` の仕組みを使って今作ったライブラリを使うためには
`podspec` という情報ファイルを作ってやる必要があります

ファイル名はライブラリの名前で大丈夫かと思いますので
ルートディレクトリに、以下の様なコマンドを打って早速作ります

```
vim NeroBlu.podspec
```

下記のテキストをこのファイルを vim で書き込みました
これ以外にも色々な情報を加える事ができますが
とりあえず今回は最低限必要かなと思うものを書きました

```NeroBlu.podspec
d::Spec.new do |s|
  s.name         = "NeroBlu"
  s.version      = "1.0.0"
  s.summary      = "NeroBlu: Library for iOS."
  s.description  = ""
  s.frameworks   = "Foundation", "UIKit"
  s.source       = { :git => "https://github.com/xxxx/NeroBlu" }
  s.source_files = "NeroBlu/*"
end
```
大事なのは、名前もそうですが
`source` や `source_files` のパスがちゃんと通ることですかね
GitHab上のURLがちゃんとライブラリのルートを指しているかどうかなどは
最低限チェックしておいたほうがいいかもしれませんね

これで準備はOKだと思います

## 最終準備

ここまでやってきたことを `git push` を行います

GitHubd上こんな風になりました

<img width="480" alt="スクリーンショット 2016-06-30 2.47.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/73668/d2c99987-1538-128d-b2b7-4664549c0971.png">

#使ってみる

今作ったものを早速使ってみようと思います

まったく別の `CocoaPods` を使用するプロジェクトを
立ち上げる、もしくは作成してください

その `Podfile` はこのように書きます

```
use_frameworks!

pod 'NeroBlu', :git => 'https://github.com/xxxxx/NeroBlu'
```
(use_frameworks!を書かないとうまくいかないパターンがありました)

これで

```
pod install
```
をしてみましょう

```
Updating local specs repositories

Analyzing dependencies
Pre-downloading: `NeroBlu` from `https://github.com/xxxxx/NeroBlu`
Downloading dependencies
Installing NeroBlu (1.0.0)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
```

他のCocoaPodsインストール時と同じように
インストールが正常に走れば成功です

<img width="267" alt="スクリーンショット 2016-07-01 2.21.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/73668/230e3a23-82fb-f003-0d0f-5299ef577cb2.png">

用意したプロジェクト上こうなっていればOKですね

[次回](http://qiita.com/nakau1/items/cc22985e2aad15ca02ff) はクラスライブラリに実際に実装をして
使用する側で使ってみるなどをしてみたいと思います