CocoaPodsへのライブラリのアップロードと注意点

# はじめに
CocoaPodsへライブラリを公開するにあたり、気をつける点と簡単な手順まとめておきます。

***実行環境***

- OS X El Capitan 10.11.5
- git version 2.8.4 (Apple Git-73)
- CocoaPods 0.39.0 ***※後述***
- Xcode Version 8.0


## CocoaPodsへのライブラリのアップロードの手順
### 1. ライブラリの雛形作成

```bash
$ pod lib create [Library name]
``` 

### 2. ライブラリ、Exampleの実装
### 3. `podspec`ファイルの修正
### 4. `Github`に公開
#### 4.1. `Github`に`push`

```bsah
$ git add .
$ git commit -m "commit message"
$ git remote add origin https://github.com/[User name]/[Library name].git
$ git push origin master
```

#### 4.2. タグをつけて`Github`に`push`

```bsah
$ git tag 0.1.0
$ git push --tags
```

### 5. podspecのバリデーションを行う

```bash
$ pod spec lint LibraryName.podspec
```

### 6. CococaPodにアカウント登録

```bash
$ pod trunk register [your mail address] [your name]

```
ここで`CococaPod`からメールが来るので確認する。

```bash
$ pod trunk me
```

で情報が表示されればOK

### 7. CocoaPodsに公開

```bash
$ pod trunk push LibraryName.podspec 
```

ここまで、簡単に`CocoaPods`でライブラリの作成から公開までの簡単な手順です。
何も問題なければ簡単にできると思います。

## 注意点、はまったこと

今回いくつかのエラーではまっていたので、エラー内容と解決策をまとめておきます。

### 1. xcodebuildのエラー

`$ pod spec lint`でのバリデーションエラー

#### エラー内容

```bash
- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.
    - NOTE  | [iOS] xcodebuild:  xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
```

#### ***解決策***
`CommandLineTools`にXcodeのバージョン指定がなければ、エラーが出るようです。

`Xcode/Preferences/Locations/CommandLineTools`でXcodeのバージョンを指定する

<img width="648" alt="スクリーンショット 2016-10-12 11.13.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/62451/39720a4d-d25e-8dbb-f975-5d6a7c6e0972.png">


参考：　[xcode-select active developer directory error](http://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error)

### 2. `Use Legacy Swift Language Version`

`$ pod spec lint`でのバリデーションエラー

```bash
=== CLEAN TARGET LibraryName OF PROJECT Pods WITH THE DEFAULT CONFIGURATION (Release) ===

Check dependencies
“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.
“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.

** CLEAN FAILED **


The following build commands failed:
	Check dependencies
(1 failure)
=== BUILD TARGET LibraryName OF PROJECT Pods WITH THE DEFAULT CONFIGURATION (Release) ===

Check dependencies
“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.
“Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.

** BUILD FAILED **


The following build commands failed:
	Check dependencies
(1 failure)
 -> LibraryName (0.1.0)
    - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.
```

#### ***解決策***

`pod`のバージョンを `1.1.0.rc.2`に指定して、`.swift-version`ファイルにバージョン番号を指定してあげれば解決できます。

```bash
$ echo 2.3 > .swift-version
```
or

```bash
$ echo 3.0 > .swift-version
```

`.swift-version`を作成したら`git`に`push`

`CocoaPods`のバージョンが`0.39.0`なので`1.1.0.rc.2`に変更

```bash
$ gem uninstall cocoapods
$ gem install cocoapods -v 1.1.0.rc.2
```

参考：　[Swift 3 & CocoaPods](https://medium.com/@superpeteblaze/swift-3-cocoapods-ccb72e0de750#.7dfte3oeq)


### 3. `pod trunk push`でのエラー

```bash
$ pod trunk push LibraryName.podspec
```

#### エラー内容

```bash

### Error

NoMethodError - undefined method `swift_version=' for #<Pod::Validator:0x007f89ab9224f8>
```

#### ***解決策***

`CocoaPods`のバージョンを最新`1.1.0.rc.3`に変更

```bash
$ gem uninstall cocoapods
$ gem install cocoapods -v 1.1.0.rc.3
```

# 終わりに
今回、`CocoaPods`や`Swift`のバージョンの問題でエラーが出てたと思います。メジャーバージョンアップの際には特にバージョンに意識することが必要ですね。