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