← 返回技术博客

iOS 27 AI App 怎么开发?从 Foundation Models 到 App Intents 的实际开发流程

iOS 27 AI App 开发:Foundation Models 会话到 App Intents 与 Siri AI 闭环
先定闭环再选模型:设备端会话、工具调用,最后用 App Intents 交给 Siri AI。

截至 2026 年 9 月 14 日,iOS 27 已随秋季系统窗口落地。所谓「iOS 27 AI App」,不是再包一层云端聊天窗口,而是两条官方主线:用 Foundation Models 在 App 内生成、规划、调用工具;用 App Intents 把同一套能力交给 Siri AI、Spotlight 与快捷指令。先定闭环,再选模型——设备端、Private Cloud Compute、第三方 LLM 都走同一套 Swift API,但上架、隐私与地区可用性并不相同。

先对齐:iOS 27 AI App 到底在做什么

很多团队把「AI App」理解成:加一个输入框,把用户句子转发到 OpenAI / Gemini,再把回复贴回界面。这条路在 iOS 27 仍然能走,但已经不是苹果希望你交付的形态。WWDC 2026 的开发者叙事很明确:系统模型、Siri AI 与第三方模型,都应该通过 Foundation Models 的统一会话进入 App;用户在锁屏、Siri、屏幕内容上发起的动作,则必须经过 App Intents,而不是再维护一套 SiriKit。

用产品语言说:Foundation Models 负责「想清楚」——把自然语言变成结构化草稿、调用你的 Tool、在本地和云端模型之间切换。App Intents 负责「做出来」——创建任务、打开实体、改一笔记录,并让 Siri AI 能指着屏幕说「第三个」。两条线缺一不可。只做聊天,Siri 看不见你;只做 Intent、没有会话层,App 内的规划、摘要、多轮改稿会立刻变脆。

这也是本文和站内消费向文章的分界。功能清单、收费分层请看Apple Intelligence 免费与付费区别;Mac 上 Siri 能做什么见macOS 27 Siri AI 功能详解。下面只谈开发流程:从工程选型到一条可演示、可测试、可提审的闭环。

一句话:iOS 27 的 AI App = 会话层(Foundation Models)+ 动作层(App Intents)。聊天窗口只是其中一种皮肤。

开工前:Xcode 27、设备分层与地区

先把环境钉死,再写第一行 import FoundationModels。iOS 27 SDK 随 Xcode 27 发布;模拟器能跑通会话骨架,但 Private Cloud Compute、真机工具调用次数与语音相关能力,经常和真机 / 地区不一致。苹果在 iOS 27 发行说明里写过:模拟器上 PCC 可能不可用,设备端模型在「工具调用 + 引导生成」组合下也可能过度调 Tool。这些不是边角,而是你排期时必须留的缓冲。

设备不要按「能不能装 iOS 27」来规划 AI 功能。iPhone 11 及更新机能升级系统,但 Apple Intelligence / 设备端 Foundation Models 仍从 iPhone 15 Pro / iPhone 16 一代起算;更强的设备端模型(常见说法是 AFM 3 Core Advanced,影响表现力语音与高精度听写)主要落在 iPhone 17 Pro / Air 这一档。iPad 侧大致是 M1 起用 Apple Intelligence,更新的设备端模型要更高内存的 M 系列。开发决策应写成三张表,而不是一句「最低 iOS 27」:

档位典型设备开发上能承诺什么
系统能装,无 Apple IntelligenceiPhone 11–15(非 Pro)不要把 AI 当主路径;给降级文案或云端自建
标准 Apple IntelligenceiPhone 15 Pro、16 全系设备端会话、基础 Siri AI、多数 App Intents
满血设备端模型iPhone 17 Pro / Air 等可测高级语音与更重的本地推理,勿写成全量用户必达

地区是第二道闸。Siri AI 与部分系统级能力在中国大陆、欧盟等地仍可能受账号、语言、监管进度限制。大陆团队常见做法是:业务闭环用自己的模型或已合规的云服务,同时把 App Intents 与 Foundation Models 会话写成可开关模块,等系统能力开放再打开系统路由。不要在 App Store 截图里写「全程 Siri AI」,却只在美区账号下录过屏。

构建机方面,Xcode 27 与旧版稳定构建不建议挤在同一台日常笔记本上。beta / GM 并行时,把回归机和尝鲜机拆开,能少掉一半「昨天还能编、今天证书和模拟器抢路径」的事故。拆分思路可对照Xcode beta 与正式 Runner 分离。

Foundation Models:一条 API,三种落点

iOS 26 引入的 Foundation Models,在 iOS 27 被苹果扩成统一的原生 Swift API:设备端模型可吃图像输入,会话可指向服务器模型,也能挂自定义 Skills。官方新闻稿见 Apple Newsroom(2026-06)。对工程团队,真正要选的不是「要不要上 AI」,而是这一次推理落在哪。

落点典型类型适合做什么别用来做什么
设备端SystemLanguageModel摘要、改写、表单抽取、短规划、离线草稿超长文档、要联网检索的开放问答
苹果云端Private Cloud Compute 模型更重推理、需要服务器模型但不想自建密钥必须 100% 自有 VPC 审计的数据
第三方 / 自研实现 LanguageModel + LanguageModelExecutorClaude、Gemini、自建 MLX / Core AI把 API Key 写进客户端初始化器

iOS 27 的关键变化是:换模型不必换会话写法。苹果把第三方接入收成公开协议,WWDC26 session Bring an LLM provider to the Foundation Models framework 要求提供方用 Swift Package 分发,Executor 负责把 Transcript 翻成自己的消息格式,并处理 prewarm、流式输出与 KV cache。App 侧仍然是 LanguageModelSession。

成本上也有新杠杆:参加 App Store Small Business Program、累计首次下载低于 200 万的开发者,使用跑在 Private Cloud Compute 上的新一代 Apple Foundation Models 时,可以免云端 API 费用(以苹果当期条款为准)。这不是「无限免费推理」,而是把「试一把苹果服务器模型」的门槛压下来。超过门槛或要用 Claude / Gemini,就按提供商账单走。

选型口诀:能设备端解决的不要出网;出网优先 PCC;只有 PCC 不够或地区不可用时,再挂第三方协议实现。

第一步:LanguageModelSession 与结构化输出

会话对象是整条链路的起点。文档见 LanguageModelSession:一次会话维护一份 Transcript,超窗会抛 LanguageModelError.contextSizeExceeded。生产代码里不要每次按发送都 new 一个会话,也不要无限追加——规划阶段用短会话,执行阶段另开,比「一个上帝会话聊到底」稳得多。

最小可运行:结构化草稿,而不是自由文本
import FoundationModels

@Generable
struct TaskDraft {
    @Guide(description: "不超过 20 字的任务标题")
    var title: String
    @Guide(description: "ISO-8601 截止日期;用户没提就写 none")
    var dueISO8601: String
    var priority: Priority
}

@Generable
enum Priority {
    case low, normal, high
}

let session = LanguageModelSession {
    """
    你是待办 App 里的规划助手。
    只产出 TaskDraft。禁止编造用户没提到的日历事件。
    """
}

let response = try await session.respond(
    generating: TaskDraft.self,
    to: Prompt("明天下午三点前交周报,标高优先级")
)
let draft = response.content

这一步的产品意义大于语法意义:@Generable 把模型从「会聊天」变成「能填表」。后面无论是写进 SwiftData、丢给 App Intent,还是再喂给下一轮规划,你拿到的都是类型,而不是要再解析一遍的 Markdown。iOS 27 发行说明也提醒过:@Generable 用在 enum 上可能冒出压不掉的 GenerationError 警告——看到警告先对照发行说明,不要误判成业务逻辑坏了。

图像输入按官方能力用在「收据解析、货架识别、屏幕内物体」这类任务,而不是把相册整库塞进上下文。会话超窗时,优先截断工具回传和旧轮次,而不是截断当前用户那一句。

第二步:工具、Skills 与 Dynamic Profiles

有了结构化输出,下一步是让模型能动你的业务,而不是只吐 JSON。Foundation Models 的 Tool 协议和 App Intent 不是自动同一件事:Tool 给会话用,Intent 给系统用。可以让 Tool 内部调用同一套 Store,但不要假设「写了 Intent,模型就看得到」。

iOS 27 为多阶段 Agent 加了 Dynamic Profiles。WWDC26 session Build agentic app experiences 的示范很具体:同一条会话在「头脑风暴 / 规划 / 审阅」之间切换时,profile 可以换模型、温度和推理深度——例如规划走 PCC + 更深 reasoning,审阅退回设备端模型以控制延迟和费用。profile 体会在每次 prompt 时重算,所以不要在 body 里做重 I/O。

同一会话,按阶段换模型与工具(示意)
enum PlanPhase { case brainstorm, plan, review }

func makeProfile(_ phase: PlanPhase) -> LanguageModelSession.DynamicProfile {
    LanguageModelSession.DynamicProfile {
        switch phase {
        case .brainstorm, .plan:
            return .init(model: .privateCloudCompute, tools: [SearchNotesTool(), ListCalendarTool()])
        case .review:
            return .init(model: SystemLanguageModel.default, tools: [ValidateDraftTool()])
        }
    }
}

性能上有两条容易踩的坑。第一,改写历史会打爆 KV cache,延迟立刻上去;能 append 就不要重写 Transcript。第二,设备端模型在「工具 + 引导生成」组合下可能连打 Tool,要用次数上限和「同一 Tool 连续失败就停」兜底。苹果提供了 Foundation Models Instrument 和评测框架,上线前至少用 20–30 条真实用户说法做回归,而不是只录一条发布会同款 demo。

Skills(自定义技能)适合把「公司内部口径、禁用词、领域词典」从 prompt 字符串里拆出去,便于运营改、便于按地区开关。不要把 Skills 当成第二个后端:它仍然跑在会话边界内,权限与日志要和 Tool 同一套审计。

第三步:App Intents 交给 Siri AI

App Intents 不是「 Shortcuts 小功能」,而是 iOS 27 里Siri 进入第三方 App 的唯一正门。苹果在 WWDC 2026 把 SiriKit 标成弃用,并给了大约两到三年的兼容窗口。还在用旧 Intent Extension 的团队,迁移优先级应高于「再调一调聊天文案」。协议与参数解析见 AppIntent。

iOS 27 这一代 Intents 要刻意用上的能力包括:系统 schema(打开、创建、搜索等常见动作尽量对齐,而不是全自创标题)、屏幕感知(让 Siri 能解析「这个」「第三个」)、流式 / 长任务结果,以及多轮补参。实体要能被 Spotlight 索引时,再考虑 IndexedEntity 与屏幕标注;视觉智能搜图则走 SemanticContentDescriptor + IntentValueQuery,不要硬塞进 LanguageModelSession。

一条可被 Siri / 快捷指令调用的创建任务 Intent
import AppIntents

struct CreateTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "创建任务"
    static var description = IntentDescription("把一件待办写入 App。")

    @Parameter(title: "标题")
    var title: String

    @Parameter(title: "优先级")
    var priority: String?

    func perform() async throws -> some IntentResult & ProvidesDialog {
        try await TaskStore.shared.create(title: title, priority: priority ?? "normal")
        return .result(dialog: "已创建:\(title)")
    }
}

写 Intent 时把「人话」和「机器契约」分开:title / description 给 Siri 和快捷指令画廊看;perform() 只做幂等、可审计的写入。需要用户确认的破坏性动作,显式要确认,不要让模型会话直接静默调用。参数解析失败时,让系统再问一句,比你在 dialog 里塞一段模型自由发挥更安全。

把模型接到 Intent:一条可上架闭环

到这里可以把两条线接起来。推荐的默认架构是模型只产草稿,Intent 才提交:

  1. 用户在 App 内说话 / 打字,或从 Siri 带一句自然语言进来。
  2. LanguageModelSession 产出 @Generable 草稿,必要时先走 Tool 读日历、笔记、库存。
  3. UI 展示草稿,用户点确认——或对低风险动作设自动确认阈值。
  4. 构造对应 AppIntent 并 perform(),同一套 Store 也服务快捷指令与 Spotlight。
  5. 把执行结果写回 Transcript(工具输出),供下一轮改稿,而不是另起炉灶。
草稿确认后再走 Intent,避免模型直接写库
func commit(_ draft: TaskDraft) async throws {
    var intent = CreateTaskIntent()
    intent.title = draft.title
    intent.priority = String(describing: draft.priority)
    _ = try await intent.perform()
}

为什么不让 Tool 直接写库?因为 App Review、快捷指令画廊、Siri 建议和你自己的撤销栈,都更认 Intent 这条路径。模型幻觉写错截止日期时,你还可以在 UI 拦一层;如果 Tool 已经静默插入十条提醒,客服成本会高一个数量级。

跨模型切换放在 profile / session 工厂里,不要散落在 View。地区开关也放这里:大陆包可以默认走你已合规的第三方 LanguageModel,美区 / 日韩包优先设备端 + PCC。同一套 Intent 保持不变,用户从 Siri 进来时仍然打到 CreateTaskIntent。

测试、隐私与上架清单

AI 功能比普通 CRUD 更容易在审核和客服处翻车。发布前至少过一遍下面这张表:

检查项怎么验不通过就不要当 GA
无 Intelligence 设备iPhone 15 非 Pro 或关闭 AI 的模拟档主路径空白 / 崩溃
PCC 不可用模拟器、飞行模式、未登录无限转圈,无降级
地区 / 语言大陆 Apple ID、欧盟账号、仅中文系统文案承诺了系统 Siri 却不可用
幻觉写入模糊指令 + 诱导编造截止日期未确认就写入日历 / 付款
Intent 迁移旧 SiriKit 路径仍能编过只靠警告「以后再说」
密钥包内搜索 sk- / Gemini key第三方模型 Key 打进 IPA

隐私话术要和实现一致。设备端推理可以强调「默认不出网」;一旦走 PCC 或第三方,设置页必须写清。第三方提供方文档要求凭证进钥匙串,并考虑 App Attest,不要在 Session 初始化里塞裸 Key。日志只留草稿 schema 与 Intent 标识,不要把完整 Transcript 默认上传到自己的分析后台。

审核材料准备三样:一段 30 秒的「说话 → 草稿 → 确认 → 列表出现」屏幕录制(系统语言与截图地区一致);一份「无 AI 设备上的降级说明」;一张模型落点表(设备端 / PCC / 第三方)。消费者侧的 Siri 能力边界,可再对照WWDC 2026 Siri AI 解读,避免市场部文案跑到工程能力前面。

团队若还在用个人 Mac 跑 Xcode 27、真机矩阵和夜间回归,编排成本会很快超过模型本身。把稳定构建和 Agent 评测放到一台常开的 Apple Silicon 上,比每人升级一台满血笔记本更可控。

在云端 Mac mini 上把 iOS 27 AI 闭环跑稳

Foundation Models 的会话、模拟器、真机代理和 Xcode 27 工具链都吃内存与磁盘,还要求机器别休眠。Nuvcloud 云端 Mac mini 是独享 Apple Silicon 裸金属:统一内存适合并行编译与本地评测,SSH 常在,可按天开一台专门跑 iOS 27 SDK,而不必和设计稿、会议软件抢同一台办公本。

若你正在把 LanguageModelSession 和 App Intents 接成日更回归,先看 Nuvcloud 套餐与节点,让构建机和评测机 24/7 在线,把「笔记本合盖会话就断」从关键路径上拿掉。

延伸阅读

常见问题

不会 Swift 能做 iOS 27 AI App 吗?

系统级 Foundation Models 与 App Intents 的主路径是 Swift。跨平台壳可以继续用 Flutter / RN 做 UI,但会话、Tool 和 Intent 建议放在原生模块。否则 Siri AI 与设备端模型基本接不上。

Foundation Models 和直接调 ChatGPT API 有何区别?

前者是系统会话 API:可走设备端、PCC 或按协议接入的第三方,并和 Tool / 结构化输出、系统隐私提示对齐。后者是你自己的网络请求,灵活但拿不到设备端模型和系统级 Siri 分发,密钥与审核也要自己扛。

App Intents 会自动变成模型 Tool 吗?

不会。Intent 面向 Siri、快捷指令和系统建议;Tool 面向 LanguageModelSession。应让两边调用同一 Store,而不是指望框架自动桥接。

中国大陆现在能用系统 Foundation Models 吗?

以设备、系统语言和 Apple ID 地区为准,大陆 iPhone 上系统 Apple Intelligence / Siri AI 仍可能不可用。工程上应把系统模型做成可开关,并准备已合规的第三方 LanguageModel 实现,避免主路径空白。

必须上 Private Cloud Compute 吗?

不是。短摘要、表单抽取、本地草稿优先设备端。只有设备端质量不够、且你接受苹果 PCC 边界时再升级。小企业计划在符合条件时可能免除 PCC 的云 API 费用,仍须核对当期条款。

SiriKit 还能用多久?

WWDC 2026 已弃用,业界普遍按两到三年兼容窗口规划。新功能不要再加 SiriKit;存量路径应排进 iOS 27 迭代,而不是等编译警告变成硬错误。

模拟器测过就能提审吗?

不能当唯一证据。PCC、部分工具调用和语音相关能力在模拟器上与真机不一致。至少准备一档标准 Intelligence 真机,满血能力另做抽样,不要用最高配录屏代表全部用户。

Xcode 27 一定要买新 Mac 吗?

不一定买新办公本。需要的是一台能稳定跑 iOS 27 SDK、不休眠的 Apple Silicon。很多团队用云端 Mac mini 把 beta 构建和正式 CI 分开,比全员换机更便宜。

限时优惠 →