0Pricing
Swift Academy · 강의

앱 인텐트와 단축어

Siri와 단축어에 동작을 노출합니다.

앱 인텐트와 단축어은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

App Intents란

App Intents 프레임워크는 앱의 동작을 시스템에 노출합니다. Siri, 단축어, Spotlight, 위젯, 동작 버튼에서 사용할 수 있습니다. 동작을 Swift 유형으로 한 번만 설명하면 음성으로 실행하거나 자동화할 수 있는 형태로 어디서나 사용할 수 있습니다.

import AppIntents
// Define an action as a type; the system can run it
// from Siri, Shortcuts, Spotlight, widgets, etc.

AppIntent 정의하기

인텐트는 AppIntent를 준수하고 사용자에게 표시할 title을 선언하며, 작업을 수행하고 결과를 반환하는 perform()을 구현합니다. 프레임워크가 자동으로 검색하므로 별도의 등록이 필요하지 않습니다.

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    func perform() async throws -> some IntentResult {
        // create the task here
        return .result()
    }
}

매개변수

@Parameter 프로퍼티 래퍼를 사용해 사용자 또는 Siri에게 입력을 요청하십시오. 시스템이 누락된 값을 요청하고 유효성을 검사합니다. 각 매개변수에는 단축어 편집기에 표시되는 제목이 있습니다.

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    @Parameter(title: "Title")
    var taskTitle: String
    func perform() async throws -> some IntentResult {
        return .result()
    }
}

값과 대화 상자 반환

인텐트는 데이터를 반환하고 확인 메시지를 말할 수 있습니다. IntentResult의 .result(value:dialog:)와 같은 변형을 사용하면 형식이 지정된 값과 함께 Siri가 사용자에게 읽어 주는 음성 또는 화면 표시 대화 상자를 반환할 수 있습니다.

import AppIntents
struct CountTasksIntent: AppIntent {
    static var title: LocalizedStringResource = "Count Tasks"
    func perform() async throws
        -> some IntentResult & ProvidesDialog {
        let count = 5
        return .result(
            dialog: "You have \(count) tasks")
    }
}

매개변수 요약

parameterSummary는 단축어 편집기에 표시되는 문장을 설명하며, 매개변수를 자연스러운 문장에 넣습니다. 예를 들어 \(taskTitle)을 내 목록에 추가하는 문장처럼 작성할 수 있습니다. 이렇게 하면 동작을 단축어로 구성했을 때 내용이 명확하게 읽힙니다.

import AppIntents
struct AddTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Add Task"
    @Parameter(title: "Title") var taskTitle: String
    static var parameterSummary: some ParameterSummary {
        Summary("Add \(\.$taskTitle) to my list")
    }
    func perform() async throws -> some IntentResult {
        .result()
    }
}

개체

AppEntity는 작업, 메모, 재생 목록과 같이 시스템이 파악할 수 있는 모델 개체를 나타냅니다. 개체와 조회 기능을 사용하면 Siri와 단축어에서 사용자가 매개변수 값으로 여러분의 데이터 중 하나를 선택하게 할 수 있습니다.

import AppIntents
struct TaskEntity: AppEntity {
    static var typeDisplayRepresentation:
        TypeDisplayRepresentation = "Task"
    var id: String
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "\(id)")
    }
    static var defaultQuery = TaskQuery()
}

개체 조회

EntityQuery는 시스템에 식별자로 개체를 찾는 방법과 추천 항목을 나열하는 방법을 알려 줍니다. 이를 통해 사용자가 단축어에서 값을 선택하거나 Siri에 답할 때 보게 되는 선택기를 사용할 수 있습니다.

import AppIntents
struct TaskQuery: EntityQuery {
    func entities(for ids: [String]) async throws
        -> [TaskEntity] {
        ids.map { TaskEntity(id: $0) }
    }
    func suggestedEntities() async throws -> [TaskEntity] {
        [TaskEntity(id: "Groceries")]
    }
}

앱 단축어

AppShortcut을 사용하면 설정 없이 음성으로 인텐트를 실행할 수 있으므로 사용자가 먼저 단축어를 만들 필요가 없습니다. Siri가 상황을 파악할 수 있도록 앱 이름 토큰을 포함한 실행 문구를 제공해야 합니다.

import AppIntents
struct AddTaskShortcut: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: AddTaskIntent(),
            phrases: ["Add a task in \(.applicationName)"],
            shortTitle: "Add Task",
            systemImageName: "plus")
    }
}

실행 문구

Siri가 의미를 구분할 수 있도록 문구에는 \(.applicationName)이 포함되어야 합니다. 사용자가 말할 법한 자연스러운 변형을 여러 개 제공하세요. 일치하는 문구는 시스템이 처리하므로 직접 언어를 분석할 필요가 없습니다.

import AppIntents
// Provide variants; applicationName is required:
// phrases: [
//   "Add a task in \(.applicationName)",
//   "Create a task with \(.applicationName)",
//   "New \(.applicationName) task"
// ]
let phrases = "include applicationName token"
_ = phrases

Siri를 넘어 더 넓게 활용하기

인텐트는 선언형이므로 동일한 AddTaskIntent로 대화형 위젯의 Button(intent:), 제어 센터 제어 항목 또는 단축어 동작을 구동할 수 있습니다. 이 모든 기능이 별도의 연결 작업 없이 여러분의 perform()을 실행합니다.

import AppIntents
import SwiftUI
// In an interactive widget:
// Button(intent: AddTaskIntent()) {
//     Label("Add", systemImage: "plus")
// }
let reuse = "one intent, many surfaces"
_ = reuse

인텐트 지역화

제목과 대화 상자는 LocalizedStringResource를 사용하므로 문자열 카탈로그를 통해 번역됩니다. 실행 문구도 언어별로 지역화되므로 Siri가 사용자의 언어로 응답할 수 있습니다.

import AppIntents
struct GreetIntent: AppIntent {
    static var title: LocalizedStringResource = "Greet"
    func perform() async throws
        -> some IntentResult & ProvidesDialog {
        .result(dialog: "Welcome back")
    }
}

빠른 확인

AppShortcut의 문구를 유효하게 만드는 조건을 떠올려 보세요.

복습

앱 인텐트에 대해 배웠습니다:

  • 제목과 perform()을 사용해 AppIntent에 맞추고, @Parameter로 입력을 수집한 다음 parameterSummary로 설명합니다.
  • 데이터를 AppEntity로 모델링하고, 선택기와 추천 항목을 위한 EntityQuery를 사용합니다.
  • \(.applicationName)을 포함하는 AppShortcut 문구를 통해 음성 동작을 제공합니다.
  • 동일한 인텐트로 Siri, 단축어, 대화형 위젯 및 제어 항목을 구동하고, LocalizedStringResource를 통해 지역화합니다.

자주 묻는 질문

“앱 인텐트와 단축어” 강의는 무료인가요?

네 — “앱 인텐트와 단축어” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“앱 인텐트와 단축어”에서 뭘 배우나요?

Siri와 단축어에 동작을 노출합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“앱 인텐트와 단축어” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. WidgetKit 위젯 만들기
  2. 타임라인 제공자와 스냅샷
  3. 앱 확장 기능 개요
  4. 앱 인텐트와 단축어
← Swift Academy(으)로 돌아가기