반응형
iOS AppIntents 아키텍쳐: 온디바이스 AI 및 Siri에 앱 로직 연동하기
Apple Intelligence 및 Siri와 같은 온디바이스 AI 시스템이 사용자의 의도를 파악하여 특정 애브이 기능을 직접 실행하려면, 앱 내부 로직을 시스템이 이해할 수 있는 형식으로 노출해야 합니다. 기존의 복잡한 SiriKit 자원 파일(Intent Definition) 대신 Swift 언어의 선언적 문법을 활용하는 AppIntents 프레임워크가 iOS 앱 연동의 표준 아키텍처로 자리 잡았습니다.
1. 기존 SiriKit의 한계와 AppIntents 프레임워크의 도입
기존 SiriKit은 별도의 .intentdefinition 파일 설정과 자동생성 코드에 의존하여 코드 유지 보수가 까다로웠습니다.
- 선언적 Swift 코드 : AppIntents는 Swift 프로토콜 기반으로 동작하여 뷰 코드 및 도메인 로직과 동일한 코드 베이스 내에서 선언적으로 정의 됩니다.
- Apple Intelligence 결합 : 단순 음성 명령을 넘어 온디바이스 AI 시스템이 앱 내부 엔티티(Entity)와 인텐트(Intent)를 인식하도록 지원합니다.
2. AppIntents 아키텍처 핵심 구성 요소
AppIntents 시스템은 3가지 기본 프로토콜로 구성됩니다.
- AppIntent : 앱이 수행할 수 있는 작업 단위(동작)를 정의합니다. (예: "주문하기", "메모 작성하기")
- AppEntity : 작업의 대상이 되는 앱 내부 데이터 모델을 다룹니다. (예: "상품", "노트 객체")
- AppShortcutsProvider : Siri 및 단축어 앱에 자동으로 등록될 기본 음성 명령 패턴을 선언합니다.
3. AppIntent 구현 및 비즈니스 로직 연동 실무 예제
특정 동작을 수행하는 AppIntent를 Swift 코드로 구현하는 방식입니다.
import AppIntents
// 1. 시스템에 노출할 동작(Intent) 정의
struct CreateNoteIntent: AppIntent {
// 시스템 Siri 및 단축어 앱에 표시될 제목
static var title: LocalizedStringResource = "새 노트 작성"
static var description = IntentDescription("지정된 제목으로 새 노트를 생성합니다.")
// 사용자 또는 온디바이스 AI가 전달할 파라미터 정의
@Parameter(title: "노트 제목")
var noteTitle: String
// Intent 실행 시 호출되는 핵심 로직
@MainActor
func perform() async throws -> some IntentResult & ReturnsValue<String> {
// 앱 내부 도메인 서비스 호출
let newNoteId = try await NoteService.shared.create(title: noteTitle)
// 실행 결과 및 성공 메시지 반환
return .result(value: "노트 '\(noteTitle)'이(가) 성공적으로 생성되었습니다.")
}
}
// 2. Siri 자동 음성 명령 등록 프로토콜 정의
struct NoteAppShortcuts: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: CreateNoteIntent(),
phrases: [
"\(.applicationName)에서 \(\.$noteTitle) 작성해 줘",
"\(.applicationName)에 새 노트 추가"
],
shortTitle: "노트 작성",
systemImageName: "square.and.pencil"
)
}
}
4. SiriKit vs AppIntents 비교
| 구분 | 기존 SiriKit 방식 | AppIntents 프레임워크 방식 |
| 설정 방식 | .intentdefinition GUI 파일 매핑 | Pure Swift 선언적 프로토콜 코드 |
| AI 연동성 | 고정된 도메인 카테고리만 지원 | Apple Intelligence 온디바이스 인지 연동 |
| 단축어 자동 등록 | 사용자가 수동 등록 필요 | AppShortcutsProvider 로 자동 생성 |
| 유지보수성 | 생성된 코드와 실제 로직 분리로 복잡 | 도메인 서비스와 직접 바인딩 가능 |
5. 핵심 요약
AppIntents 아키택쳐를 도입하면 코드베이스의 이원화 없이 Swift 코드만으로 앱의 핵심 로직을 온디바이스 AI, Siri, 단축어 시스템에 안전하게 노출할수 있습니다.
반응형


