Apple 的文档把 Apple Foundation Models 的不可用原因列为 3 类:设备不符合条件、Apple Intelligence 未启用、模型尚未准备好。(Apple Developer:UnavailableReason 状态说明) 本周先读取 SystemLanguageModel 的 availability,按具体状态分流;不要一看到 unavailable 就重装 Xcode。只有状态为 available、调用仍报错时,才检查会话、请求和错误类型。
谁该看:正在跟 SwiftUI 或 iOS 课程接入模型、第一次调用就遇到提示的学生,可以照步骤定位问题。
只有 Windows、学校电脑或旧款 Mac 的学习者,可以先判断当前环境是否符合要求。
使用远程 Mac 的学生,也应先核验远端设备与模型状态;远程连接本身不能绕过设备或地区限制。
最后更新于 2026 年 9 月 27 日;系统与设备支持信息核对自 Apple 当前官方文档,并在下文链接对应的官方支持页面核验。
SECTION 01 先读状态,再判断故障层级
这里的 API 可以理解为课程提供的调用接口;availability 是系统告诉你“模型现在能不能接活”的状态。按 Apple 的说明,available 表示系统已准备好接收请求;unavailable 则会带上不可用原因。(Apple Developer:availability 状态定义)
在创建会话或发送请求前,先查看这个状态。最小检查可以写成:
let model = SystemLanguageModel.default
switch model.availability {
case .available:
print("模型可用")
case .unavailable(let reason):
print("模型不可用:\(reason)")
@unknown default:
print("遇到尚未处理的状态")
}
这段检查回答的是“模型能不能用”,不等于“某条请求为什么失败”。Apple 的示例也建议依据可用状态显示不同处理方式,而不是把所有情况归为一个错误。(Apple Developer:SystemLanguageModel 文档)
SECTION 02 设备资格与 Apple Intelligence 设置
deviceNotEligible:设备不符合条件怎么办?
这个状态表示设备不支持 Apple Intelligence,不是模型文件还在下载。此时反复等待或重装开发工具并不会让不符合资格的硬件变成受支持设备。
先在 Mac 的“关于本机”查看芯片与 macOS 版本,再对照 Apple 当前的 Apple Intelligence 设备要求。截至本文核对时,Apple 列出的 macOS 27 支持设备包括搭载 M1 或后续芯片的 Mac。支持范围可能随系统更新调整,所以应以最新官方列表和设备实际读取到的状态为准。
如果你手边只有 Windows 电脑、学校提供的 Intel Mac,或其他不符合要求的设备,先继续学习不依赖该模型的 Swift 与 SwiftUI 课程内容;不要把“装不上模型”误判为自己的代码写错。
Apple Intelligence 已开启,为什么还是不可用?
appleIntelligenceNotEnabled 表示系统功能未启用。到系统设置中核对 Apple Intelligence 是否已开启,并按 Apple 当前说明确认设备语言、Siri 语言及可用地区条件;不建议尝试绕过地区或设备限制。(Apple Developer:不可用原因定义)
设置界面里看得到入口,不代表 API 已经可用。完成设置后回到程序重新读取 availability:如果状态仍未变化,记录完整原因并确认设置是否生效,不要只凭界面入口就继续调试请求。
modelNotReady:该等多久?
Apple 没有给所有设备都适用的固定等待时长。官方说明模型会自动准备,过程可能受网络状态、电池电量和系统负载等因素影响;因此,单凭 modelNotReady 不能断定是代码错误,也不能据此承诺某个等待时间。(Apple Developer:modelNotReady 说明)
你可以先保持网络连接、接入电源,并避免设备正忙于大量任务;随后重新读取状态。如果反复重试仍是同一结果,就暂停连续调用,核实系统版本、设备资格和 Apple Intelligence 状态。若课程进度被卡住,先完成不依赖模型的部分,等条件变化后再复测。
SECTION 03 快速分流表与复核清单
| 读取到的结果 | 优先检查 | 下一步 |
|---|---|---|
.unavailable(.deviceNotEligible) |
芯片型号、系统版本、官方支持范围 | 换用符合条件的设备,或先学不依赖模型的内容 |
.unavailable(.appleIntelligenceNotEnabled) |
系统功能是否启用、语言与地区条件 | 按官方说明完成设置后重新读取状态 |
.unavailable(.modelNotReady) |
网络、电源、系统负载与模型准备状态 | 低风险等待并复查;不设固定等待承诺 |
.available,但调用失败 |
会话状态、请求内容、具体错误类型 | 检查会话与请求,不要重做设备资格排查 |
准备继续调试前,按顺序勾选:
- [ ] 记录运行程序的实际 Mac,而不只是你手边的客户端电脑。
- [ ] 在“关于本机”确认芯片与 macOS 版本,并对照 Apple 最新设备要求。
- [ ] 读取并记录
SystemLanguageModel.default.availability的完整结果。 - [ ] 如果状态是不可用,先按上表处理原因,再重新读取状态。
- [ ] 只有结果变为
available后,才检查会话创建、请求内容和报错详情。 - [ ] 如果使用远程 Mac,确认读取状态的程序确实运行在远端主机上。
这能避免一个常见误区:你在 Windows 上通过远程桌面连接 Mac,决定模型资格的是运行程序的那台 Mac,不是你作为客户端使用的电脑。远程主机也必须符合设备、系统及可用地区条件;换一台远程主机不是绕过限制的办法。Apple 将模型可用性与设备和地区支持关联,因此须以远端环境的实际状态为准。(Apple Developer:SystemLanguageModel 可用性说明)
SECTION 04 状态已可用后的请求排查
会话可以理解为一次或多次对话共用的上下文。读取到 available 后,再确认会话是否创建成功、前一个请求是否尚未结束,以及当前请求的输入是否符合预期。Apple 的文档说明,同一会话不能同时处理多个请求;并发调用或请求进行中修改记录,都可能触发会话相关错误。(Apple Developer:LanguageModelSession 文档)
接着查看报错类型,而不是只看界面上统一显示的“生成失败”。例如,错误定义可能指向上下文超限、请求超时、语言不受支持或安全规则拦截;这些都不等同于设备不可用。(Apple Developer:Foundation Models 错误类型)
还要检查任务是否适合该模型。Apple 的生成指南明确提醒,基础模型未必适合所有任务,并将“生成代码”列为不建议直接交给模型的例子。你若用它生成 SwiftUI 代码后得到不理想结果,应先调整课程任务或请求设计,不要据此认定 macOS 环境损坏。(Apple Developer:生成内容与执行任务指南)
如果学校电脑不能运行符合条件的 macOS,或旧 Mac 返回 deviceNotEligible,本地练习会受设备限制;通用云端编程环境也不能替代真实且合格的 Mac 环境。若要改用远程 Mac,先核对主机条件,再决定是否租用。你可以先看 VPSNIX 的 Mac 学习环境入口,需要比较按需使用方式时,再查看 VPSNIX 套餐信息;若已使用远端主机,也可通过 VPSNIX 帮助中心核对连接与使用问题。租用能让你在符合条件的远端 Mac 上练习,但不能改变设备资格、Apple Intelligence 设置或地区支持结果。