Memfault iOS SDK
集成指南
将 Memfault.framework 添加到您的项目中
CocoaPods
如果您使用 CocoaPods,可以在 Podfile
中将 Memfault
添加为依赖项
target 'MyApp' do
pod 'Memfault'
end
指定要使用的版本可能是个好主意。有关更多信息,请参阅 Podfile 文档
添加新的依赖项后,在终端中运行 pod install
,或者在 CocoaPods.app 中运行。
Carthage
待办事项
不使用依赖管理器
要使用不带依赖管理器的Memfault.framework
,只需克隆此仓库并将Memfault.framework
拖到您的项目中。请确保将框架链接到您的目标:选择项目 > 选择您的应用程序目标 > 构建阶段 > 将二进制与库链接 > 如果没有添加,请添加Memfault.framework
。
初始化
Memfault类是SDK的"入口"。建议只创建一个Memfault实例,并在整个应用程序中使用它。
创建实例时,您需要传递一个配置字典。项目API密钥是唯一必需的配置项。要查找您的项目API密钥,请登录到https://app.memfault.com/并转到设置。
您还需要传递一个dispatch队列。这个队列将用于执行异步调用,例如代理方法调用。
您可能还需要配置要使用的"设备管理"密钥。此密钥用于允许移动SDK对其连接的设备进行身份验证并进入"设备管理模式"。某些操作,如空中更新,需要在设备管理模式下首先进入。有关如何生成密钥数据的更多信息,请查看固件SDK中包含的cli/mflt_utils.py
工具。
import Memfault
let DevMgmtKeyBytes = [
// See mflt_utils.py tool to generate this code ...
] as [UInt8]
let memfault: Memfault = Memfault.init([
kMFLTApiKey: "8badf00d8badf00d8badf00d8badf00d",
kMFLTDeviceManagementPrivateKey: NSData(bytes: DevMgmtKeyBytes, length: DevMgmtKeyBytes.count),
], queue:queue)
获取设备对象
Memfault的iOS SDK的大部分功能都作为设备对象(MemfaultBluetoothDevice
)上的方法公开。您的应用程序很可能已经知道如何查找(扫描)与您的工作相关的设备。因此,您的应用程序中可能已经有了代表要连接的设备的CoreBluetooth CBPeripheral
实例。Memfault对象有一个.device(fromPeripheralIdentifier:)
方法,可以从外围设备的标识符中导出设备对象。
let peripheral: CBPeripheral = ...
let device: MemfaultBluetoothDevice =
memfault.device(fromPeripheralIdentifier: peripheral.identifier)
空中(OTA)更新
Memfault SDK 的一个功能是通过蓝牙进行空中无线软件更新。将 Memfault OTA 集成到您的应用程序中只需要几个简单的步骤
1. 检查更新
一旦您有了设备对象,您就可以检查这个设备是否有新的更新
device.check { (package, error) in
if error != nil {
// There was an error, handle it here.
return
}
if package == nil {
// Device is up to date, nothing to do!
return
}
// There's a new software package
}
2. 执行 OTA
实际更新过程的触发是通过使用 .performOta(package)
方法实现的
device.check { (package, error) in
// ... error & up-to-date checks here (see previous section) ...
device.performOta(package)
}
3. 监控进度和状态变更
通过实现 MemfaultOtaDelegate
协议,您可以监控 OTA 更新的进度。以下是可以实现的方法
// Required:
func otaStateDidChange(_ device: MemfaultBluetoothDevice, state: MemfaultOtaState)
// Optional:
func otaProgressDidChange(_ device: MemfaultBluetoothDevice, progress: Double)
func otaFailed(_ device: MemfaultBluetoothDevice, error: Error)
将设备对象的 .otaDelegate
属性指向您的委托对象以接收这些委托方法的回调
device.otaDelegate = self
消耗度量事件
当使用 Memfault 的度量固件 API(例如 memfault_metrics_create()
)时,记录的数据必须定期从设备拉取并转发到 Memfault 的网络服务。SDK 不会自动执行此操作,而是将其留给你决定何时进行轮询。触发它是简单的
device.readMetrics { (error) in
if error != nil {
// There was an error, handle it here.
return
}
// Metrics (if any) have successfully been collected from the device and sent to Memfault's web services.
}
清理核心转储
使用Memfault的核心转储固件SDK功能时,捕获的核心转储需要定期从设备中提取并转发到Memfault的Web服务。SDK不会自动处理这种情况,而是将其留给您来决定何时进行轮询。触发操作很简单
device.readCoredumps { (error) in
if error != nil {
// There was an error, handle it here.
return
}
// Coredumps (if any) have successfully been collected from the device and sent to Memfault's web services.
}
变更日志
请参阅CHANGELOG.md文件。