← 모든 글

App Intents는 여러분의 앱으로 향하는 Apple의 새로운 API입니다

2026년 2월 8일 아침, 저는 부엌 싱크대에서 손을 적신 채로 Apple Watch에서 Siri에게 물 8 oz를 기록해 달라고 요청했습니다. 물이 기록되었습니다. 시계 다이얼로그에는 32 oz가 남았다고 표시되었습니다. 저는 화면을 한 번도 만지지 않았습니다.1

11주 전, 저는 수분 섭취 추적 iOS 앱인 Water에 Swift 파일 하나를 추가했습니다. LogWaterIntent.swift라는 80줄짜리 AppIntent와 세 가지 Siri 문구 변형을 선언하는 AppShortcutsProvider로 구성된 파일입니다. 이 파일은 이제 제가 보유한 가장 뜨거운 API 표면이 되었습니다.2

여기서 제가 한참 걸려서야 체감한 부분이 있습니다. App Intents는 Siri 기능이 아닙니다. App Intents는 서드파티 앱이 Apple Intelligence와 맺는 계약입니다. Apple Intelligence는 Apple이 iOS 18에서 출시하기 시작해 iOS 26까지 계속 구축해 온 시스템 AI 표면입니다.3 iOS 앱을 출시하면서도 App Intents를 여전히 “있으면 좋은” 음성 기능으로 취급하고 있다면, Apple이 무엇을 만들었는지 잘못 읽고 있는 것입니다. App Intents는 Apple의 AI가 사용자를 대신해 여러분의 앱처럼 행동할 수 있도록 해 주는 API입니다. 그 외 모든 것(Siri, Spotlight, Shortcuts, Apple Intelligence 요약, Watch와 Vision Pro 표면)은 그 계약의 하류에 있습니다. iOS 26에서 출시된 온디바이스 LLM인 Foundation Models는 인앱 도구 호출을 위한 별도의 Tool 프로토콜을 노출합니다. 이는 App Intents를 거치지 않고 병렬로 동작합니다.

TL;DR

  • App Intents는 여러분의 앱이 할 수 있는 일을 Apple의 AI가 직접 호출할 수 있는 타입 안전하고 구조화된 방식으로 선언합니다. 서드파티 앱을 위한 Apple의 도구 사용 API입니다.
  • 실제 프로덕션 예시 하나: Water의 LogWaterIntent. 80줄, 완전한 SwiftData 쓰기, HealthKit 동기화, 로케일 인식 단위 변환, 구조화된 Siri 다이얼로그 응답까지 포함합니다.
  • iOS 26은 Apple의 온디바이스 LLM인 Foundation Models를 추가했습니다. Foundation Models는 인앱 도구 사용을 위한 자체 Tool 프로토콜을 노출합니다. App Intents는 Siri / Spotlight / Apple Intelligence가 앱들 사이에서 호출하는 정식 표면으로 남아 있습니다. 같은 방향, 두 개의 병렬 계약입니다.
  • 2026년에 App Intents가 없는 앱은 Apple Intelligence에게 보이지 않습니다. AI 패브릭은 여러분이 선언한 인텐트를 통해 라우팅되거나, 아니면 여러분의 앱을 우회해 경쟁자에게 라우팅됩니다.
  • Apple은 우리에게 이 사실을 3년째 말해 왔습니다. (App Intents, App Shortcuts, Apple Intelligence라는) 이름 짓기는 의도적입니다. 매 WWDC마다 계약은 스택을 한 단계 위로 올라갑니다.

Apple App Intents framework hero illustration from developer.apple.com

developer.apple.com의 Apple Developer 문서에서 가져온 App Intents 프레임워크 참조 이미지.5

App Intent란 실제로 무엇인가

2026년 2월 8일 커밋 e398c58에서 출시된 그대로의 LogWaterIntent 전체 소스입니다.2

import AppIntents
import SwiftData

struct LogWaterIntent: AppIntent {
    static var title: LocalizedStringResource = "Log Water"
    static var description: IntentDescription = "Log a glass of water to your daily intake"

    @Parameter(title: "Amount", default: 8)
    var amount: Int

    static var parameterSummary: some ParameterSummary {
        Summary("Log \(\.$amount) oz of water")
    }

    func perform() async throws -> some IntentResult & ProvidesDialog {
        let container = try ModelContainer(for: WaterEntry.self, DailyLog.self, UserSettings.self)
        let context = ModelContext(container)

        let settingsDescriptor = FetchDescriptor<UserSettings>(
            predicate: #Predicate { $0.id == "user-settings" }
        )
        let settings = try context.fetch(settingsDescriptor).first ?? UserSettings()

        let amountMl: Double
        if settings.unitSystem == .imperial {
            amountMl = Double(amount) * 29.5735
        } else {
            amountMl = Double(amount)
        }

        let todayKey = DailyLog.todayKey()
        let logDescriptor = FetchDescriptor<DailyLog>(
            predicate: #Predicate { $0.dateKey == todayKey }
        )
        let log: DailyLog
        if let existing = try context.fetch(logDescriptor).first {
            log = existing
        } else {
            log = DailyLog(date: .now, goalAmount: settings.dailyGoal)
            context.insert(log)
        }

        let entry = WaterEntry(amount: amountMl)
        log.entries.append(entry)
        try context.save()

        if settings.healthKitEnabled {
            try? await HealthKitService.shared.logWater(amount: amountMl, date: entry.timestamp)
        }

        let unit = settings.unitSystem == .imperial ? "oz" : "mL"
        let totalDisplay = settings.formatAmount(log.totalAmount)
        return .result(dialog: "Logged \(amount) \(unit). Today's total: \(totalDisplay)")
    }
}

struct WaterShortcuts: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: LogWaterIntent(),
            phrases: [
                "Log water in \(.applicationName)",
                "Add water in \(.applicationName)",
                "Drink water in \(.applicationName)",
            ],
            shortTitle: "Log Water",
            systemImageName: "drop.fill"
        )
    }
}

(Water의 현재 프로덕션 버전은 이 파일에서 다이얼로그를 더 다듬어 목표 달성/잔여량 조건문을 추가했습니다. 위의 2월 8일 출시 코드가 제가 부엌 싱크대에서 테스트했던 그 코드입니다.)

대부분의 “App Intents 튜토리얼”이 대충 넘어가지만 짚고 넘어갈 가치가 있는 세 가지가 있습니다.

@Parameter가 곧 스키마입니다. Apple의 AI는 기본값이 8인 amount: Int를 봅니다. Siri가 “log 12 oz of water”를 파싱하면 LogWaterIntent(amount: 12)를 생성하고 perform()을 호출합니다. 제 쪽에서 문자열 파싱을 할 필요가 없습니다. 타입 시스템이 곧 스키마입니다.5

parameterSummary는 매개변수의 자연어 반영입니다. Apple은 이를 Shortcuts UI, 다이얼로그, 그리고 점점 더 많은 Apple Intelligence 확인 패널에서 액션을 렌더링하는 데 사용합니다. 이 요약은 사용자에게 소리 내어 읽힙니다. 잘못 작성하면 사용자가 어색한 문장을 듣게 되고, 잘 작성하면 표면이 네이티브하게 느껴집니다.6

perform()IntentResult & ProvidesDialog를 반환합니다. 이것이 구조화된 반환입니다. AI 표면은 단순한 성공/실패가 아니라 사용자가 듣게 될 다이얼로그 문자열까지 받아옵니다. Apple은 결과가 Siri, Spotlight, Watch, 그리고 (iOS 26에서는) Apple Intelligence의 응답 체인으로 합성될 수 있도록 ProvidesDialog, ProvidesView, ReturnsValue를 점점 더 기대하고 있습니다.7

맨 아래의 AppShortcutsProvider 블록이 Siri 문구를 등록하는 부분입니다. \(.applicationName) 토큰은 Siri가 자동으로 “Water”를 삽입하는 자리입니다. 같은 인텐트에 대해 세 가지 문구 변형을 두면 Apple의 자연어 파서가 여러분이 문구 사전을 유지하지 않고도 사용자 표현에 매칭할 여지를 더 많이 갖게 됩니다. systemImageName은 실제 SF Symbols 이름입니다. Spotlight, Shortcuts, Apple Intelligence가 액션 아이콘을 렌더링하는 방식이 바로 이것입니다.

Apple Intelligence Siri marketing image showing on-device AI features

Apple Intelligence는 사용자 요청을 App Intents를 통해 라우팅하여 온디바이스 AI 기능을 제공합니다. 출처: apple.com/apple-intelligence.

SwiftUI 이후 가장 중요한 iOS API인 이유

iOS API은 두 가지 형태로 존재합니다. 일부는 여러분의 앱이 자기 자신을 어떻게 그리는지에 관한 것이고(UIKit, SwiftUI, Metal), 일부는 여러분의 앱이 시스템과 어떻게 통합되는지에 관한 것입니다(URL 스킴, Universal Links, 위젯). App Intents는 세 번째 형태입니다. 이는 Apple의 AI가 여러분의 앱을 어떻게 사용하는지에 관한 것입니다.

진행 과정을 따라가 볼 가치가 있습니다.

  • iOS 10 (2016)은 SiriKit Intents(INIntent)를 도입했습니다. 서드파티 앱이 음성으로 호출될 수 있게 된 첫 사례입니다. 표면은 좁았습니다. 엄격한 스키마를 가진 고정된 도메인 목록(메시징, 결제, 차량 호출)뿐이었습니다.8
  • iOS 12 (2018)는 Siri Shortcuts로 표면을 넓혔습니다. 어떤 앱이든 NSUserActivityINIntent를 기증하고 Siri가 제안해 주기를 기대할 수 있게 되었습니다.
  • iOS 13 (2019)은 인앱 인텐트 처리를 추가하여 앱이 시스템 Siri UI로 백그라운드 전환되지 않고도 단축어 호출에 응답할 수 있게 했습니다.
  • iOS 16 (2022)은 App Intents 프레임워크를 도입했습니다. @ParameterAppShortcutsProvider를 갖춘 타입 안전하고 선언적인 형태입니다. INIntent 선행자는 신규 개발에서 사실상 대체되었습니다.9
  • iOS 18 (2024)은 Apple Intelligence를 도입하고 가능한 곳마다 Siri 요청을 App Intents를 통해 라우팅하기 시작했습니다. Apple Intelligence의 “개인 컨텍스트” 기능은 App Entities(App Intents의 데이터 버전)에서 읽어옵니다.10
  • iOS 26 (2025)은 Apple의 온디바이스 LLM인 Foundation Models 프레임워크를 도입했습니다. Foundation Models는 인앱 도구 호출을 위한 별도의 Tool 프로토콜을 노출합니다. App Intents는 Apple Intelligence를 위한 정식 앱 간 표면으로 남아 있고, Tool은 직접적인 LLM 호출을 위한 인앱 표면입니다. 두 계약은 병렬로 동작합니다.4

이 계약은 매 릴리스마다 스택의 위로 확장되어 왔습니다. 원래 App Intent의 소비자는 Shortcuts를 탭하는 사람이었습니다. 그다음은 Siri 음성. 그다음은 Spotlight. 그다음은 Apple Intelligence 요약. 이제 Apple Intelligence의 LLM 기반 시스템 표면들이 사용자 요청에 따라 행동하기 위해 이를 사용합니다. 2026년에 출시한 App Intent 표면은 iOS 27, 28, 29에서 Apple Intelligence가 호출하게 될 그 표면입니다.

위의 패턴이 제가 App Intents는 Siri 기능이 아니라고 말할 때 의미하는 바입니다. 이는 Apple AI 패브릭 전체를 위한 구조화된 도구 사용 API입니다. SwiftUI가 가장 중요한 UI API이 된 이유는 visionOS, watchOS 10+, iOS 17+ 앱을 작성하는 유일한 방법이 되었기 때문입니다. App Intents는 AI 측에서 같은 궤적을 따라가고 있습니다. Apple이 모든 베팅을 거는 표면입니다.

Foundation Models가 출시된 지금 무엇이 달라지는가

Foundation Models는 Apple Intelligence를 사용할 수 있는 모든 기기에 탑재되는 프레임워크입니다. 하드웨어 제한선은 Apple Intelligence 목록과 동일합니다. iPhone 15 Pro와 15 Pro Max(A17 Pro), iPhone 16 라인업, iPhone 17 라인업, iPhone Air, iPhone 17e, M1 이상의 iPad Pro, M1 이상의 iPad Air, A17 Pro의 iPad mini, M2 이상의 Vision Pro, M1 이상의 Mac입니다. 두드러지게 빠진 것은 기본 iPhone 15 / 15 Plus입니다.412

이것이 의미하는 바는 이렇습니다. Apple의 시스템 표면(Siri, Spotlight, Apple Intelligence)이 여러분의 앱을 호출한다면, 그것은 App Intents와 App Entities를 통해서입니다. 시스템 AI 패브릭에 서드파티 앱을 위한 setSystemPrompt(...) API은 없습니다. 인텐트 레지스트리가 있을 뿐입니다. Foundation Models는 자체 온디바이스 LLM 기능을 원하는 개발자를 위해 인앱에서 병렬로 동작하는 Tool 표면을 추가합니다. 앱 간 계약(Apple Intelligence와 Siri가 여러분의 앱을 찾기 위해 사용하는 계약)은 App Intents를 통해 흐릅니다.

앱 개발자에게 미치는 구체적인 영향이 세 가지 있습니다.

관련 App Intent가 없는 앱은 해당 카테고리의 Siri 음성 명령으로부터 도달할 수 없습니다. Apple Intelligence는 “Hey Siri, 물 마신 거 기록해 줘” 같은 문구를 매칭되는 인텐트를 먼저 선언한 앱으로 라우팅합니다. 저는 2026년 2월에 Water의 인텐트를 출시했습니다. 프레임워크 방향에 대한 제 해석은 이렇습니다. 2027년에 인텐트를 출시하는 수분 추적 앱은 라우팅 가중치가 이미 선발 주자에게 누적된 시장에 진입하게 될 것입니다. 같은 논리가 쇼핑 목록, 운동 기록, 캘린더 입력, 사진 검색에도 적용됩니다. 인텐트 선언의 선발 주자 우위는 Apple의 다른 플랫폼 베팅 API들(HealthKit 카테고리, Spotlight 풍부한 결과, Live Activities 토큰)에서 그랬듯이 누적될 것으로 예상합니다.

Apple Intelligence 개인화는 인텐트뿐만 아니라 App Entities에서도 읽어옵니다. AppEntity는 “이 앱에는 이런 형태의 데이터가 있다”고 선언합니다. 사용자가 “내가 독서 목록에 마지막으로 추가한 책이 뭐였지”라고 물으면, Apple Intelligence는 설치된 모든 앱에서 Book과 매칭되는 모든 AppEntity를 검색합니다. 여러분의 앱에 독서 목록이 있는데 BookEntity가 선언되어 있지 않다면, 여러분의 데이터는 Apple의 AI 표면에 보이지 않습니다. Apple Intelligence는 여러분의 데이터를 검색하거나 참조할 수 없습니다.11

IntentResult & ProvidesDialog 반환 형태가 점점 더 중요해지고 있습니다. Apple Intelligence는 Siri, Spotlight, Watch에 걸쳐 더 긴 응답으로 인텐트 결과를 합성하고 있습니다. 구조화된 다이얼로그 없이 단지 성공만 반환하는 perform()은 시스템이 일관된 응답으로 합성하기 어렵습니다. ProvidesDialogProvidesView는 선택적 예의가 아닙니다. 여러분의 액션이 사용자의 AI 표면에서 인용이 되는 방법입니다.

다시 만든다면 다르게 했을 것들

11주 동안의 Water 프로덕션 로그를 보니 더 일찍 했어야 할 세 가지가 보입니다.

필요하다고 생각하는 것보다 더 많은 인텐트를 출시하세요. 저는 하나를 출시했습니다. 네 개를 출시했어야 했습니다. LogWaterIntent, CheckTodaysProgressIntent, AdjustGoalIntent, ShowHistoryIntent. 각각은 사용자가 실제로 시도하는 Siri 문구에 매핑됩니다(“오늘 물을 얼마나 마셨지”는 제 앱 데이터가 아니라 Apple의 일반 AI로 라우팅됩니다). 누락된 인텐트 하나하나는 Apple Intelligence가 저를 우회해 라우팅하는 쿼리입니다.

다이얼로그 문자열은 이메일 본문이 아닙니다. 처음부터 ProvidesDialog를 가지고 있었지만, 초기 다이얼로그는 산문이었습니다. CarPlay나 AirPods를 통해 듣는 사용자에게는 짧고 구체적이며 사실 중심의 구조가 필요합니다. “8 oz 기록됨. 32 oz 남음.” Watch 표면은 특히 공격적으로 잘라냅니다. 대화체 다이얼로그는 사실 중심 다이얼로그보다 더 나쁜 사용자 경험입니다. 4주차에 다시 작성했습니다.2

App Entities는 제가 생각한 것보다 더 중요합니다. 저는 WaterEntry SwiftData 모델을 가지고 있습니다. WaterEntryEntity: AppEntity와 그 동반자인 WaterEntryQuery: EntityQuery도 함께 선언해서 Apple Intelligence가 “어제 내가 물 마신 시간을 보여줘”에 답할 수 있게 해야 합니다. 최소 브리징 코드입니다.11

struct WaterEntryEntity: AppEntity {
    static var typeDisplayRepresentation: TypeDisplayRepresentation = "Water Entry"
    static var defaultQuery = WaterEntryQuery()
    var id: UUID
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "\(amount) oz at \(timestamp.formatted())")
    }
    @Property(title: "Amount") var amount: Int
    @Property(title: "Timestamp") var timestamp: Date
}

struct WaterEntryQuery: EntityQuery {
    func entities(for identifiers: [UUID]) async throws -> [WaterEntryEntity] {
        // Fetch matching entries from SwiftData
    }
    func suggestedEntities() async throws -> [WaterEntryEntity] {
        // Recent entries Apple Intelligence can suggest
    }
}

작은 Swift 타입 두 개와 SwiftData 페치 글루입니다. Spotlight에서 항목들을 개별적으로 표면화 가능하게 하려면(사용자가 “물”을 검색했을 때 올바른 항목으로 도달하도록) 엔티티가 IndexedEntity를 준수하게 하고 쓰기 시점에 인덱스 업데이트를 기증해야 합니다. 그것이 Apple의 Spotlight 파이프라인이 단순한 AppEntity 노출 너머로 기대하는 바입니다.

같은 형태가 제 다른 앱에도 적용됩니다. 제 쇼핑 목록 앱인 Get Bananas는 이미 @Attribute(.unique) var id: UUID, name, amount, section, isChecked와 iCloud Drive 동기화를 위한 lastModified 필드를 갖춘 SwiftData @Model ShoppingItem을 가지고 있습니다.13 이를 ShoppingItemEntity: AppEntity로 감싸고 인텐트 몇 개(AddShoppingItem, CheckOffItem, ShowList)를 출시하면, Get Bananas가 이미 .mcpb MCP 서버를 통해 Claude Desktop에 노출하는 것과 동일한 영속성 계층을 Apple Intelligence에도 노출할 수 있습니다.14 두 개의 LLM 생태계, 두 개의 다른 계약, 같은 쇼핑 목록입니다. 이것이 단일 출시 앱으로 본 병렬 계약 명제입니다. SwiftData 모델은 데이터, App Intents는 Apple의 계약, MCP은 Anthropic의 계약, 두 표면 모두 동일한 진실 원천 위에서 동작합니다.

App Intent를 출시하지 않을 때

거부도 설계의 일부입니다.

여러분의 앱이 순전히 소비 중심이고(사용자의 사진 읽기, 뉴스 표시, 오디오 재생) 변경 가능한 사용자 상태가 없다면, App Intents는 노출할 것이 없을 수 있습니다. Apple의 프레임워크는 OpenIntent(앱을 컨텍스트로 열기만 하는)를 지원하지만, 유일하게 유용한 액션이 “앱 열기”라면 인텐트는 오버헤드입니다. 단지 가지고 있기 위해 출시하지는 마세요.

액션이 추상화하기 어려운 UI 어포던스에 의존한다면(복잡한 다단계 캔버스 도구, 3D 편집 앱) 인텐트의 필수 parameterSummary는 아무도 실제로 말하지 않는 모호한 유사 자연어로 전락합니다. “내 사진을 강도 7의 흐림 도구로 편집해 줘”라는 Siri 문구는 기술적으로 가능하지만 어떤 인간도 이렇게 말하지 않을 것입니다. 인텐트의 표면은 보상이 없는 세금이 됩니다.

올바른 규칙은 이렇습니다. App Intent는 사용자가 자연스럽게 말해서 액션을 트리거할 문장이 있을 때 그 가치를 합니다. “8 oz of water 기록해 줘”가 그런 문장입니다. “레이어 3에 시그마 2.4의 가우시안 흐림 적용해 줘”는 아닙니다. 여러분의 앱 액션이 두 번째 패턴에 몰려 있다면, 인텐트는 여러분의 전환 레버가 아닙니다.

마무리

3년 동안 Apple은 iOS의 시스템 AI 패브릭이 App Intents를 통해 흐른다는 신호를 보내 왔습니다. WWDC 2024는 Apple Intelligence 라우팅을 그것에 추가했습니다. WWDC 2025는 별도의 인앱 도구 호출 표면으로 Foundation Models를 추가하면서, App Intents를 Siri / Spotlight / Apple Intelligence가 계속 사용하는 앱 간 계약으로 남겨 두었습니다. 모든 신호는 같은 방향을 가리킵니다. 타입 안전하고 선언적인 App Intent는 서드파티 앱이 이제 시스템과 맺는 계약입니다.

대부분의 iOS 앱은 여전히 App Intents를 Siri Shortcuts처럼 취급합니다. 시간이 있으면 출시할 기능 정도로요. 제 해석은 그 프레이밍이 나쁘게 늙을 것이라는 것입니다. Apple Intelligence의 시스템 표면이 확장됨에 따라(이미 오늘날 Siri, Spotlight, Shortcuts, Apple Intelligence 요약을 통해), 인텐트가 선언되지 않은 앱들은 라우팅 그래프 바깥으로 밀려나게 될 가능성이 높습니다. 제가 Apple의 다른 플랫폼 베팅을 지켜본 경험상, 선발 주자 표면은 누적됩니다.

Water는 11주 동안 LogWaterIntent를 출시한 상태였습니다. App Intent를 출시하는 코드의 양은 단일 파일에 들어갈 만큼 적습니다. 출시하지 않는 비용은 Apple Intelligence 릴리스마다 커집니다.

2026년에 iOS 앱을 출시하면서 App Intent를 하나도 선언하지 않았다면, 여러분의 로드맵에는 빠진 항목이 있는 것입니다. 추가하세요.

FAQ

iOS 개발에서 App Intent란 무엇입니까?

App Intent는 여러분의 앱 액션 중 하나를 Apple의 시스템 AI 표면에 노출하는 타입 안전하고 선언적인 Swift 구조체입니다. @Parameter로 매개변수를 선언하고, parameterSummary로 자연어 요약을 선언하며, 작업을 수행하고 구조화된 결과를 반환하는 비동기 perform() 본문을 갖습니다. Apple의 Siri, Spotlight, Shortcuts, Apple Intelligence가 이를 호출할 수 있습니다. (Apple의 온디바이스 LLM인) Foundation Models는 직접적인 인앱 도구 호출을 위해 별도의 Tool 프로토콜을 사용합니다.

App Intents는 이전의 INIntent와 어떻게 다릅니까?

App Intents(iOS 16, 2022 도입)는 Apple의 주요 인텐트 프레임워크로 INIntent를 대체했습니다. 새로운 프레임워크는 완전히 Swift 네이티브이며, @Parameter 같은 프로퍼티 래퍼를 사용하고, AppEntity를 통한 타입 안전 엔티티 쿼리를 지원하며, Siri, Spotlight, Shortcuts, Apple Intelligence가 호출하는 표면입니다. 기존 INIntent도 여전히 지원되지만 새로운 기능 작업은 받지 않습니다.

App Intent를 출시하려면 iOS 26이 필요합니까?

아니요. App Intents는 iOS 16부터 사용할 수 있습니다. iOS 26은 Foundation Models 프레임워크를 함께 추가하지만 App Intent 선언 자체는 iOS 16+에서 동작합니다. 위의 예제 코드는 SwiftData(iOS 17+)를 사용하므로 배포 타깃은 perform() 본문이 무엇을 임포트하는지에 따라 달라집니다. 순수 App Intents는 iOS 16까지 거슬러 동작하고, SwiftData 기반은 iOS 17이 필요합니다.

App Intent와 App Entity의 차이는 무엇입니까?

App Intent는 액션(동사)입니다. App Entity는 여러분의 앱이 알고 있는 데이터(명사)입니다. LogWaterIntent는 인텐트입니다. WaterEntry가 쿼리 가능한 타입이 되는 것은 엔티티입니다. Apple Intelligence는 둘 다 사용합니다. 액션을 취하기 위한 인텐트, 응답에서 데이터를 검색하고 참조하기 위한 엔티티입니다.

App Intents는 Foundation Models 도구 호출과 어떻게 관련이 있습니까?

Foundation Models는 직접적인 인앱 LLM 도구 호출을 위해 자체 Tool 프로토콜을 노출합니다. App Intents는 Apple Intelligence, Siri, Spotlight가 호출하는 정식 앱 간 표면으로 남아 있습니다. 같은 방향(타입 안전하고 선언적인 도구 사용), 두 개의 병렬 계약입니다. 시스템 AI 표면에서 도달 가능하기를 원하는 앱은 App Intents를 출시하고, 사용자 정의 도구로 자체 온디바이스 LLM을 호출하기를 원하는 앱은 Tool 준수를 출시합니다. 많은 앱이 둘 다 출시할 것입니다.


App Intents는 기능이 아닙니다. 계약입니다. 인텐트를 먼저 출시하는 앱이 표면을 가져갑니다. 나중에 출시하는 앱은 표면이 이미 다른 곳으로 라우팅된 것을 발견하게 됩니다. 11주 전, 저는 Water에 하나를 출시했습니다. 누적은 이미 시작되었습니다.

Apple Ecosystem 시리즈 더 보기

이 글은 진입점입니다. 나머지 네 편은 아키텍처 스택의 나머지 부분을 다룹니다.

또는 전체 허브로 이동하세요. Apple Ecosystem 시리즈. AI 에이전트와 함께하는 더 넓은 iOS 컨텍스트는 iOS Agent Development 가이드를 참고하세요.

참고 자료


  1. 개인 현장 테스트, 2026년 2월 8일, 오전 9:15 PT경. 페어링된 Apple Watch에서 Siri로부터 LogWaterIntent로, 다시 SwiftData 쓰기까지 이어진 첫 번째 엔드 투 엔드 흐름으로 기록되었습니다. 

  2. 941 Apps(941apps.com)가 발행한 저자의 Water iOS 앱. LogWaterIntent.swift는 2026년 2월 8일 커밋 e398c58에서 Water 1.4에 출시되었습니다. 위의 소스 코드 발췌는 해당 초기 커밋 시점의 프로덕션 버전입니다. 다이얼로그 문자열은 이후 반복적으로 다듬어졌습니다. 

  3. Apple, “Apple Intelligence Foundation Language Models,” machinelearning.apple.com. 온디바이스 + Private Cloud Compute 하이브리드. 

  4. Apple Developer, “Foundation Models” 프레임워크. iOS 26+. LanguageModelSessionTool 프로토콜을 통해 도구 호출을 노출하며, 이는 Siri / Spotlight / Apple Intelligence가 사용하는 AppIntent 프로토콜과 분리되어 있습니다. 두 가지는 같은 방향의 병렬 계약입니다. 

  5. Apple Developer, “Creating Your First App Intent”. 프로퍼티 래퍼 기반 매개변수 선언. 타입이 곧 스키마. 

  6. Apple Developer, “ParameterSummary”. Shortcuts UI, Siri 다이얼로그, Apple Intelligence 확인 화면에서 사용됩니다. 

  7. Apple Developer, “IntentResult”. ProvidesDialog, ProvidesView, ReturnsValue 프로토콜은 IntentResult와 합성되어 Siri, Spotlight, Watch, Apple Intelligence가 perform()으로부터 받는 형태를 결정합니다. 

  8. Apple Developer, “SiriKit”. SiriKit Intents(INIntent)는 iOS 10(2016)에 고정 도메인 표면(메시징, 결제, 차량 호출)으로 출시되었습니다. Siri Shortcuts는 iOS 12(2018), 인앱 인텐트 처리는 iOS 13(2019)에 뒤를 이었습니다. 

  9. Apple, “What’s new in App Intents”, WWDC 2022. 타입 안전하고 선언적인 App Intents 프레임워크의 도입. 

  10. Apple, “Bring your app to Siri”, WWDC 2024. App Intents와 App Entities를 통한 Apple Intelligence 라우팅. 

  11. Apple Developer, “AppEntity 프로토콜”. App Intents의 데이터 타입 버전. Apple Intelligence와 다른 시스템 표면이 쿼리할 수 있습니다. 

  12. Apple, “Apple Intelligence System Requirements”. 사용 가능 기기: iPhone 15 Pro와 Pro Max(A17 Pro), iPhone 16 라인업, iPhone 17 라인업, iPhone Air, iPhone 17e, M1 이상의 iPad Pro, M1 이상의 iPad Air, A17 Pro의 iPad mini, M2 이상의 Apple Vision Pro, M1 이상의 Mac. 두드러지게 빠진 것: 기본 iPhone 15 / 15 Plus. Foundation Models 프레임워크는 동일한 하드웨어 게이트를 상속받습니다. 

  13. 저자의 Get Bananas, iOS, macOS, watchOS, visionOS를 위한 SwiftUI + SwiftData 쇼핑 목록 앱입니다. ShoppingItem SwiftData @ModelItem.swift에 있습니다. @Attribute(.unique) var id: UUID, name: String, amount: String, section: String, isChecked: Bool, isOptional: Bool, sortOrder: Int, lastModified: Date?. iCloud Drive 동기화는 iCloudBackupManager를 통해 이루어집니다. 

  14. Get Bananas는 Claude Desktop을 위해 get-bananas.mcpb로 번들링된 MCP(Model Context Protocol) 서버를 출시합니다. 노출된 도구: get_shopping_list, add_item, remove_item, update_item, update_shopping_list. Anthropic의 MCP 사양: modelcontextprotocol.io

관련 게시물

세 가지 표면: 사람, Apple Intelligence, 에이전트

모든 iOS 앱 기능은 세 가지 표면을 마주합니다 — 사람, Apple Intelligence, 에이전트. 각각 다른 의무, 렌더링, 지연 시간 예산, 신뢰 자세를 가집니다.

11 분 소요

App Intents vs MCP: 라우팅의 문제

두 개의 프로토콜, 하나의 앱. App Intents는 앱을 Apple Intelligence에 노출합니다. MCP은 같은 도메인을 Claude, ChatGPT 등에 노출합니다. 라우팅의 문제입니다.

11 분 소요

클린업 레이어가 진짜 AI 에이전트 시장이다

Charlie Labs는 에이전트를 만드는 일에서 그 뒷정리를 하는 일로 피벗했습니다. AI 에이전트 시장은 생성에서 검증으로 이동하고 있습니다. 클린업이 지속 가능한 레이어입니다.

11 분 소요