← Назад в технический блог

Как разработать AI-приложение для iOS 27: от Foundation Models к App Intents

AI-приложение iOS 27: от сессий Foundation Models к App Intents и Siri AI
Сначала цикл: сессия на устройстве, инструменты, затем App Intents для Siri AI.

На 14 сентября 2026 iOS 27 уже в осеннем окне. «iOS 27 AI App» — это не ещё одно облачное чат-окно. У Apple две официальные рельсы: Foundation Models, чтобы планировать, извлекать поля и вызывать tools внутри вашего процесса; App Intents, чтобы те же действия всплывали в Siri AI, Spotlight и Командах. Сначала замкните цикл, потом выбирайте модель — on-device, Private Cloud Compute и сторонние LLM делят один Swift session API, но ревью, тексты про приватность и доступность по региону — нет. Для СНГ и параллельного импорта это обычно вопрос Apple ID, языка и витрины, а не «стоит ли Pro».

Что на самом деле такое iOS 27 AI App

Многие команды до сих пор понимают «AI-фичу» как поле ввода, которое шлёт фразу в OpenAI или Gemini и вставляет ответ. На iOS 27 это по-прежнему собирается. Это уже не та форма, к которой Apple ведёт поставку. WWDC 2026 сказала прямо: системные модели, Siri AI и партнёрские модели входят в приложение через сессию Foundation Models; всё, что пользователь запускает с экрана блокировки, из Siri или с содержимого экрана, идёт через App Intents — не через оставшееся SiriKit-расширение.

Языком продукта: Foundation Models «разбирается» (естественный язык → типизированный черновик, вызовы tools, смена локальной и облачной модели). App Intents «делают дело» (создать задачу, открыть сущность, править запись, дать Siri сказать «третье»). Чат-UI — только одна обложка. Чат без Intents невидим для Siri. Intents без слоя сессии делают планирование в приложении и многоходовые правки хрупкими.

Этот текст — инженерный гайд сборки, не обзор фич для потребителя. Цены и граница бесплатно/платно — в Apple Intelligence: платно или бесплатно. Что Siri умеет на Mac — в Siri AI на Mac (macOS 27). Ниже путь от пустого таргета до цикла, который можно показать, прогнать тестами и сдать на ревью — даже если системная Siri AI на вашем аккаунте ещё не открыта.

Одной строкой: iOS 27 AI App = слой сессии (Foundation Models) + слой действий (App Intents). Чат-окно — лишь одна из оболочек.

До кода: Xcode 27, линейки устройств, регионы

Зафиксируйте тулчейн до первого import FoundationModels. SDK iOS 27 идёт с Xcode 27. Симулятор годится для каркаса сессии. Private Cloud Compute, реальные частоты tool-call и голосовые пути на железе часто расходятся. В релиз-нотах iOS 27 уже есть дыры PCC в Simulator и лишние вызовы tools, когда on-device tools смешивают с guided generation. Это не мелочь — закладывайте календарный буфер.

Не планируйте AI по принципу «устройства, на которые ставится iOS 27». iPhone 11 и новее получают ОС. Apple Intelligence и on-device Foundation Models по-прежнему начинаются с iPhone 15 Pro / iPhone 16. Более тяжёлый on-device стек (часто описывают как AFM 3 Core Advanced — выразительный голос Siri и более точная диктовка) в основном на iPhone 17 Pro / Air. На iPad ориентир — M1 для Apple Intelligence; новые on-device модели просят больше RAM. Пишите три строки, не одну ячейку «min iOS 27»:

СтупеньТипичное железоЧто можно обещать
Только ОС, без Apple IntelligenceiPhone 11–15 (не Pro)Не делать AI критическим путём; деградация или своё облако
Обычный Apple IntelligenceiPhone 15 Pro, линейка iPhone 16On-device сессии, базовый Siri AI, большинство App Intents
Полная on-device модельКласс iPhone 17 Pro / AirВыборочно тяжёлая речь и локальный инференс — никогда не обещать всем

Регион — второй шлюз, и он часто важнее чипа. Siri AI и часть системных функций режутся по Apple ID, языку системы и политике витрины: материковый Китай, ЕС, «серый» аппарат из ОАЭ с российским аккаунтом дают разный набор. Железо из США не гарантирует функцию, если аккаунт и регион активации её закрывают. Инженерно это просто: Intents пишите всегда — дверь остаётся. Бэкенд Foundation Models делайте сменным: для неопределённого региона по умолчанию проверенный партнёрский LanguageModel, on-device + PCC включайте, когда устройство, язык и аккаунт это реально отдают. Не снимайте превью App Store на US-аккаунте и не подписывайте его как «Siri AI у всех пользователей».

Не держите Xcode 27 на том же ноутбуке, что везёт стабильный App Store-поезд. Отделите «золотой» CI от машины с SDK 27. Та же идея изоляции — в Xcode beta vs изоляция боевых раннеров.

Foundation Models: один API, три точки запуска

Foundation Models появились в iOS 26. iOS 27 превращает их в единый нативный Swift API: on-device модели принимают картинку, сессия может целиться в серверные модели, можно вешать свои Skills. Краткий рассказ Apple — в посте Newsroom за июнь 2026. Решать нужно не «AI: вкл/выкл», а где крутится этот инференс.

ТочкаТипичный типДля чегоНе для чего
На устройствеSystemLanguageModelСаммари, переписывание, разбор форм, короткие планы, офлайн-черновикиОгромные документы, открытый веб-Q&A с живым retrieval
Облако AppleМодели Private Cloud ComputeБолее тяжёлое рассуждение без своих ключейДанные, которые обязаны жить в вашем VPC под вашим аудитом
Партнёр / своёLanguageModel + LanguageModelExecutorClaude, Gemini, MLX, Core AIГолые API-ключи в клиентском инициализаторе

Главное изменение iOS 27: смена модели не должна переписывать сессию. Провайдеры реализуют публичные протоколы (сессия WWDC26 Bring an LLM provider to the Foundation Models framework), отдают Swift Package и мапят записи Transcript в executor — prewarm, стриминг и KV cache. Приложение по-прежнему говорит с LanguageModelSession.

По деньгам появился рычаг: участники App Store Small Business Program с менее чем двумя миллионами первых загрузок могут гонять новое поколение Apple Foundation Models на Private Cloud Compute без счёта за cloud API (сверяйте актуальные условия). Это рампа для пробы, не бесконечный инференс. Свыше порога — или если нужен Claude/Gemini — платите провайдеру. Там, где PCC и системная Siri непредсказуемы по аккаунту, партнёрский executor чаще первый рабочий путь, а не запасной.

Правило большого пальца: on-device, пока хватает качества; с устройства уходите через PCC; сторонний executor — только когда PCC слабый или недоступен на этой витрине / аккаунте.

Шаг 1: LanguageModelSession и структурированный вывод

Сессия — позвоночник. См. LanguageModelSession: один объект держит Transcript; вылетите из окна — получите LanguageModelError.contextSizeExceeded. Не создавайте новую сессию на каждую отправку. И не копите бесконечно. Короткие сессии на планирование, свежая на commit — лучше одного «божественного» чата.

Минимальный полезный путь: типизированный черновик, не свободный текст
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 {
    """
    Ты планировщик внутри приложения задач.
    Выдавай только TaskDraft. Не выдумывай события календаря, которых пользователь не называл.
    """
}

let response = try await session.respond(
    generating: TaskDraft.self,
    to: Prompt("Сдать еженедельный отчёт до 15:00 завтра, высокий приоритет")
)
let draft = response.content

Продуктовый выигрыш — тип, не синтаксис. @Generable превращает «модель, которая болтает» в «модель, которая заполняет форму». SwiftData, App Intent или следующий круг планирования едят значение — не Markdown, который вы парсите заново. Релиз-ноты также предупреждают: @Generable на enum может липнуть предупреждением GenerationError. Сначала сверьтесь с нотами, потом дебажьте store.

Картинки — для чеков, SKU на полке и объектов на экране, не для всей фототеки. Когда окно забито, режьте старые tool-payloads, не текущую реплику пользователя.

Шаг 2: Tools, Skills, Dynamic Profiles

Структурированного вывода мало. Модель должна трогать ваш домен. Tool в Foundation Models — это не автоматически App Intent. Tools служат сессии; Intents — системе. Делите один Store. Не считайте, что «мы выкатили Intent, значит модель его видит».

iOS 27 добавляет Dynamic Profiles для многофазных агентов. Сессия WWDC26 Build agentic app experiences проводит craft-приложение через brainstorm / plan / review: та же сессия может менять модель, температуру и глубину рассуждения — PCC + глубже на планирование, on-device на ревью. Тело профиля пересчитывается на каждый prompt — I/O туда не кладите.

Та же сессия, модель и tools по фазе (эскиз)
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()])
        }
    }
}

Две ловушки по производительности. Переписывание истории transcript сбрасывает KV cache, задержка скачет — лучше append. On-device модели могут спамить tools, когда guided generation и tools вместе; ставьте потолок подряд идущих вызовов и стоп после повторяющихся ошибок. Foundation Models Instrument плюс 20–30 реальных формулировок пользователей — до того, как keynote-демо считать покрытием.

Skills — для тона, стоп-слов и отраслевого словаря, который ops правит без повторной сдачи. Это не второй бэкенд. Они живут внутри границы сессии и делят те же правила аудита, что Tools. Для RU-сборки часто нужен skill с деловым русским и отдельный, который не «переводит» устоявшиеся англоязычные имена продуктов.

Шаг 3: App Intents для Siri AI

App Intents — не «довесок к Командам». На iOS 27 это единственная поддерживаемая дверь из Siri в чужое приложение. SiriKit объявили deprecated на WWDC 2026 с окном примерно в два-три года. Живую SiriKit-поверхность мигрировать важнее, чем полировать тексты чата. Старт — AppIntent.

Используйте Intents этого поколения намеренно: системные схемы open/create/search вместо милых уникальных заголовков; экранное осознание, чтобы Siri разбирала «это» и «третье»; стриминг или долгие результаты; многоходовое дозаполнение параметров. Сущности индексируйте через IndexedEntity, если Spotlight должен их видеть. Visual Intelligence ищет через SemanticContentDescriptor и IntentValueQuery — не через забитую LanguageModelSession. Даже если Siri AI на аккаунте ещё нет, Команды, Spotlight и будущие системные маршруты остаются на тех же Intents: миграцию не откладывают «пока регион откроют».

Intent, который вызывают и Siri, и Команды
import AppIntents

struct CreateTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Создать задачу"
    static var description = IntentDescription("Сохранить задачу в приложении.")

    @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)")
    }
}

Отделяйте человеческий текст от машинного контракта: title / description — для Siri и галереи Команд; perform() должен быть идемпотентным и аудируемым. Разрушительные действия — только с явным подтверждением. Если параметр не резолвится, пусть система переспросит — модель не должна импровизировать диалог, который пишет данные.

Связать модель с Intent

Архитектура по умолчанию: модель готовит черновик, Intent коммитит.

  1. Пользователь говорит или печатает в приложении, либо Siri приходит с фразой на естественном языке.
  2. LanguageModelSession выдаёт @Generable-черновик, при необходимости сначала вызывая Tools, чтобы прочитать календарь, заметки или склад.
  3. UI показывает черновик. Пользователь подтверждает — или вы автоподтверждаете только низкорисковые формы.
  4. Собираете соответствующий AppIntent и вызываете perform(). Тот же Store обслуживает Команды и Spotlight.
  5. Результат пишете обратно в Transcript как вывод tool, чтобы следующая правка не была холодным стартом.
Коммит только после подтверждения — модель никогда не пишет store
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 и ваш стек отмены понимают Intents. Выдуманный срок дёшев, если UI может его остановить. Дорог, если Tool уже создал десять напоминаний.

Смену моделей держите на фабрике сессий. Региональные тумблеры — там же: сборка под поддерживаемый аккаунт может предпочитать on-device + PCC; сборка под неопределённый регион или материковый Китай — проверенный партнёрский executor по умолчанию. Intent в любом случае CreateTaskIntent — кто позже придёт через Siri, попадёт на ту же дорожку записи.

Тесты, приватность, чеклист App Review

AI-фичи чаще валятся на ревью и в поддержке, чем обычный CRUD. Пройдите таблицу, прежде чем снимать GA:

ПроверкаКакПровал = не GA
Нет Apple IntelligenceiPhone 15 не-Pro или AI выключенПустой критический путь или краш
PCC недоступенСимулятор, авиарежим, выход из аккаунтаБесконечный спиннер, нет запасного пути
Регион / языкCN Apple ID, ЕС-аккаунт, только русская системаТексты обещают системную Siri, которой нет
Галлюцинированные записиРазмытый промпт + подсадные срокиКалендарь или платежи без подтверждения
Остатки SiriKitСтарый путь ещё компилируется«Потом смигрируем» как план
СекретыПоиск sk- / ключей провайдера в IPAСторонние ключи в клиенте

Тексты про приватность должны совпадать с битами. On-device можно писать «остаётся на телефоне». PCC или партнёрская модель должны быть названы в Настройках. Документация провайдера хочет Keychain (часто и App Attest) — не ключ в инициализаторе сессии. В аналитику — схемы черновика и ID Intent, не полные transcript.

На ревью три артефакта: 30-секундная запись «сказал → черновик → подтвердил → строка в списке» в той же локали, что скриншоты; письменный путь деградации для железа без Intelligence; одностраничная таблица точек модели (on-device / PCC / партнёр). Маркетинг не должен убегать вперёд инженерных возможностей — рамка в полном обзоре Siri AI WWDC 2026. Особенно опасно обещать системную Siri AI на витрине, если вы снимали только на US-аккаунте или «сером» аппарате с другим регионом.

Если ноутбук каждого инженера одновременно ящик Xcode 27, матрица устройств и ночной eval-хост, оркестрация съест больше, чем токены. Всегда включённый узел Apple Silicon обычно дешевле флота новых ноутбуков.

Держать цикл iOS 27 AI на облачном Mac mini

Сессии Foundation Models, симулятор, прокси устройств и тулчейн Xcode 27 хотят RAM, SSD и машину, которая не засыпает. Mac mini на Nuvcloud — выделенный Apple Silicon bare metal: унифицированная память под компиляцию и локальные оценки, SSH, который не пропадает, и ящик, который можно взять на день под SDK iOS 27, вместо войны Slack и Figma на одной крышке.

Если LanguageModelSession и App Intents становятся ежедневной регрессией, смотрите тарифы и регионы Nuvcloud и держите сборщик онлайн — закройте крышку ноутбука, не закрывая сессию.

Читать дальше

Частые вопросы

Можно ли сдать iOS 27 AI App без Swift?

Поддерживаемый путь Foundation Models и App Intents — Swift. Flutter или React Native могут владеть UI, но сессия, Tools и Intents — в нативном модуле. Иначе Siri AI и on-device модели вас не увидят.

Чем Foundation Models отличается от прямого вызова ChatGPT API?

Foundation Models — системный session API: on-device, PCC или партнёр по протоколу, плюс Tools, guided generation и системные подсказки про приватность. Сырой вызов ChatGPT — ваш HTTPS. Гибко, но без on-device моделей и раздачи через Siri; ключи и риск ревью на вас.

App Intents сами становятся Tools модели?

Нет. Intents — для Siri, Команд и подсказок. Tools — для LanguageModelSession. Делите один Store; не ждите волшебного моста.

Работают ли системные Foundation Models в материковом Китае и на «серых» аккаунтах?

Зависит от устройства, языка системы и региона Apple ID. В материковом Китае системные Apple Intelligence / Siri AI могут быть недоступны. На параллельном импорте железо не гарантирует функцию, если аккаунт её режет. Считайте системные модели опцией и держите совместимый партнёрский LanguageModel, чтобы критический путь не пустел.

Обязателен ли Private Cloud Compute?

Нет. Короткие саммари, разбор форм и локальные черновики остаются on-device. На PCC переходите, когда качества не хватает и вы принимаете границу PCC Apple. Small Business Program при соответствии может снять cloud API-плату за PCC — перечитайте актуальные условия.

Как долго ещё живёт SiriKit?

Deprecated с WWDC 2026, обычно называют окно совместимости два-три года. Новые поверхности SiriKit не добавляйте. Миграцию кладите в поезд iOS 27, пока предупреждения не стали жёсткими ошибками.

Симулятора хватит для App Review?

Нет. PCC, часть поведения tools и голосовые пути на устройстве другие. Держите хотя бы один стандартный Intelligence-смартфон; топ-линейку семплируйте отдельно. Не представляйте всех пользователей записью с 17 Pro — и не сдавайте скрины, снятые только на US-аккаунте, как глобальную доступность.

Нужно ли покупать новые Mac под Xcode 27?

Не обязательно новые офисные ноутбуки. Нужен Apple Silicon, который стабильно гоняет SDK iOS 27 и не засыпает. Многие команды берут облачный Mac mini, чтобы отделить beta-сборки от боевого CI, вместо обновления каждого стола.

Акция →