Adopt declarative device management
System & Services 进阶 20m

采用声明式设备管理

Adopt declarative device management

2022年6月6日

在 Apple 官方观看视频

一句话判断

如果你在开发 MDM 解决方案,声明式设备管理今年扩展到了全平台和全部注册类型——这不是可选的未来方向,而是 Apple 设备管理的发展重心。

这场 Session 讲了什么

Apple 设备管理团队的 Cyrus Daboo 全面介绍了声明式设备管理(Declarative Device Management)在 2022 年的扩展。去年 WWDC 21 首次引入时仅支持 iOS 的用户注册,今年扩展到所有 MDM 注册类型、所有平台(iOS、macOS、tvOS),并大幅增强了状态报告和谓词系统。

声明式设备管理的核心理念是让设备变得自主和主动:设备根据自身状态变化自主应用管理逻辑,不需要服务端轮询;通过状态通道异步上报重要状态变更。

Session 重点关注三大更新:扩展声明式设备管理的覆盖范围、增强状态报告(新增密码合规状态、账户状态、应用安装状态)、增强谓词系统。

值得深挖的点

密码合规状态的自动触发。 传统 MDM 中,服务端发送密码策略后需要不断轮询设备来检查密码是否合规。声明式方式下,你可以将 Wi-Fi 配置的激活条件绑定到密码合规状态——只有当用户设置了合规密码后,敏感配置才会被激活。整个过程不需要服务端轮询。

平台全覆盖。 macOS Ventura 和 tvOS 16 现在都支持声明式设备管理。macOS 支持所有 MDM 注册类型,tvOS 支持设备注册类型。Shared iPad 也得到支持。每个平台的声明和状态项集合基本一致。

双通道管理的注意点。 macOS 和 Shared iPad 各有两个 MDM 通道(设备通道和用户通道)。声明式设备管理需要在每个通道上单独启用,状态报告也需要分别监控。

状态报告的扩展。 新增三种状态项:密码合规状态(Passcode.is-compliantPasscode.is-present)、配置安装的账户信息、MDM 安装的应用状态。这些状态项让服务端能更精确地了解设备的实际状态。

代码片段

// 声明式配置示例:密码合规后激活 Wi-Fi 配置
{
  "Identifier": "com.example.wifi-activation",
  "Type": "com.apple.activation.simple",
  "Predicate": "passcode-is-compliant == true",
  "Configurations": [
    "com.example.wifi-profile"
  ]
}

// Wi-Fi 配置声明
{
  "Identifier": "com.example.wifi-profile",
  "Type": "com.apple.configuration.wifi",
  "Payload": {
    "SSID": "SecureNetwork",
    "SecurityType": "WPA2",
    "Password": "..."
  }
}
// 传统 MDM 的轮询模式:
// 1. 服务端发送密码策略
// 2. 服务端反复轮询设备检查密码状态
// 3. 密码合规后,服务端发送 Wi-Fi 配置

// 声明式管理模式:
// 1. 服务端一次性发送密码配置 + Wi-Fi 配置(带激活条件)
// 2. 设备自动应用密码策略
// 3. 密码合规后,设备自动激活 Wi-Fi 配置
// 4. 无需任何服务端轮询

最佳实践

  • 尽早开始迁移到声明式设备管理——Apple 明确表示未来协议功能的重点在声明式方向
  • 对于密码相关的安全策略,利用谓词绑定激活条件,避免服务端轮询
  • 在 macOS 和 Shared iPad 上,记得为每个通道单独启用声明式管理
  • 利用状态报告的增量更新机制,服务端只需处理实际发生变更的状态
  • 将声明式管理与传统 MDM 命令混合使用是可行的,不需要一次性迁移
  • iOS 16 中用户可以在设置应用的 MDM 详情页查看活跃的配置项,增加透明度

还有什么值得关注

  • macOS 和 tvOS 上的配置详情视图让终端用户也能看到 MDM 推送的配置
  • 谓词系统在今年得到了增强,支持更复杂的条件组合逻辑
  • 状态报告的可靠传递机制:设备会跟踪服务端的成功响应,确保状态更新不丢失
  • 配套观看 WWDC 2021 的声明式设备管理介绍 Session 了解基础概念
WWDC 2022