| 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, 選擇 Any iOS Device
-
command+shift+k清除 product 資料夾
-
command+b打包 SDK
-
- 完成後到 Xcode -> SDK project ->
Products資料夾底下 找到 SesameSDK.framework 點擊右鍵 選擇在 Finder 打開, 取得SesameSDK.framework.
- 完成後到 Xcode -> SDK project ->
-
- Scheme 切到 SesameWatchKitSDK, 選擇 Any watch OS Device
-
command+shift+k清除 product 資料夾
-
command+b打包 SDK
-
- 完成後到 Xcode -> SDK project ->
Products資料夾底下 找到 SesameWatchKitSDK.framework 點擊右鍵 選擇在 Finder 打開, 取得SesameWatchKitSDK.framework.
- 完成後到 Xcode -> SDK project ->
Swift Package Manager是一個管理 Swift 代碼分發的工具。它與 Swift 構建系統集成,自動執行下載、編譯和鏈接依賴項的過程。
- 使用 Swift 包管理器將 SesameSDK 集成到 Xcode 項目中:
dependencies: [
.package(url: "https://github.com/CANDY-HOUSE/SesameSDK_iOS_with_DemoApp.git", .branch("master"))
]- 如果您不想使用任何依賴項管理器,您可以手動將 SesameSDK 集成到您的項目中。
<key> NSBluetoothAlwaysUsageDescription </key>
<string> To connect Sesame Smart Lock and lock/unlock the door. </string>
<key> NSBluetoothPeripheralUsageDescription </key>
<string>T his app would like to make data available to nearby bluetooth devices even when you're not using the app.
</string>請在適當的時間啓動藍牙掃描
CHBluetoothCenter.shared.enableScan { res in }藍牙狀態改變時回調
public protocol CHBleStatusDelegate: AnyObject {
func didScanChange(status: CHScanStatus)
}掃描的芝麻設備列表將以每秒一次的頻率傳回呼叫者。
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




