| nav | 例 |
|---|---|
| group | SESAME SDK |
| title | iOS 版 |
| order | 1 |
- Sesame app on
https://apps.apple.com/app/id1532692301/
- Sesame app on
https://testflight.apple.com/join/Rok4GOFD/
-
- Scheme を SesameSDK に設定し、任意のiOSデバイスを選択します。
-
command+shift+kを押して product フォルダをクリアします。
-
command+bを押して SDK をビルドします。
-
- ビルドが完了したら、Xcode -> SDK project ->
Productsフォルダの下にある SesameSDK.framework を右クリックし、「Finderで開く」を選択し、SesameSDK.frameworkを取得します。
- ビルドが完了したら、Xcode -> SDK project ->
-
- Scheme を SesameWatchKitSDK に設定し、任意のwatch OSデバイスを選択します。
-
command+shift+kを押して product フォルダをクリアします。
-
command+bを押して SDK をビルドします。
-
- ビルドが完了したら、Xcode -> SDK project ->
Productsフォルダ下にある SesameWatchKitSDK.framework を右クリックし、「Finderで開く」を選択し、SesameWatchKitSDK.frameworkを取得します。
- ビルドが完了したら、Xcode -> SDK project ->
Swift Package Managerは、Swiftのコードの配布を管理するためのツールです。Swiftのビルドシステムに統合されており、依存関係のダウンロード、コンパイル、リンクプロセスを自動で行います。
- プロジェクトにSesameSDKをSwift Package Managerを使って統合します:
dependencies: [
.package(url: "https://github.com/CANDY-HOUSE/SesameSDK_iOS_with_DemoApp.git", .branch("master"))
]- 任何の依存関係マネージャを使用したくない場合は、SesameSDKを手動でプロジェクトに統合することも可能です。
<key> NSBluetoothAlwaysUsageDescription </key>
<string> セサミスマートロックに接続し、ドアのロック/アンロックを行います。 </string>
<key> NSBluetoothPeripheralUsageDescription </key>
<string> このアプリは、アプリを使用していない時でも、近くのBluetoothデバイスにデータを提供することがあります。
</string>適切なタイミングでBluetoothスキャンを開始します。
CHBluetoothCenter.shared.enableScan { res in }Bluetoothのステータスが変わった時のコールバック
public protocol CHBleStatusDelegate: AnyObject {
func didScanChange(status: CHScanStatus)
}スキャンしたセサミデバイスのリストは、1秒ごとの頻度で呼び出し元に渡されます。
public protocol CHBleManagerDelegate: AnyObject {
func didDiscoverUnRegisteredCHDevices(_ devices: [CHDevice])
}接続を確立する前に、デバイスの状態が接続可能状態であることを確認する必要があります。
if sesame5.deviceStatus == .receivedBle() {
sesame5.connect() { _ in }
}この時点で、Sesameデバイスの接続状態のコールバックを受信します。
public protocol CHDeviceStatusDelegate: AnyObject {
func onBleDeviceStatusChanged(device: CHDevice, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?)
func onMechStatus(device: CHDevice)
}接続状態が「登録準備完了」になった時点で、デバイスを登録してペアリングを完了させることができます。デバイスの登録は、デバイスとのペアリングを行うために必要な手順です。
if device.deviceStatus == .readyToRegister() {
device.register( _ in )
}登録が完了すると、CHDeviceManagerを使ってペアリング済みのデバイスを取得することができます。
var chDevices = [CHDevice]()
CHDeviceManager.shared.getCHDevices { result in
if case let .success(devices) = result {
chDevices = devices.data
}
}ペアリング済みのデバイスを取得したら、APPを通じてロックとアンロックを実行することが可能になります。
public func lock(historytag: Data?, result: @escaping (CHResult<CHEmpty>)) {
if deviceShadowStatus != nil,
deviceStatus.loginStatus == .unlogined {
CHIoTManager.shared.sendCommandToWM2(.lock, self) { _ in
result(.success(CHResultStateNetworks(input: CHEmpty())))
}
return
}
if (self.checkBle(result)) { return }
let hisTag = Data.createOS2Histag(historytag ?? self.sesame2KeyData?.historyTag)
sendCommand(.init(.lock,hisTag)) { responsePayload in
if responsePayload.cmdResultCode == .success {
result(.success(CHResultStateBLE(input: CHEmpty())))
} else {
result(.failure(self.errorFromResultCode(responsePayload.cmdResultCode)))
}
}
} public func unlock(historytag: Data?, result: @escaping (CHResult<CHEmpty>)) {
if deviceShadowStatus != nil,
deviceStatus.loginStatus == .unlogined {
CHIoTManager.shared.sendCommandToWM2(.unlock, self) { _ in
result(.success(CHResultStateNetworks(input: CHEmpty())))
}
return
}
if (self.checkBle(result)) { return }
let hisTag = Data.createOS2Histag(historytag ?? self.sesame2KeyData?.historyTag)
sendCommand(.init(.unlock,hisTag)) { responsePayload in
if responsePayload.cmdResultCode == .success {
result(.success(CHResultStateBLE(input: CHEmpty())))
} else {
result(.failure(self.errorFromResultCode(responsePayload.cmdResultCode)))
}
}
}各命令の詳細は BlueToothプロトコル を参照してください。
- 詳細を見る:BlueTooth プロトコル
SesameSDKの詳細設計については、以下の設計図とフローチャートを参照してください。
-
ログイン・登録: Amazon Web Services
-
ブルートゥース: CoreBluetooth
-
ローカルストレージ: CoreData
-
使用ライブラリ: AWSMobileClientXCF
-
Siri Intents:Intents
-
Intents参考記事:appintents
各 Class の詳細は Sesame SDK Class を参照してください。
- 詳細を見る:Sesame SDK Class




