使用 MDM 将软件更新部署到 Apple 设备
声明式设备管理是 Apple 设备管理的未来方向。它使设备无需持续轮询即可异步应用设置并向移动设备管理 (MDM) 解决方案返回状态报告。这是考虑到性能和扩展性的理想之选,同时也是一种现代的软件更新管理方式。声明式设备管理会在值和配置更改时主动从设备提供状态报告。这样一来,MDM 解决方案便可始终掌握设备的最新情况,无需执行定期查询。
MDM 解决方案会声明预期操作系统版本状态并将达成该状态的任务授权给设备本身,而不是将软件更新命令发送给设备以发起更新。这可允许适应性更强的管理式软件更新过程和更高的用户透明度。
利用软件更新声明的重要性
MDM 解决方案应尽可能利用软件更新声明。但是,旧的软件更新命令和描述文件仍可用并受支持。它们可搭配软件更新声明一起使用,但有以下更改:
由声明定义的推迟优先于访问限制配置的推迟。
macOS 上由声明应用的自动软件更新设置优先于配置描述文件中提供的自动更新设置。
存在使用声明式设备管理配置的待处理软件更新时,部分 MDM 命令不再由客户端处理,而是返回错误以指示设备上存在活跃声明,如下表所示:
MDM 命令 | 结果 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| 有限:在 macOS 中,未被管理的基于操作系统的更新可能以命令响应形式显示,如在 Xcode 或命令行工具中。 | ||||||||||
| 设备返回 | ||||||||||
| 设备返回空白状态数组。 |
使用 Apple 软件查询服务
Apple 软件查询服务(在 https://gdmf.apple.com/v2/pmv 可用)是获取公开可用更新、升级和快速安全响应的官方资源。它允许 MDM 解决方案在版本发布后即刻查询,并及时准确地计算每个硬件机型的适用性。
JSON 响应包含可用软件发布版本的三个列表:
PublicAssetSets:此列表包含向尝试更新或升级的大众提供的最新发布版本。
AssetSets:此列表是 PublicAssetSets 的子集,并包含 MDM 解决方案可向受监督设备推送的所有发布版本。
PublicRapidSecurityResponses:这个列表包含 Apple 设备当前可用的快速安全响应发布版本。
列表中的每个元素都包含操作系统的 ProductVersion
号和 Build
、版本发布时的 PostingDate
、ExpirationDate
,以及该版本的 SupportedDevices
列表。设备列表会匹配来自设备的 ProductName
值,该值在设备尝试注册时于 DeviceInformation
响应、初始 Authenticate
请求或 MachineInfo
中返回。
过期日期通常设为自发布日期起 180 天之后,定义了更新签名的过期日期。过期的更新无法再安装在设备上。后续更新可用时,先前的更新可能会更新其过期日期。如果未提供过期日期,说明该更新尚未过期。仅当更新的过期日期已过去时,该更新才过期。
资源使用以下键按操作系统平台分组:
iOS
(包括 iPadOS、Apple tvOS 和 watchOS)macOS
xrOS
(指 visionOS)
{
"AssetSets": {
"iOS": [
{
"ProductVersion": "17.5",
"Build": "21F6079",
"PostingDate": "2024-05-13",
"ExpirationDate": "2024-08-15",
"SupportedDevices": ["iPad11,1", "iPad11,2", "iPad11,3", "iPad11,4", "iPad11,6", "iPad11,7", "iPad12,1", "iPad12,2", "iPad13,1","iPad13,10", "iPad13,11", "iPad13,16", "iPad13,17", “iPad13,18", "iPad13,19", "iPad13,2", "iPad13,4", “iPad13,5", "iPad13,6", "iPad13,7", "iPad13,8", "iPad13,9", "iPad14,1", "iPad14,2", "iPad14,3", "iPad14,4", "iPad14,5", "iPad14,6", "iPad6,11", "iPad6,12", "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8", "iPad7,1", "iPad7,11", "iPad7,12", "iPad7,2", "iPad7,3", "iPad7,4", "iPad7,5", "iPad7,6", "iPad8,1", "iPad8,10", "iPad8,11", "iPad8,12", "iPad8,2", "iPad8,3", "iPad8,4", "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8", "iPad8,9", "iPhone10,1", "iPhone10,2", "iPhone10,3", "iPhone10,4", "iPhone10,5", "iPhone10,6", "iPhone11,2", "iPhone11,6", "iPhone11,8", "iPhone12,1", "iPhone12,3", "iPhone12,5", "iPhone12,8", "iPhone13,1", "iPhone13,2", "iPhone13,3", "iPhone13,4", "iPhone14,2", "iPhone14,3", "iPhone14,4", "iPhone14,5", "iPhone14,6", "iPhone14,7", "iPhone14,8", "iPhone15,2", "iPhone15,3"
]
},
使用产品版本列表来确定哪些版本高于设备的当前操作系统版本以及适用于特定设备。请将该版本列表作为可能的操作系统更新候选项提供给 MDM 管理员。
将状态报告发送给 MDM 解决方案
若要在状态项目更改时接收其更新,服务器必须通过将 ManagementStatusSubscriptions
声明发送给设备来订阅每个状态报告。之后,当 ManagementStatusSubscriptions
声明变为活跃、订阅项目的状态发生更改时以及每 24 小时,设备均会将 StatusReport
发送给 MDM 解决方案。
为了监控操作系统版本和软件更新状态,MDM 解决方案可能需要订阅以下状态报告:
状态报告 | 描述 |
---|---|
| 设备的操作系统版号(如 21E219)。 |
| 设备使用的操作系统版本(如 17.4)。 |
| 设备使用的操作系统版号和快速安全响应版本(如 20A123a 或 20F75c)。 |
| 设备使用的操作系统快速安全响应版本(如 a)。 |
| 包含设备上待处理软件更新的版号和操作系统版本的词典。 |
| 软件更新安装状态,包括以下值:
|
| 包含待处理软件更新原因相关详细信息的词典。
|
| 软件更新失败相关的详细信息。详细信息包括软件更新失败次数、上次失败时间戳和失败原因。 |
| 设备已注册的 Beta 版计划名称,若没有已注册的 Beta 版计划,则为空白字符串。 |
除了其他报告,MDM 解决方案可能还会将 softwareupdate.install-reason
供管理员使用,以便其提供支持和更深入了解更新的触发方式。此词典可用于确定更新是由用户自行发起、自动发生,还是由软件更新执行声明强制执行。
MDM 注册期间请求特定的最低软件版本
如果设备支持此功能,在“设置助理”中检测到管理配置时,发送给 MDM 解决方案的初始 HTTP POST 请求的 MachineInfo
数据中会返回设为 True 的 MDM_CAN_REQUEST_SOFTWARE_UPDATE 键。有关更多信息,请参阅 Apple 设备管理 GitHub 仓库中的 MachineInfo yaml 文件。
另外,设备还会在 MachineInfo
数据中提供这些字段(全部为字符串):
键 | 支持的最低操作系统版本 | 描述 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
VERSION | iOS 17 iPadOS 17 macOS 14 | 设备上安装的版号(例如,7A182)。 | |||||||||
OS_VERSION | iOS 17 iPadOS 17 macOS 14 | 设备上安装的操作系统版本(例如,17.0)。 | |||||||||
SUPPLEMENTAL_BUILD_VERSION | iOS 17 iPadOS 17 macOS 14 | 设备的快速安全响应版本(如有)。 | |||||||||
SUPPLEMENTAL_OS_VERSION_EXTRA | iOS 17 iPadOS 17 macOS 14 | 设备的额外快速安全响应版本(如有)。 | |||||||||
SOFTWARE_UPDATE_DEVICE_ID | iOS 17.4 iPadOS 17.4 macOS 14.4 | 设备型号标识符,用于在 Apple 软件查询服务中查询可用的操作系统更新。 |
基于提供的信息,MDM 解决方案可决定是否强制设备进行更新。
如果 MDM 解决方案选择不强制执行软件更新,它只会返回 MDM 注册描述文件来响应 HTTP POST 请求,就像其正常允许 MDM 注册继续执行一样操作。
如果 MDM 解决方案选择强制执行软件更新,它必须返回带有 403 状态代码的 HTTP 响应,并在响应主体中包括 JSON 或 XML 对象(HTTP 内容类型响应标头必须分别设为
application/json
或application/xml
)。
收到此错误响应后,设备会尝试更新到指定版本。如果更新成功,设备会重新启动,并且用户必须再次完成“设置助理”。设备发送给 MDM 解决方案的下个 MachineInfo
POST 请求会显示更新的操作系统版本,然后 MDM 解决方案可继续执行 MDM 注册。如果更新失败,用户会看到错误,同时“远程管理”面板会再次显示在“设置助理”中。
下表中定义了 response
方案。
键 | 类型 | 必需 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| 字符串 | 是 | 必须设为 | ||||||||
| 字符串 | 否 | 错误描述。仅用于记录。 | ||||||||
| 字符串 | 否 | 适用于向用户显示的错误描述。 | ||||||||
| 词典 | 是 | 指定软件更新的额外数据。 |
此处定义了 details
词典方案。
键 | 类型 | 必需 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| 字符串 | 是 | 设备需要更新到的操作系统版本。 | ||||||||
| 字符串 | 否 | 设备需要更新到的版号。 | ||||||||
| 词典 | 否 | 设备会在 Beta 版计划中注册,允许将软件强制更新至 Beta 版计划操作系统版本。 强制执行的软件更新完成后,设备仍保留在 Beta 版计划中。 |
如果仅指定了 OSVersion
,设备会自动下载并安装此版本可用的任何快速安全响应。如果需要特定版号或补充版本,MDM 解决方案也可选择指定 BuildVersion
。例如,即使 iOS 16.5.1(c) 已可用,若需要设备在注册前运行的是 iOS 16.5.1(a),MDM 解决方案必须将 OSVersion
设为 iOS 16.5.1,并将 BuildVersion
设为 20F770750b。
【重要事项】在 macOS 15 之前,仅可指定来自 PublicAssetSets
和 PublicRapidSecurityResponses
列表的版本。在 macOS 15 中,还可使用来自 AssetSets
的资源。
软件更新的 MDM 设置
com.apple.configuration.softwareupdate.settings
声明(在 iOS 18、iPadOS 18 和 macOS 15 中可用)包含的词典可用于配置软件更新行为的各个方面。
MDM 解决方案在多个声明中分发不同键后,设备会合并所有活跃软件更新设置声明的设置。如果出现多个声明配置了同一个键,合并行为会因各个键而异,具体如下表中所述。
使用 MDM 配置自动软件更新
com.apple.configuration.softwareupdate.settings
声明提供了一个词典,可用于在被监督的 iPhone、iPad 和 Mac 设备上定义自动软件更新行为。有关更多信息,请参阅AutomaticActions 词典键。
MDM 如何处理快速安全响应
快速安全响应会始终应用到操作系统的最新更新,这是快速安全响应的基础版本。例如,iPhone 安装了操作系统版本 iOS 17.2,那么它会应用 17.2 (a) 补充更新(如有)。iOS 18、iPadOS 18 和 macOS 15 中提供了合并更新,这可让软件更新包括任何可用的快速安全响应。
在 iOS 18、iPadOS 18 和 macOS 15 之前,MDM 解决方案可能需要触发两次软件更新,才能确保已使用指定的补充版本:首先,如果设备上尚未安装补充更新的基础版本,它必须将设备更新到该基础版本(例如,iOS 17.1 到 iOS 17.2);然后它必须将该基础版本更新到补充版本(例如,iOS 17.2 到 iOS 17.2 (a))。
在 iOS 18、iPadOS 18 和 macOS 15 中,MDM 解决方案可指定以下任一项:
操作系统版本(这会自动安装可用的快速安全响应)
补充版号(这会导致设备自动执行必要的基础版本更新以作为流程的一部分)
这两种方法均会在自动设备注册期间应用到软件更新强制执行配置,以及强制执行的最低版本。
com.apple.configuration.softwareupdate.settings
声明还可用于在被监督的 iPhone、iPad 和 Mac 设备上配置快速安全响应行为。有关更多信息,请参阅 iOS、iPadOS 和 macOS 的 RapidSecurityResponse 词典键。
使用 MDM 推迟软件更新
com.apple.configuration.softwareupdate.settings
声明可用于在被监督的 iPhone、iPad 和 Mac 设备上将软件更新或升级推迟 1 到 90 天。
配置的推迟定义了一个版本在公开可用后多少天内不向用户提供。MDM 解决方案不受配置的推迟影响,仍可在管理式设备上强制执行特定软件更新、升级或快速安全响应。有关更多信息,请参阅iOS 和 iPadOS 的 Deferrals 词典键和macOS 的 Deferrals 词典键。
【注】推迟软件更新也会推迟依赖于该版本的任何快速安全响应。
使用 MDM 强制执行软件更新
若要在使用设备注册或自动设备注册而注册的设备上于特定时间强制执行软件更新,MDM 解决方案可应用 com.apple.configuration.softwareupdate.enforcement.specific
声明。
如果配置指定的操作系统或版号与设备当前版本相同或者更旧,则配置会被忽略。
如果多个配置中存在的操作系统或版号比设备当前版本要更新,则会首先处理包含最早目标日期和时间的配置,然后处理队列中剩余的任何其他配置。设备更新到新版本后,会重新处理这一系列配置以确定接下来处理哪个配置。
如果 MDM 解决方案仅定义了 TargetOSVersion
,则会自动安装任何可用的快速安全响应。若要指定特定目标版本或快速安全响应,MDM 解决方案除了指定包括补充版本标识符在内的版号外,还可以使用 TargetBuildVersion
键。
有关更多信息,请参阅强制软件更新词典键。
通知
Notifications 键更改默认通知行为以仅在强制执行时间和重新启动倒计时前 1 小时显示通知。有关更多信息,请参阅Notifications 键。
针对搭载 Apple 芯片的 Mac 电脑使用 Bootstrap 令牌
若要在搭载 Apple 芯片的被监督 Mac 电脑上授权强制执行的软件更新,MDM 解决方案可请求和托管 Bootstrap 令牌。这可提供完全流畅的软件更新体验,流程中也无需进行用户交互。需要时,设备使用 GetBootstrapTokenRequest
从 MDM 解决方案获取 Bootstrap 令牌。
第一步,MDM 解决方案会使用 SecurityInfo
命令来确定设备是否支持 Bootstrap 令牌。如果响应包括设为 True 的 BootstrapTokenRequiredForSoftwareUpdate
,设备可使用 Bootstrap 令牌授权软件更新。
若要创建 Bootstrap 令牌,MDM 解决方案必须将 com.apple.mdm.bootstraptoken
添加到 MDM 描述文件中的 ServerCapabilities
数组。有关更多信息,请参阅 Apple 开发者网站上的 MDM 有效负载。
设备收到 Bootstrap 令牌后,会在启用安全令牌的用户下次登录时创建 Bootstrap 令牌。然后设备会联系 MDM 解决方案的签入端点,并使用 SetBootstrapTokenRequest
托管令牌。有关更多信息,请参阅 Apple 开发者网站上的设定 Bootstrap 令牌。
有关最新方案技术规格,请参阅 Apple 设备管理 GitHub 仓库。