Cocoapodsから導入したObjective-CのライブラリをSwiftから使用する



## 内容
### 動機：SwiftからObjective-Cのライブラリimportするとエラーが出る！
### 実験：platformの指定が原因か？
### 結論：platformではなく、frameworksを使うかどうかの指定が必要だった。


## 実験手順
1. テスト用プロジェクトの作成(名前をtest_CocoaPodsとし,swiftファイルを扱う)
2. Podfileを記述。NLCoreDataをインストールしたい。platformはiOS:8.0とする。
3. Podsをインストールする
4. ViewControllerファイル内でNLCoreData/NSManagedObjectなどのメソッドを使ってみる
5. NLCoreDataをimport宣言してみる
6. BridgintHeaderファイルを作成、設定してみる

### 試したいこと
1. platformの指定は必要なのか
2. BridgintHeaderの宣言は必要なのか

### その他知りたいこと
+ Objective−Cライブラリ内のフィールドをSwift側からアクセサを使って操作できるのかどうか。そのためにはObjective−C側で自動生成されたアクセサをSwift側で使用しなければならない。


## 手順１.テスト用プロジェクトの作成
新規プロジェクト
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/388af643-2a5d-b779-a1e0-d1c912bf006d.png "screenshot.png")
SingleViewを選択
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/391c0ffb-304f-d8a4-24a4-b535eaca4926.png "screenshot.png")
名前をtest_CocoaPodsとする
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/15304844-430a-00ec-180b-3dd6bb72006b.png "screenshot.png")

## 手順２.Podfileの記述
以下のように指定する

```lanv:Podfile
 platform :ios, '8.0'
   use_frameworks!
   
   target 'test_CocoaPods' do
     pod 'NLCoreData', '~> 0.5'
   end
```

## 手順３.Podsのインストール
インストール完了
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/fdc209a3-ae76-85e4-5572-1bba6e2c1ed0.png "screenshot.png")


## 手順４.メソッドを使って見る
### 使いたいメソッドたち
```lang:myTrainingLogApp    
    @IBAction func writeBtn(sender: AnyObject) {
        // mainContextはNSM..のもつfield
        var myContext = NSManagedObjectContext.mainContext()
        let myEntity: NSEntityDescription! = NSEntityDescription.entityForName("Training.m", inManagedObjectContext: myContext)
        
        NSManagedObject.setEntityName(myEntity)
        (NLCoreData.shared()).setModelName("aiueo")

//        [[NLCoreData shared] setModelName:@"xxxx"];
        
        var newData = Training.m(entity: myEntity, insertIntoManagedObjectContext: myContext)
        newData.statement = weightText.text
        newData.time = NSDate()
        
        myContext.save(nil)
    }
```


### viewDidLoag()内に入れてみる。
エラー発生
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/1ae67ba8-529a-bed1-d38e-a63a6578153a.png "screenshot.png")

NSManagedObjectが定義されていないようだ。
これをimport NLCoreDataで解決する。

## 手順５.NLCoreDataのimport
import後、Runさせた。
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/aff99453-d22a-c824-049f-a94bff032f1d.png "screenshot.png")
挿入直後はエラーが表示されたが、ビルド？コンパイル？とにかくRunさせたらすんなり通った。アプリも真っ白だけど起動した。

### わかったこと
+ platformを指定してimportしたらSwift内でObject−Cライブラリのフィールド、メソッドは使用できる。
+ Runしないと消えないエラーがある

## 手順６.BridgintHeaderの設定は
省きます。問題なくimportできているようなので。
代わりに、本当にplatformが問題だったのかどうかを調べる。


## 実験６':platformの指定は必要なのか
以下のようにplatformの指定部分をコメントアウトしてみる。
問題のプロジェクトではここがコメントアウトされたままであった。
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/552b5adf-d682-ad05-3c0e-b5b7d34558c3.png "screenshot.png")

`$ pod update`

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/cd704caf-37e4-9743-68ec-68720329f11e.png "screenshot.png")

**結果、問題なく起動した。**
もしかしたら
何気なく追加してしまった
`use_frameworks!`
ってとこが問題なのかも。(元のプロジェクトでは記述していなかった）
コメントアウトして見る。
![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/80688/1e2d609b-6b73-7eb6-b01d-c670609b1987.png "screenshot.png")

**でた！エラーだ！そっかーこれかー。**

ちょっと関係無いけどkobitoアプリはオフラインで画像をアップロードしようとすると落ちるみたいだ。
あと、画像貼りすぎたのか? 重くなってきた。むしろ重くなって落ちたのかな。

### 結論：platformはどうでもよくて、frameworksを使う?という命令が必要だった
(!がついてるから、使わない。の方かも？)

おわり。