iOS
Swift
ECHONET
Home@KAIT

5. iOS(Swift3.0)用のECHONET Liteプロトコルライブラリ

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

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

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

1. Xcode 8.0でProjectの準備

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

こんな感じ?

スクリーンショット 2017-08-21 12.00.40.png

  • (どこでもいーけど,今回は/DocumentにXcodeというフォルダを作って選択してCreate)
  • File, Save
  • Xcode, Quit Xcode

2. Podfile準備

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

スクリーンショット 2017-08-21 12.09.07.png

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

target 'ELSwiftTest' do
  pod 'ELSwift', '0.1.0'
  pod 'CocoaAsyncSocket'
end
  • terminal開いて
  • $ cd ~/Documents/Xcode/ELSwiftTest/
  • $ pod setup
  • $ pod update

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

3. Demo作ってみる

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

スクリーンショット 2017-08-21 12.29.10.png

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

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'

というエラーが出てしまいますが,コンパイルすると消えると思います。
warningも下記のUDP関係でちょっとでます。多分平気,きになる人は直して。

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

4. 動かす。

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

Simulator Screen Shot 2017.08.21 12.41.10.png

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

ここ,つらいとこ

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

ここもつらいとこ