Edited at

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


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


  • Xcode 9.4.1 の情報に更新したよ。

  • 誤字脱字を修正したよ。

とりいそぎ,簡単にね。

ちなみにオープンソースでMITライセンスだよ。みんな安心。

内部は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


  • (どこでもいーけど,今回は/Documentsに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'
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'

というエラーが出てしまいますが、一旦「⌘+B」でコンパイルすると消えると思います。

もしかしたら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. よくあるエラーとその対策

ここもつらいとこ