Foundation Models 不可用怎么办?2026 排查指南
这篇指南面向接入 Apple Foundation Models 后遇到不可用状态或生成失败的 iOS、macOS 开发者。我们从 availability 分支排查到生成错误,再用对比表和验收清单说明如何设计降级体验,以及远程构建与真实设备测试的边界。
先读取 SystemLanguageModel 的 availability,再按不可用原因决定是提示设置、提供替代功能,还是允许稍后重试;生成阶段的资产错误还要单独捕获。本周先补齐状态记录和降级分支,再用目标设备验收;模拟器运行或构建通过,都不能代替目标设备上的模型运行测试。Apple 也建议先检查模型可用性,并为不可用状态准备回退体验。(Foundation Models 使用指南)
这篇指南适合正在为 iOS App 接入 Apple Foundation Models、却遇到模型不可用的独立开发者。
维护 macOS App、需要兼容不同系统版本和模型状态的开发者,也可以按相同的排查逻辑检查。
负责测试或发布验收、需要确认降级路径的小团队,可以直接使用文中的检查清单。
提醒: availability 表示读取时的状态,不是对下一次生成请求的成功保证。用户可能在检查后关闭 Apple Intelligence,模型资产也可能在生成阶段不可用;因此,状态判断与错误捕获必须分别存在。
01 第一步:先区分“模型不可用”和“生成失败”
排查前先记录系统版本、设备型号、设备与 Siri 语言、Apple Intelligence 设置、availability 的完整结果,以及触发操作。这样能把“AI 无法使用”拆成可复现的症状,避免把设置、设备资格、资产状态和 App 代码混成一个问题。
SystemLanguageModel.default.availability 的检查结果,可先按下表分流。状态名称来自 Apple API 文档;具体 API 是否可用以及错误类型如何处理,应结合 App 的目标系统版本复核。(availability 状态定义)
| 观察结果 | 更可能对应的分支 | 下一步动作 |
|---|---|---|
.available,但请求没有结果 |
生成调用、会话状态或输入处理问题 | 记录调用位置、错误类型与可复现输入,检查会话是否仍在响应 |
.unavailable(.deviceNotEligible) |
当前设备不具备模型使用资格 | 核对 Apple 当前支持信息,提供不依赖模型的功能路径 |
.unavailable(.appleIntelligenceNotEnabled) |
系统功能未启用 | 展示可选的设置提示;用户不启用时,保留核心功能 |
.unavailable(.modelNotReady) |
模型暂不可用或仍未准备好 | 允许稍后检查或重试,并提供替代路径 |
生成阶段报 assetsUnavailable |
请求开始后所需模型资产不可用 | 在调用处捕获错误,记录版本与错误类别,提示稍后重试或切换流程 |
排查时不要只保存 isAvailable 的布尔值。布尔结果可以快速控制界面,但具体的 availability 分支能告诉开发者为什么不可用;对于支持这些状态的部署目标,日志应保留实际原因,而不是统一记成“模型关闭”。(不可用原因枚举)
02 第二步:设备不符合条件时,不要把问题推给用户设置
deviceNotEligible 表示设备不支持 Apple Intelligence,不是提示用户去开启某个开关。应先对照 Apple 当前支持信息确认设备资格;支持范围可能随 Apple 的产品与系统说明更新,发布前应复核官方页面,而不要把某个团队手边设备的结果推断成全部用户的兼容结论。(Apple Intelligence 设备与系统要求)
另外,设备资格与 App 的最低部署版本是两项不同检查。前者回答“这台设备能否使用系统模型”,后者回答“这个 App 能否安装或运行在该系统版本”;调高部署目标不会让不符合条件的设备获得模型资格。
| 判断项 | 检查对象 | 不符合时的产品处理 |
|---|---|---|
| 设备资格 | 当前设备是否在 Apple Intelligence 支持范围内 | 关闭模型专属入口,保留不依赖生成式模型的流程 |
| App 部署目标 | App 使用的 API 是否适用于目标系统 | 用可用性判断隔离新 API,并提供兼容分支 |
| 用户系统设置 | Apple Intelligence 是否由用户启用 | 说明如何前往系统设置,由用户自行决定 |
| 模型资产状态 | 系统模型是否已准备好 | 提供稍后检查、重试或替代操作 |
替代功能要对应用户原本要完成的任务,而不是只显示“当前设备不支持 AI”。例如,若生成式功能用于改写文本,可保留手动编辑;若用于提取内容,可让用户继续查看原文或用既有筛选条件完成操作。Apple 的设计指南也建议在生成式功能不可用或用户不使用时,尽可能提供非 AI 回退。(生成式 AI 设计指南)
03 第三步:未启用或尚未就绪时,提示要可选择
若 availability 指向 Apple Intelligence 未启用,说明这是用户的系统设置状态,不应误判为设备不支持。App 可以解释开启后可能获得什么功能,并提供前往系统设置的指引;但不能声称 App 能替用户开启系统功能,也不应将启用设为使用核心功能的前提。
若状态是 modelNotReady,可让用户稍后重试,同时继续使用不依赖模型的功能。Apple 说明模型会自动下载,下载过程会受网络状态、电量和系统负载等因素影响;所以适合表达“模型尚未准备好,请稍后再试”,不适合承诺一个固定等待时间。(modelNotReady 说明)
实现上,重试应是明确的用户操作,或有上限的自动恢复流程。每次重试前重新读取 availability;若状态未改变,就返回可用的替代路径,而不是在界面后台无限循环请求。这样可以避免把暂时性状态变成耗电、无提示、无法退出的等待体验。
04 第四步:availability 可用,仍需处理生成阶段错误
当状态显示 .available,但 respond 一类生成调用仍失败时,检查范围应转到会话与请求本身。记录触发操作、输入类型、系统版本、调用时的状态和捕获到的错误类型;不要仅凭一次状态检查就断定框架故障,也不要把所有异常都映射成“模型不可用”。
assetsUnavailable 与 availability 阶段的 modelNotReady 不是同一个观察点:前者是生成调用期间所需资产不可用,后者是调用前检查到模型尚未就绪。新旧系统版本的错误 API 也可能不同。Apple 文档说明,在目标为 iOS 26 或 macOS 26 的应用中,相关新错误类型不可用时,需要使用可用性判断并兼容旧的 LanguageModelSession.GenerationError.assetsUnavailable 分支;发布前要按目标系统版本核对处理方式。(新资产错误说明) (旧生成错误说明)
还要检查 App 自己的会话调用逻辑。例如,同一个 LanguageModelSession 在上一请求仍运行时又收到第二个请求,可能触发并发请求错误;此时应控制调用节奏或检查 isResponding,而不是把它误判成设备资格问题。(会话请求与状态说明)
| 错误出现位置 | 应收集的证据 | 处理方向 |
|---|---|---|
| 创建会话或请求前 | availability 原因、设备与系统信息 | 先处理资格、设置或模型就绪分支 |
| 生成请求期间 | 错误类型、输入、是否已有请求运行 | 分别处理资产错误、并发请求或其他生成错误 |
| 生成请求完成后 | 输出是否符合产品预期、后续解析是否成功 | 区分模型输出问题与 App 的解码、展示代码问题 |
如果错误日志包含用户输入或生成内容,应先评估隐私影响,只保存排查所需的信息;通常错误类别、系统版本和不含个人内容的复现步骤,比完整保存提示词与回复更适合用于线上问题定位。
05 第五步:按目标系统和 Xcode 版本核对错误分支
仅用一份当前 SDK 编译成功,不能证明所有部署目标都走同一错误处理路径。Apple 的错误文档指出,旧错误类型已经弃用;使用 Xcode 26 构建的应用会继续捕获旧类型,而要捕获新的错误类型则需要使用 Xcode 27 重新构建后提交。因此,维护多个版本分支时,应同时核对编译 SDK、部署目标和运行设备系统,而不是只看工程设置中的一个版本号。(生成错误类型及 Xcode 迁移说明)
具体实现可以把错误处理收敛到一个适配层:新系统分支识别新错误类型,兼容分支识别旧类型,其余错误则进入通用诊断路径。对外界面不必暴露 API 名称,但研发日志应能区分是模型资产不可用、用户设置变化,还是会话代码错误。
06 第六步:把降级路径纳入发布验收
发布验收要测试的不只是“模型能生成一次”,还要验证不同状态下用户是否仍能完成主要任务。每种状态都应有对应的界面、可操作的下一步和记录方式;如果无法提供替代体验,也要明确说明受限功能,而不是让按钮无响应。
✅ 发布前可勾选清单
- [ ] 在支持且模型可用的目标设备上,验证功能入口、请求、结果展示和失败提示。
- [ ] 验证
deviceNotEligible时,模型专属操作退出,但核心非 AI 流程仍可使用。 - [ ] 验证 Apple Intelligence 未启用时,提示由用户自行选择是否前往系统设置。
- [ ] 验证
modelNotReady时,等待与重试可退出,替代操作不被遮挡。 - [ ] 模拟或捕获生成阶段
assetsUnavailable,确认错误提示、日志和恢复路径都有效。 - [ ] 验证连续点击或并发触发不会把会话错误显示成设备不支持。
- [ ] 按实际部署目标复核 Xcode SDK、API 可用性判断和旧错误兼容分支。
- [ ] 将模拟器与构建结果记为代码路径验证,不将其标注为目标设备模型运行验收。
远程 Mac 可以承担 Xcode 工程构建、依赖检查和代码分支复核,但这些工作只能证明相应的构建或代码路径结果,不能证明模型已在受支持 iPhone 上运行。设备上的模型行为,仍需由真实目标设备测试并保留可核验证据。若项目需要独立的远程 Mac 构建环境,可以先查看 JEXCLOUD 的远程 Mac 方案;这类环境适合补足 macOS 工具链,不应替代设备验收。
07 常见问题
deviceNotEligible 是不是 Apple Intelligence 没开启?
不是。先核对设备资格;设置提示只适用于对应的未启用状态。若设备确实不受支持,就提供不依赖模型的替代体验。
Apple Intelligence 已经开启,为什么模型还不可用?
开启状态不等于模型资产已就绪。重新读取 availability,区分 modelNotReady 与生成调用失败,再按对应分支处理。
模型尚未就绪,可以一直重试吗?
不建议无限重试。提供可退出的稍后重试,同时让用户继续使用替代流程;每次发起请求前重新检查状态。
生成运行时出现 assetsUnavailable,和 modelNotReady 有什么不同?
前者发生在生成阶段,后者是 availability 检查返回的未就绪原因。两者应分别记录、捕获,并按目标系统版本适配错误处理。
如果排查结果指向代码分支或构建环境,租用远程 Mac 可以补足本地缺少的 macOS 与 Xcode 工具链;它避免专门购置一台 Mac,也便于按需使用,但仍有网络访问、远程交互和环境管理成本,而且不能完成目标 iPhone 的模型运行验收。若你需要临时构建或复核代码路径,可以查看 JEXCLOUD 的 Mac 租用选项;若项目长期高频构建、必须接入本地物理设备,或需要真实 iPhone 持续测试,自购设备或本地 Mac 可能更合适。本文最后更新于 2026 年 11 月 1 日,排查结论核对自 Apple Foundation Models、availability 与错误类型文档及 Apple Intelligence 支持说明;Apple 文档或支持范围更新后,应重新复核目标系统版本对应的处理方式。
看到 deviceNotEligible,是系统设置没开吗?
不是。deviceNotEligible 表示当前设备不支持 Apple Intelligence;反复开关设置或重启不会把不符合条件的设备变成受支持设备。先核对 Apple 当前公布的设备支持信息,再让生成式功能退出为可选能力,例如保留手动编辑、搜索或模板流程。设备资格与 App 的最低部署版本是两个不同问题,不能用提高部署版本来解决硬件资格。
Apple Intelligence 已打开,availability 为什么还是不可用?
设置已开启并不代表模型资产已经就绪。读取 availability 的具体原因:若为 modelNotReady,系统模型可能仍在下载或暂时不可用;若生成调用才失败,则记录实际错误并检查调用阶段。可以向用户说明等待条件并提供非模型路径,但不要在 App 内代替用户修改系统设置,也不要循环请求直到成功。
modelNotReady 可以稍后再试吗?
可以把重试作为暂时性状态的恢复选项,但应由用户主动触发或采用有上限的退避策略,并在每次调用前重新检查状态。Apple 说明模型下载会受网络、电量和系统负载等因素影响,因此不能承诺等待固定时长后必定可用。若状态持续不变,保留替代操作,而不是让主界面一直等待模型。
运行时遇到 assetsUnavailable,应该重启模型会话吗?
先记录具体错误类型、系统版本和操作路径,再确认 Apple Intelligence 是否在应用运行期间被关闭、模型资产是否不可用。availability 检查只是调用前的判断,不能保证调用期间状态不变化;因此仍要在生成调用处捕获资产错误,并展示可恢复提示或非 AI 路径。仅重建会话不一定能修复缺失资产,也不应把它当成唯一恢复方案。
用真实远程 Mac,验证你的降级方案
JEXCLOUD 提供独享 M4 实体 Mac 节点,方便你在真实设备环境中复现不可用状态并验证备用流程。
通过 SSH 或加密 VNC 隧道远程管理设备,覆盖构建、运行与界面测试需求。
立即租用