SwiftでCocoaPodsを使い始めようとしてハマったことメモ

# やろうとしたこと

[CocoaPods 3.6-pre](http://swiftwala.com/cocoapods-is-ready-for-swift/)で
- [Alamofire](https://github.com/Alamofire/Alamofire)
- [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON)
- [Alamofire-SwiftyJSON](https://github.com/SwiftyJSON/Alamofire-SwiftyJSON)
を持ってきて使ってみたかった

# 道のり

## CocoaPods バージョンアップ

```
$ sudo gem install cocoapods --pre
$ pod --version
0.36.0.beta.2
```

特に問題なし


## Podfile 生成

CocoaPodsの記事だと手書きで書き始めてる風なところ、一応コマンドで生成させる。ターゲットごとのセクションとかつけて生成されるのでそっちに合わせる。
```source``` や ```platform``` の部分を修正

```
$ pod init
$ vi Podfile
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

target 'XXXXX' do
end

target 'XXXXXTests' do

end
```

## Alamofire 追加

```
  pod 'Alamofire', :git => "https://github.com/Alamofire/Alamofire.git"
```

CocoaPodsの記事だと ```:git => "https://github.com/mrackwitz/Alamofire.git", :branch => "podspec"``` になっているところが新しいレポジトリに移動しているので変更。新レポジトリにはmasterに.podspecがあるのでブランチ指定は削除。

## SwiftyJSON 追加

```
  pod 'SwiftyJSON', :git => "https://github.com/SwiftyJSON/SwiftyJSON.git"
```

ここも既にmasterブランチに.podspecが置かれているのでブランチ指定を削除。

## Alamofire-SwiftyJSON 追加

```
  pod 'Alamofire-SwiftyJSON', :git => "https://github.com/SwiftyJSON/Alamofire-SwiftyJSON.git"
```

## 使おうとする

すべて追加し終わったので、いざ使おうとする。適当にAppDelegate.swiftあたりにネットワークアクセスを書いて動かしてみようとした。

```swift

        let parameters = [
            "xxxxx" : "xxxxx",
        ]
        Alamofire.request(.GET, "https://XXXXXXX", parameters: parameters)
            .responseSwiftyJSON { (request, response, json, error) in
                println(request)
                println(response)
                println(json)
                println(error)
        }
```

## ハマったこと その１

が、ビルドできず。```import Alamofire``` で
```Could not build objective-c module 'Alamofire'```
と言われる。

しかも、Cleanしたりコード消してビルドしたりを繰り返していると、なんかビルドできて動くときもあって混乱。

## ハマったこと その１ 解決法

Alamofireモジュールがまだビルドできていないのが原因。[ここ](http://stackoverflow.com/questions/26834293/swift-could-not-build-objective-c-module-alamofire)とかをみて気づけた。```Alamofire```だけ先にビルドしてやれば解決。

ただし自分の環境では、初期状態ではビルドターゲットにPodsのものが表示されていなかったので
Manage Schemes で ```Pods-[Target名]-Alamofire``` とかにチェックをつけて表示させる。

Alamofire、SwiftyJSON、Alamofire-SwiftyJSONを順にビルドしてやってから、自分のターゲットをビルドすると少し進んだ。

(ときどきビルドできて混乱させられたのは、Alamofireを呼び出さい状態で一度ビルド->モジュールが生成される->呼び出すコードを書く、としたときにたまたまうまく動いていたんだと思う）

## ハマったこと その２

ちょっとしょぼい。Alamofire-SwiftyJSONがインポートできなくてしばらく困った。

## ハマったこと その２ 解決法

```import Alamofire-SwiftyJSON```、```import AlamofireSwiftyJSON```とかを試してうまく行かずなにかおかしいのかとしばらく調査。
結果、


```swift

import Alamofire_SwiftyJSON
```


が正解だったというただそれだけのことでした・・・。

勘で、WorcspaceのPods/Products/に表示される Alamofire_SwiftyJSON.framework のところの名前でimportすればいいっていうルールじゃないかと予想。

## インストール成功

これでちゃんと動くようになりました。
以上、自分がCocoaPodsでSwiftライブラリをインストールするのにハマったところとその解決法でした。



[ブログ](http://blog.bookside.net/2015/02/10/swift%E3%81%A7cocoapods%E3%82%92%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8%E3%83%A1%E3%83%A2/)にも投下。


## 追記 ##

Alamofire, SwiftyJSONはもうCocoaPods.orgにも出てきていて

```
  pod 'Alamofire'
  pod 'SwiftyJSON'
  pod 'Alamofire-SwiftyJSON', :git => "https://github.com/SwiftyJSON/Alamofire-SwiftyJSON.git"
```

でOKだった。

## 追記2 ハマったこと その３＆解決法 ##

CocoaPods 0.36.0.rc1から、上記のまま ```pod install``` すると

```
[!] Pods written in Swift can only be integrated as frameworks; this feature is still in beta. Add `use_frameworks!` to your Podfile or target to opt into using it.
```

と警告されてSwiftライブラリがインストールされないので、指示されている通り

```
use_frameworks!
```

をPodfileに明示する必要あり。[CHANGELOG](https://github.com/CocoaPods/CocoaPods/blob/master/CHANGELOG.md#enhancements)にありました。