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

#目次

[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"` という名前をつけています
> 
> これは自分の屋号から取ってきた名前なので、ただの「サンプル名」としてご認識ください
> 名前は各自でご自由につけなおしてくださいね

#まえがき

[前回](http://qiita.com/nakau1/items/ec8117d789c4fb2d697a) では
他のプロジェクトから、自作したライブラリをインストールするところまで作りました

しかし中身はもぬけの殻です
今回は、中身を作ってみます

#ブランチに分ける

今回はお試しなので、`master` とは別のブランチを使います
ブランチを分けた場合でも `CocoaPods` はブランチを追跡することができます

前回までの状態の `master` から派生した `temporary` というブランチを切ることにしました
そして、使用するプロジェクト側の `Podfile` にこう書きます

```rb
#before
pod 'NeroBlu', :git => 'https://github.com/xxxxx/NeroBlu'
```
```rb
#after
pod 'NeroBlu', :git => 'https://github.com/xxxxx/NeroBlu', :branch => 'temporary'
```

これで `CocoaPods` のリポジトリの向き先は `master` ではなく、`temporary` ブランチになりました
まぁ、`temporary` という名前はいかにもアレですが、
あくまで「お試し」なのでご了承ください

##ブランチごとに別ライブラリ
このライブラリを
ブランチごとに別のライブラリとして扱うことも可能です

まぁそれに何の得があるかは置いておいて・・・
とにかくできます

方法は簡単で
`podspec` をブランチごとに書き換えてやればいいのです

前回作った `NeroBlu.podspec` をこのようにしました

```NeroBlu.podspec
d::Spec.new do |s|
  s.name         = "NeroBluTemp"
  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
```

前回のものから
`s.name = "NeroBlu"` となっていたものを
`s.name = "NeroBluTemp"` に変えています

すると、使用する側は `"NeroBluTemp"`というライブラリとして
プロジェクトに取り込まれていきます

`master` ブランチは `NeroBlu`、`temporary` ブランチは `NeroBluTemp`
ふたつの異なるライブラリが出来上がったものとして扱うことができます

ためしに `Podfile` を

```
use_frameworks!

pod 'NeroBlu', :git => 'https://github.com/nakau1/NeroBlu'
pod 'NeroBluTemp', :git => 'https://github.com/nakau1/NeroBlu', :branch => 'temporary'
```

このように書き換えて`pod install`すると
Xcode上で `Pods` にはふたつのライブラリが棲み分けられたと思います

#ライブラリにクラスを実装する

さて、前項で作ったライブラリ `NeroBluTemp` には何もありません
何もないと寂しいのでひとつ実装を加えます

名前はなんでもいいのでライブラリ内にswiftファイルをひとつ追加して
ここでの例では `String+Echo.swift` というファイルにします

```String+Echo.swift
import UIKit

public extension String {
    
    public func echo() {
        print(self)
    }
}
```
こんな処理を書きました

```swift
"Hello".echo()
```
って書くと、コンソールに出力されます
はてさて、何の役にも立たない extension ではありますが、
これもまた立派なライブラリ(?)です

ちなみにアプリ開発の時は意識しないことですが、
ライブラリ作りでは、**スコープは必須**です
ワークスペースを区切って開発したりしてる方には当然なことなのですが、
普段そうしてない人、ひとつのターゲット内で作業してる人にとっては、忘れがちかもしれません

```String+Echo.swift
import UIKit

extension String {
    
    func echo() {
        print(self)
    }
}
```

こう書いてしまうと、`public`ではなく`internal`扱いです
つまり、外からは見えません
ライブラリ内でしか使えないメソッドになってしまいます
ゆえに、外から隠蔽すべきではないものに対しては、ちゃんと `public` を付けましょう


ここまでのものを `temporary` ブランチに `git push` します
そして、使用する側のプロジェクトにて `pod install` してみます

すると、プロジェクト内に `String+Echo.swift` ファイルが取り込まれたと思います

使用する側のプロジェクトを一旦ビルドしてから
試しにアプリに次のように実装します

```ViewController.swift
import UIKit
import NeroBluTemp

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        "Hello".echo()
    }
}
```

これで動作確認してみると

```
Hello
```
コンソールに出力されると思います