前提
個人的にiOSでスマートロックセサミを操作できる簡単なアプリにチャレンジしています。
この方法(https://doc.candyhouse.co/ja/ios/quick_start_ios)でSesameSDKのダウンロードはできたのですが、公式ドキュメントはUIKitでの書き方なのですが、SwiftUIで実装したいと思っています。
とりあえず開錠施錠(toggle)をしてみたいのですが、UIKitで書かれたsdkの内容のため、SwiftUIでの実装方法が分からず困っています。
ググってみると、UIViewRepresentableプロトコルを利用した書き方でUIKitをSwiftUIで使う方法と出てきたのですが、この方法で合っていますでしょうか?
SwiftUIでの実装で、開錠施錠を成功された方いらっしゃいましたら是非ご教示いただきたいですTT
実現したいこと
ContentView.swift内にあるButtonのactionで、開錠施錠(toggle)を実装したい。
該当のソースコード
ContentView.swift
1 2import SwiftUI 3import SesameSDK 4 5struct ContentView: 6 7 var body: some View { 8 9 Button(action: { 10 print("Push button") 11 }, label: { 12 Text("Open Sesame!") 13 .font(.headline) 14 .fontWeight(.semibold) 15 .foregroundColor(.white) 16 .padding() 17 .padding(.horizontal, 20) 18 .background(Color.blue) 19 .cornerRadius(10) 20 }) 21 } 22} 23 24struct ContentView_Previews: PreviewProvider { 25 static var previews: some View { 26 ContentView() 27 } 28}
SesameSDK
1public protocol CHSesame2 : SesameSDK.CHSesameLock { 2 override var deviceStatus: SesameSDK.CHSesame2Status { get } 3 // デバイス状態 4 var intention: SesameSDK.CHSesame2Intention { get } 5 // locking:現在施錠しようとしている途中 ; unlocking:現在開錠しようとしている途中 6 var delegate: SesameSDK.CHSesame2Delegate? { get set } 7 // このDelegateメソッドを使用するとCHSesame2Status/CHSesame2MechStatus/CHSesame2Historyの変化があればSesameSDKがアプリUIにDelegateイベントを送る 8 override var mechStatus: SesameSDK.CHSesameProtocolMechStatus? { get } 9 // セサミの解錠・施錠の角度などの機械状態 10 var mechSetting: SesameSDK.CHSesame2MechSettings? { get } 11 // セサミの機械設定状態 12 var deviceShadowStatus: SesameSDK.CHSesame2ShadowStatus? { get } 13 // セサミのShadowステータス 14 override func getVersionTag(result: @escaping (SesameSDK.CHResult<String>)) 15 // SesameOSバージョンを取得 16 func getAutolockSetting(result: @escaping (SesameSDK.CHResult<Int>)) 17 // オートロック機能の設定状態を取得 18 func lock(historytag: Data?, result: @escaping (SesameSDK.CHResult<SesameSDK.CHEmpty>)) 19 // 施錠する 20 func unlock(historytag: Data?, result: @escaping (SesameSDK.CHResult<SesameSDK.CHEmpty>)) 21 // 解錠する 22 func toggle(historytag: Data?, result: @escaping (SesameSDK.CHResult<SesameSDK.CHEmpty>)) 23 // 解錠状態の場合は施錠する、施錠状態の場合は解錠する 24 func disableAutolock(historytag: Data?, result: @escaping (SesameSDK.CHResult<Int>)) 25 // オートロック機能をオフ 26 func getHistories(cursor: UInt?, _ result: @escaping SesameSDK.CHResult<SesameSDK.CHSesameHistoryPayload>) 27 // SesameSDK経由で新→旧との順番で履歴を取得する。 履歴が新→旧の順番で、1ページの中に最多50件の履歴が入ってる。 28 func getBleAdvParameter(_ result: @escaping SesameSDK.CHResult<SesameSDK.CHSesame2BleAdvParameter>) 29 // セサミデバイスが発信しているBLEアドバタイシング の Interval と TXPower の設定値を取得する。 30 func enableAutolock(historytag: Data?, delay: Int, result: @escaping (SesameSDK.CHResult<Int>)) 31 // オートロック機能の秒数を入力しオンにする ; delay: オートロック機能の秒数 32 func configureLockPosition(historytag: Data?, lockTarget: Int16, unlockTarget: Int16, result: @escaping (SesameSDK.CHResult<SesameSDK.CHEmpty>)) 33 // 施解錠の回転位置を設定する。範圍: -32767~0~32767 ; -32768 は意義のないデフォルト值。 例0˚ ⇄ 0 で 360˚ ⇄ 1024 34 func updateBleAdvParameter(historytag: Data?, interval: Double, txPower: Int8, _ result: @escaping SesameSDK.CHResult<SesameSDK.CHSesame2BleAdvParameter>) 35 /* セサミデバイスが発信しているBLEアドバタイシング の Interval と TXPower を調整する。 36 intervalには20ms~10240msまで設定可能ですが、次のいずれかの値の設定がアップル社のAccessory Design Guidelines for Apple Devices 35.5 Advertising Intervalにて推奨されています: [1285.0, 1022.5, 852.5, 760.0, 546.25, 417.5, 318.75, 211.25, 152.5, 20.0] 単位: ms 37 txPowerには次のいずれかの値が設定可能。 [4, 3, 0, -4, -8, -12, -16, -20, -40] 単位: dBm 38 */ 39}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー