先给结论: iOS 27 之后,判断一条更新策略有没有生效,依据不再是命令回执,而是设备自己报上来的状态值。原因是旧机制下服务器发命令、设备执行并回一条回执;新机制下服务器只声明一个目标状态,设备自己维护并在偏离时上报。回执说的是「命令送达了」,状态上报说的是「设备现在处于什么状态」,这两件事在声明式下是分开的。
我这边管着一批租赁设备的技术侧,这次迁移最麻烦的不是改配置,是改验证方式。以前看一眼回执是 Acknowledged 就算完,现在这一栏给不了结论。
失效的范围,按苹果的原话
苹果在 2026 年 9 月 14 日发布 iOS 27,企业侧说明里的表述是:旧式软件更新管理在所有 27.0 操作系统上不再起作用。失效清单包括软件更新命令、软件更新查询、推荐节奏设置,以及软件更新限制,比如延迟和后台安全改进。同一变化适用于 iPadOS 27。
这不是突然发生的。苹果开发者文档里,ScheduleOSUpdate、AvailableOSUpdates、OSUpdateStatus 这三个命令自 iOS 26.0 起就被标记为弃用,并指向声明式的配置与状态项。从 26 到 27 有差不多一年的迁移窗口。
两个参数,各自的范围
参数一是延迟天数,取值范围 1 到 90 天。这是新机制下能给的最长延迟,此前靠限制把更新压得更久的策略,在这条路上没有对应项。参数二是推荐节奏,三档可选:显示全部可用更新、仅显示最旧版本的更新、仅显示升级到最新版本的更新。这一档决定的是用户在设备上能看到哪些更新提示。
同一份配置还顺带决定另外两件事:后台安全改进是否自动安装,以及安装之后是否允许用户移除。这两项对租赁设备的影响比主版本更
新更频繁,配置时要一并考虑。
机制上换的是什么
现象是:升级到 27 之后,后台配了更新限制的设备,限制不再起作用,设备侧照常收到更新提示。看上去像配置失效,实际是通道换了。底层机制是这样的------命令是一次性的,服务器在需要时下发一条,设备执行完就结束;状态是持续的,服务器声明一个目标,设备自己往那个目标靠,并在偏离时上报。之所以验证方式必须跟着改,是因为在状态模型里,「送达」和「达成」是两个独立的时点。
迁移之后该验的三项
第一项,延迟天数的一致性。下发之后逐台核对状态上报值里的延迟天数,看是不是和下发值一致。第二项,推荐节奏的档位。三档各自对应不同的用户可见范围,档位错了用户看到的提示就不一样。第三项,后台安全改进的安装与移除设置。三项全部一致才算这一批迁移完成。
灰度必须按版本分组。26 和 27 的设备表现不同,拿一台设备试完就全量推,出问题的时候回滚范围会非常大。MDM.Plus 的灰度看板按批次显示每台设备的这三项状态上报值,某一批出现不一致时只回滚该批,其余批次不受影响。
两条边界
边界一:这套声明式配置对设备状态有要求,苹果的说明中与受监督绑定,未受监督的设备上这套配置不会生效,需要另找路径。
边界二:声明式的状态上报存在延迟,下发之后立刻查可能查不到变化,按 6 到 30 小时的窗口复核更稳妥。
选型阶段就该问的一件事
之所以要自己做一遍验证,是因为不同管理服务对声明式的支持程度不一样。苹果自己也说明过,并非所有配置和设置在所有设备管理服务上都可用,各家实现不同。所以在选型阶段就要问清楚:延迟天数、推荐节奏、后台安全改进这三项,平台上是不是都暴露出来了。
我们这边的做法是把这三项做成一张对照表,每批灰度完逐台打勾,10 台里出现 2 台不一致就先停下来查。MDM.Plus 的灰度看板就是按这个思路做的,三项状态值并排显示,不一致的批次单独标出来,回滚的时候只回滚那一批。
这里有一条不适用条件:如果机队里还有大量 26 及以下的设备,那么新旧两套逻辑要并行一段时间,不能用同一张对照表去验两个版本。
给同行的一个自验判据
迁移完先挑 10 台设备,逐台比对下发值与状态上报值,三项一致再往下推。
- 判据一:延迟天数、推荐节奏档位、后台安全改进三项逐台核对,缺一项不算完成
- 判据二:灰度按系统版本分组,26 与 27 分开验,不要混在一起
- 判据三:状态上报有 6 到 30 小时延迟,下发后立刻查的结果不作数
- 判据四:未受监督的设备不适用这套配置,要单独列出来