5. iOS（Swift4.0）用のECHONET Liteプロトコルライブラリ

#　iOS用のECHONET Liteプロトコルライブラリを作ったので，その使い方を説明します。


- Xcode 9.4.1 の情報に更新したよ。
- 誤字脱字を修正したよ。


とりいそぎ，簡単にね。
ちなみにオープンソースでMITライセンスだよ。みんな安心。

- Cocoapods
 https://cocoapods.org/?q=ELSwift

- Github (ELSwift)
 https://github.com/Hiroshi-Sugimura/ELSwift

内部はGCDAsyncUdpSocketに依存しています。
(GCDAsyncUdpSocketはPublic domainということになっているよ)


## 1. Xcode でProjectの準備

- Xcode
- File, New, Project
- iOS, Single View Application, Next
- Product Name: ELSwiftTest, Next

こんな感じ？

![スクリーンショット 2017-08-21 12.00.40.png](https://qiita-image-store.s3.amazonaws.com/0/120396/96d1052d-2100-1458-6a51-13b883011684.png)


- <Folder select>（どこでもいーけど，今回は/DocumentsにXcodeというフォルダを作って選択してCreate）
- File, Save
- Xcode, Quit Xcode

## 2. Podfile準備

- プロジェクトのフォルダがこんな感じになってるとして，

![スクリーンショット 2017-08-21 12.09.07.png](https://qiita-image-store.s3.amazonaws.com/0/120396/a862bf3c-b74a-ec9c-521a-5792ed05d797.png)

- スクショの位置(xcodeprojと同じ位置)にPodfileを新規に作成して
- 下記をテキストでPodfileに記述

```Podfile
use_frameworks!

target 'ELSwiftTest' do
  pod 'ELSwift'
  pod 'CocoaAsyncSocket'
end
```

- terminal開いて

```bash
$ cd ~/Documents/Xcode/ELSwiftTest/
$ pod setup
$ pod update
```

- ELSwiftTest.xcworkspaceというファイルができているので，今後はこちらをつかって開発していく。


## 3. Demo作ってみる

具体的なXcodeとSwiftでのプログラミングは別の資料をみていただくとして・・・
こんな感じでGUIと，オブジェクトハンドルとの対応をつくって


![スクリーンショット 2017-08-21 12.29.10.png](https://qiita-image-store.s3.amazonaws.com/0/120396/691039ff-c8e8-afb2-4506-216822e36707.png)


プログラムはこんな感じに修正.

```Swift
import UIKit
import ELSwift

class ViewController: UIViewController {

    @IBOutlet weak var logView: UITextView!
    @IBOutlet weak var btnSearch: UIButton!
    let objectList:[String] = ["05ff01"]

    override func viewDidLoad() {
        super.viewDidLoad()
        logView.text = ""
        
        do {
            try ELSwift.initialize( objectList, { rinfo, els, err in
                if let error = err {
                    print (error)
                    return
                }
                
                if let elsv = els {
                    let seoj = elsv.SEOJ
                    let esv = elsv.ESV
                    let detail = elsv.DETAIL
                    self.logView.text = "ip:\(rinfo.address), seoj:\(seoj), esv:\(esv), datail:\(detail)" + "\n" + self.logView.text
                }
            }, 4)
        }catch let error{
            print( error )
        }
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func btnSearchDown(_ sender: Any) {
        ELSwift.search()
    }

}
```

もしかするとこのタイミングではimport文のところで

```
Cannot load underlying module for 'ELSwift'
```

というエラーが出てしまいますが、一旦「⌘+B」でコンパイルすると消えると思います。
もしかしたらwarningも下記のUDP関係でちょっとでます。多分平気，きになる人は直して。

```
Parameters of 'udpSocket(_:didReceive:fromAddress:withFilterContext:)' have different optionality than expected by protocol 'GCDAsyncUdpSocketDelegate'
```


## 4. 動かす。

シミュレータでの結果はこんな感じ。
通信するのでダイアログで警告でるけど許可してね。

<img width="414" alt="Simulator Screen Shot 2017.08.21 12.41.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/120396/451e73e4-4b27-a8e2-e4c0-cbbcf4cded42.png" border='1'>



## 5. SwiftとかXcodeとかが使いにくいことを再認識する。

ここ，つらいとこ

##　6. よくあるエラーとその対策

ここもつらいとこ