症状: 控制台显示更新命令已发送,但 macOS 27 节点不再执行旧的软件更新流程。
最快解法: 先迁移 MDM 控制面,再升级设备;没有通过声明式更新、强制安装、状态回传和失联恢复验收的生产节点,暂缓升级。
截至 2026 年 8 月 27 日,Apple 官方文档已将 macOS 27.0 的旧版软件更新管理列为失效范围;Apple Developer 发布页显示,当前公开测试线仍是 macOS 27.0 beta 6,版本号为 26A5416b,发布时间为 2026 年 8 月 17 日。(support.apple.com)
这篇文章适合三类人:
- 管理企业远程 Mac 机群,需要制定 macOS 27 升级和分批放量策略的 IT 负责人。
- 维护 MDM、设备合规和无人值守更新流程的平台工程团队。
- 负责 iOS CI/CD 发布 SLA,需要避免构建节点因系统更新失控而中断的技术负责人。
注意: macOS 27 仍应按 Beta 状态管理。不要把 Beta 节点的成功结果直接当成正式生产准入证据;第三方 MDM 的支持范围也不能从 Apple 协议能力直接推导,必须逐项核实供应方当日文档。
第一步:先盘点旧更新控制面,而不是先升级 Mac
Apple 的变化不是简单地把一个命令换成另一个命令。官方部署说明指出,旧的软件更新管理在 27.0 系统中不再工作,受影响范围包括旧的软件更新命令、更新查询、推荐版本节奏设置和相关限制。(support.apple.com)
因此,你要先把当前工作流拆成四类动作:
- 发现更新: 查询设备可用版本、硬件适配关系和推荐版本。
- 决定更新: 选择目标版本、延期周期、通知规则和标准用户权限。
- 执行更新: 下载、强制安装、重启和获取必要的启动凭据。
- 证明结果: 记录策略是否生效、安装是否开始、失败原因和最终系统版本。
如果其中任何一步仍依赖旧命令,不能因为设备在控制台中显示在线,就判断它已经兼容 macOS 27。
你可以按下面的方式建立缺口清单:
- 旧更新查询 → macOS 27 可能无法提供原有结果 → 改由声明式状态和 Apple 软件更新目录协同判断 → 影响版本可见性。
- 旧推荐节奏设置 → macOS 27 不再作为可靠控制面 → 迁移到
SoftwareUpdateSettings中的RecommendedCadence或对应声明 → 影响用户看到的版本范围。 - 旧强制安装命令 → 不能作为 27.0 的回退路径 → 使用软件更新强制声明 → 影响合规截止时间。
- 控制台“命令已发送” → 不等于设备已激活策略 → 订阅设备状态频道 → 影响审计证据。
- 设备升级后重新上线 → 不等于 CI Agent 已恢复 → 增加服务健康检查和构建探针 → 影响发布 SLA。
Apple 的 SoftwareUpdateSettings 已定义自动行为、延期、通知、标准用户更新权限和推荐节奏等配置项;其中多个配置可以共同形成设备最终生效的配置。(developer.apple.com)
第二步:用平台能力证明 MDM 是否真的能迁移
“支持 macOS 27”不是合格的采购结论。你需要让 MDM 供应方回答五个可验证问题:
- 能否为 macOS 设备通道启用 Declarative Device Management?
- 能否同步
com.apple.configuration.softwareupdate.settings? - 能否创建指定版本和目标时间的强制更新声明?
- 能否订阅
softwareupdate.*与device.operating-system.*状态? - 能否导出设备级失败原因,而不是只返回一个任务成功状态?
Apple 的声明式管理可以与既有 MDM 命令和配置描述文件共存,企业可以渐进迁移,不必一次性重写所有设备管理流程。可是,声明式管理必须先通过 DeclarativeManagementCommand 启用;在 macOS 上,设备通道和用户通道需要分别处理,状态也分别回传。(developer.apple.com)
这意味着迁移并不是“在控制台勾选一个开关”。你需要确认平台是否真正完成了:
- 设备通道声明式管理启用。
- 用户通道声明式管理启用。
- 声明清单同步。
- 声明版本变化后的重新同步。
- 设备能力与服务能力匹配。
Apple 的能力模型要求设备通过 StatusManagementClientCapabilities 宣布支持的声明类型和状态项,服务端不应把设备没有宣布支持的声明发送过去。(developer.apple.com)
对企业采购来说,这里有一个容易被忽略的限制:协议支持不等于管理平台界面支持。即使 Apple 的 Schema 已经包含某个配置,平台也可能尚未提供策略编辑器、状态映射、失败重试或批量导出能力。你应要求供应方给出实际配置样例和导出结果,而不是接受一句“后续版本支持”。
第三步:把软件更新规则映射成声明
企业真正需要迁移的是规则,不是 JSON 外形。建议为每条现有规则建立一份内部映射记录,至少包含:
- 原有规则名称。
- 适用设备组。
- 目标系统版本或构建版本。
- 延期和通知要求。
- 是否允许标准用户执行更新。
- 是否允许 Beta。
- 强制安装截止时间。
- 冲突时的优先级。
- 声明式替代项。
- 验收状态和负责人。
最小化配置可以只保留解释声明类型、作用域和策略效果所需的字段:
{
"Type": "com.apple.configuration.softwareupdate.settings",
"Identifier": "software-update-policy-prod",
"Payload": {
"Notifications": true,
"AllowStandardUserOSUpdates": false,
"Deferrals": {
"MajorPeriodInDays": 30
},
"AutomaticActions": {
"Download": "AlwaysOn",
"InstallOSUpdates": "AlwaysOn"
}
}
}
上面的结构只用于说明配置关系。具体键值、支持版本和设备范围,应以 Apple 当前的 SoftwareUpdateSettings 文档以及你的 MDM 实现为准。Apple 文档明确说明,软件更新配置允许多个配置共同组合,并作为一份最终有效配置应用到设备。(developer.apple.com)
这会带来三个实际风险:
✅ 策略重叠: 不同设备组同时收到多个声明,最终效果可能与控制台单条策略不同。
⚠️ 作用域错位: 设备通道和用户通道混用,导致策略看似已下发,实际没有在目标上下文激活。
❌ 版本锁定误判: 只验证目标版本字段,没有验证设备实际获得的待安装版本。
验收时不要只截图控制台配置。你要从设备状态和服务端导出中确认:
- 当前声明是否有效。
- 当前声明是否已激活。
- 设备实际使用了哪些配置。
- 是否存在冲突或无效原因。
- 设备待安装的版本是否正确。
第四步:用状态回传区分“已发送”和“已完成”
软件更新管理最常见的审计错误,是把“配置已发送”当成“升级已完成”。
Apple 的软件更新强制流程包含多个阶段。声明激活后,设备会根据要求联系 Apple 软件更新目录并开始下载;在 Apple Silicon Mac 执行安装前,设备还可能向管理服务获取 bootstrap token。安装成功后设备重启,失败时则返回失败状态和原因。(developer.apple.com)
你的状态模型至少要拆成以下几层:
- 配置已发送: MDM 服务已经完成声明同步。
- 策略已激活: 设备确认声明有效并开始按规则处理。
- 更新待安装: 设备已经识别目标版本和安装原因。
- 安装进行中: 设备进入等待、下载或安装阶段。
- 安装失败: 设备返回失败状态和失败原因。
- 系统已重启: 设备重新上线。
- 版本已确认: 设备回传最终操作系统版本和构建版本。
- 业务已恢复: CI Agent、签名服务和构建任务通过探针。
Apple 提供的软件更新状态项包括待安装版本、安装状态、安装原因和失败原因;设备还可以回传当前操作系统版本与构建版本。(developer.apple.com)
建议审计记录包含:
- 设备唯一标识。
- 设备组和策略版本。
- 声明标识符。
- 策略发送时间。
- 策略激活时间。
- 安装开始时间。
- 重启时间。
- 最终系统版本和构建版本。
- 失败原因。
- 人工处置记录。
- CI 恢复时间。
如果平台只能显示“成功”“失败”两个状态,无法提供设备级时间戳和失败原因,就不适合直接承载有发布 SLA 的生产构建节点。
第五步:在远程 Mac 上验证无人值守恢复
远程 Mac 的难点不在于能否下载更新,而在于重启后是否还能自动恢复。
数据中心节点通常没有人在旁边输入密码、点击确认或重新启动构建服务。你需要把以下故障分别设计证据和处置路径:
磁盘空间不足
设备应返回失败原因或至少产生可关联的系统事件。处置动作可以是暂停该设备的更新声明、清理缓存、转移构建任务,再重新触发策略。不要直接重复发送同一条声明,否则你只会得到更多“已发送”记录。
更新停滞
定义一个内部超时窗口,并用状态变化而不是控制台刷新判断是否停滞。若状态长期停留在等待或下载,先确认网络、Apple 更新目录访问、内容缓存和设备磁盘状态,再决定是否转移任务。
重启后 MDM 未上线
检查设备网络路径、推送通道、证书和设备身份。MDM 未重新上线时,不要把系统版本变化当成完整成功,因为你无法确认设备是否仍受策略管理。
FileVault 阻塞恢复
对于启用 FileVault 的 Apple Silicon Mac,要验证重启后的解锁路径、bootstrap token 使用情况以及 MDM 是否能继续接收状态。Apple 的软件更新强制流程明确提到,Apple Silicon Mac 在安装前可能需要从管理服务获取 bootstrap token。(developer.apple.com)
CI Agent 未自动启动
系统版本回传后,继续检查 CI Agent、代码签名工具链、钥匙串访问、缓存目录和构建任务。Mac 在线,不等于构建节点可用。
如果你需要准备隔离的远程 Mac 作为试点或替代节点,可以先从 远程 Mac 计算资源方案 评估节点交付方式;若团队需要固定的 Apple Silicon 构建机,也可以对照 Mac mini 云算力订购方案 规划测试与主备资源。
用可勾选清单决定是否放量
以下清单适合在变更评审会上逐项签字。每个“否”都应对应负责人和回退动作。
MDM 控制能力
- [ ] MDM 供应方提供了 macOS 27 声明式软件更新的正式功能文档。
- [ ] 平台支持设备通道和用户通道的声明式管理启用。
- [ ] 平台能同步软件更新配置和强制更新声明。
- [ ] 平台能读取设备能力,并避免发送未支持的声明。
- [ ] 平台文档列出了当前版本的已知限制。
策略执行能力
- [ ] 已将旧命令、查询和推荐节奏逐条映射到声明式配置。
- [ ] 已验证自动下载、自动安装、延期和通知规则。
- [ ] 已验证标准用户权限与管理员权限的差异。
- [ ] 已验证目标版本或构建版本没有被其他声明覆盖。
- [ ] 已从设备实际状态确认最终有效配置。
状态与审计能力
- [ ] 能区分配置发送、策略激活、安装进行中和安装完成。
- [ ] 能读取待安装版本、安装状态和失败原因。
- [ ] 能读取最终操作系统版本与构建版本。
- [ ] 导出结果包含设备标识、策略版本和时间戳。
- [ ] 失败节点有人工处置和重新验证记录。
远程恢复能力
- [ ] 远程 Mac 能在无人值守条件下完成重启。
- [ ] FileVault 解锁和 bootstrap token 流程已验证。
- [ ] MDM 重启后能重新上线。
- [ ] CI Agent 能自动恢复并通过构建探针。
- [ ] 关键节点有带外重启、替代节点或可验证回退流程。
如果控制能力、策略执行和状态审计全部通过,但远程恢复没有通过,结论应是“限范围试点”,而不是“可放量”。如果关键构建机没有替代节点,结论应直接是“暂缓升级”。
用同生产策略建立最小试点证据
测试 Mac 不应只是安装了 macOS 27 的空机器。它必须使用与生产一致的:
- MDM 声明和设备组规则。
- 网络出口和证书链。
- FileVault 配置。
- CI Agent 与构建脚本。
- 代码签名和钥匙串访问方式。
- 缓存、日志和监控策略。
试点至少要覆盖机群中的主要差异维度,例如不同 Apple Silicon 型号、不同网络区域、不同磁盘状态、不同用户权限和不同构建工作负载。Apple 没有规定所有企业统一保留某个百分比的测试节点,因此节点数量应由这些差异和业务连续性要求决定,而不是简单按设备总数计算。
在试点期间,保留未升级节点承担正式发布任务。这样迁移失败时,你回退的是发布流量,而不是试图把一台已经失联的 Mac 强行恢复到原状态。
如需进一步规划主备构建资源,可以参考 Mac 构建节点的资源规划思路,重点核对替代节点是否能覆盖升级期间的发布负载,而不是只比较单台机器的配置。
文末 FAQ:把长尾问题转成准入条件
前面的准入清单通过后,你还应把结果写入企业变更记录。记录中不要只写“MDM 已支持 macOS 27”,而要写清支持了哪些声明、哪些状态、哪些恢复路径,以及哪些节点仍被排除。
如果现有生产 Mac 不适合承担破坏性升级测试,可以先准备一台与生产策略一致的隔离远程 Mac,验证声明式更新、重启恢复和 CI 工作负载,再根据证据扩展试点节点或批量放量。
当前继续依赖旧 MDM 命令的方案,最大问题是控制台反馈可能与设备实际行为脱节;纯人工维护的本地 Mac 又会增加采购、折旧、现场维护和替代节点成本。对需要临时测试环境、隔离升级节点或短期 CI 备用容量的团队,使用 MACCOME 的远程 Mac 可以先验证迁移假设,再决定是否长期采购实机;但如果你需要长期满负载运行、物理接口或完全自主管理硬件,自购 Mac 仍可能更合适。