Memfault 0.5.0

Memfault 0.5.0

Martijn ThéChris Coleman 管理。



Memfault 0.5.0

  • Memfault

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文件。