View in English

  • Apple Developer
    • 시작하기

    시작하기 탐색

    • 개요
    • 알아보기
    • Apple Developer Program

    알림 받기

    • 최신 뉴스
    • Hello Developer
    • 플랫폼

    플랫폼 탐색

    • Apple 플랫폼
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    피처링

    • 디자인
    • 배포
    • 게임
    • 액세서리
    • 웹
    • 홈
    • CarPlay
    • 기술

    기술 탐색

    • 개요
    • Xcode
    • Swift
    • SwiftUI

    피처링

    • 손쉬운 사용
    • 앱 인텐트
    • Apple Intelligence
    • 게임
    • 머신 러닝 및 AI
    • 보안
    • Xcode Cloud
    • 커뮤니티

    커뮤니티 탐색

    • 개요
    • Apple과의 만남 이벤트
    • 커뮤니티 주도 이벤트
    • 개발자 포럼
    • 오픈 소스

    피처링

    • WWDC
    • Swift Student Challenge
    • 개발자 이야기
    • App Store 어워드
    • Apple 디자인 어워드
    • 문서

    문서 탐색

    • 문서 라이브러리
    • 기술 개요
    • 샘플 코드
    • 휴먼 인터페이스 가이드라인
    • 비디오

    릴리즈 노트

    • 피처링 업데이트
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • 다운로드

    다운로드 탐색

    • 모든 다운로드
    • 운영 체제
    • 애플리케이션
    • 디자인 리소스

    피처링

    • Xcode
    • TestFlight
    • 서체
    • SF Symbols
    • Icon Composer
    • 지원

    지원 탐색

    • 개요
    • 도움말
    • 개발자 포럼
    • 피드백 지원
    • 문의하기

    피처링

    • 계정 도움말
    • 앱 심사 지침
    • App Store Connect 도움말
    • 새로 추가될 요구 사항
    • 계약 및 지침
    • 시스템 상태
  • 빠른 링크

    • 이벤트
    • 뉴스
    • 포럼
    • 샘플 코드
    • 비디오
 

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 전체 비디오
  • 소개

더 많은 비디오

  • 소개
  • 요약
  • 코드
  • App Intents 프레임워크의 새로운 기능 살펴보기

    고급 기능으로 앱 인텐트 도입을 레벨업하여 속도, 유연성, 관련성을 향상해 보세요. ValueRepresentation과 RelevantEntities가 콘텐츠의 검색 가능성을 높이고 앱 간 이동을 가능하게 하며, EntityCollection이 성능을 향상하고, SyncableEntity를 통해 여러 기기 간에 확장할 수 있는 방법을 알아보세요. union 값과 취소를 원활하게 처리하는 장기 실행 인텐트를 포함한 더 풍부한 매개변수 유형을 살펴보세요.

    챕터

    • 0:00 - Introduction
    • 2:40 - Share entities across apps with ValueRepresentation
    • 3:45 - Register relevant entities with RelevantEntities
    • 7:05 - Handle entities efficiently with EntityCollection
    • 8:55 - Use entities across devices with SyncableEntity
    • 11:01 - Richer parameter types
    • 12:38 - Union value parameters
    • 13:26 - Extend execution with LongRunningIntent
    • 15:27 - Target the right process with ExecutionTargets
    • 17:14 - Next steps

    리소스

    • Adopting App Intents to support system experiences
    • App Intents
      • HD 비디오
      • SD 비디오
  • 비디오 검색…
    • 0:01 - Share structured entities with ValueRepresentation

      struct LandmarkEntity: AppEntity, Transferable {
            var id: Int
            var landmark: Landmark  // contains CLLocationCoordinate2D
      
            static var transferRepresentation: some TransferRepresentation {
                ValueRepresentation(
                    exporting: { entity in
                        PlaceDescriptor(
                            representations: [.coordinate(entity.landmark.locationCoordinate)],
                            commonName: entity.landmark.name
                        )
                    }
                )
            }
        }
      
        // If the entity already has a PlaceDescriptor property, use a key-path — much less code:
        struct LandmarkEntity: AppEntity, Transferable {
            var id: Int
            @Property var placeDescriptor: PlaceDescriptor
      
            static var transferRepresentation: some TransferRepresentation {
                ValueRepresentation(exporting: \.placeDescriptor)
            }
        }
    • 5:18 - Register relevant entities with RelevantEntities

      // Suggest playlists for the workout session
        let playlistEntities = [dailyRun, runningMix]
        let workoutContext = AppEntityContext.audio(.workout(activityType: .running))
      
        try await RelevantEntities.shared.updateEntities(
            playlistEntities, for: workoutContext
        )
        
        // Clear all entities for a context
        try await RelevantEntities.shared.removeAllEntities(for: workoutContext)
      
        // Remove specific entities from a context
        try await RelevantEntities.shared.removeEntities(playlistEntities, from: workoutContext)
      
        // Or remove all entities across all contexts
        try await RelevantEntities.shared.removeAllEntities()
    • 7:15 - Handle large entity sets with EntityCollection

      struct TagPhotosIntent: AppIntent {
            static let title: LocalizedStringResource = "Tag Travel Photos"
      
            @Parameter var photos: EntityCollection<PhotoEntity>   // was: [PhotoEntity]
            @Parameter var tag: String
      
            func perform() async throws -> some IntentResult {
                modelData.tagPhotos(ids: photos.identifiers, tag: tag)   // was: tagPhotos(photos, tag: tag)
                return .result()
            }
        }
    • 10:14 - Make entity IDs stable with SyncableEntity

      // If your ID is already stable across devices (server UUID, CloudKit record ID):
        struct PhotoEntity: AppEntity, SyncableEntity {
            var id: Int  // Already stable across devices — that's it
        }
        
        // If you use local IDs, pair a local and a stable ID:
        struct PhotoEntity: AppEntity, SyncableEntity {
            var id: SyncableEntityIdentifier<String, String>
      
            init(localID: String, stableID: String) {
                self.id = SyncableEntityIdentifier(local: localID, stable: stableID)
            }
        }
    • 11:58 - Accept multiple types with @UnionValue

      @UnionValue
        enum TravelGalleryContent {
            case landmarkCollection(LandmarkCollectionEntity)
            case photoAlbum(PhotoAlbumEntity)
      
            static let typeDisplayRepresentation: TypeDisplayRepresentation = "Travel Gallery"
            static let caseDisplayRepresentations: [Cases: DisplayRepresentation] = [
                .landmarkCollection: "Landmark Collection",
                .photoAlbum: "Photo Album"
            ]
        }
    • 13:41 - Run beyond 30 s with LongRunningIntent + CancellableIntent

      struct UploadPhotoIntent: LongRunningIntent, CancellableIntent {
            static let title: LocalizedStringResource = "Upload Photo"
      
            @Parameter var photo: IntentFile
        
            func perform() async throws -> some IntentResult & ProvidesDialog {
                let result = try await performBackgroundTask {
                    let chunks = calculateChunks(for: photo)
                    progress.totalUnitCount = Int64(chunks)
      
                    for chunk in 1...chunks {
                        try Task.checkCancellation()
                        try await uploadChunk(chunk)
                        progress.completedUnitCount = Int64(chunk)
                    }
                    return "Upload complete!"
                } onCancel: { reason in
                    cleanup(for: reason)
                }
                return .result(dialog: "\(result)")
            }
        }
    • 16:54 - Control which process runs your intent with ExecutionTargets

      // Write operation — needs the main app
        struct UpdateFavoriteIntent: AppIntent {
            static var allowedExecutionTargets: ExecutionTargets { .main }
        }
      
        // Standalone download — runs in the extension
        struct DownloadPhotoIntent: AppIntent {
            static var allowedExecutionTargets: ExecutionTargets { .appIntentsExtension }
        }
      
        // Display-only — runs in the widget extension
        struct GetLandmarkStatusIntent: AppIntent {
            static var allowedExecutionTargets: ExecutionTargets { .widgetKitExtension }
        }
      
        // Works in either — lets the system choose
        struct TagPhotosIntent: AppIntent {
            static var allowedExecutionTargets: ExecutionTargets { [.main, .appIntentsExtension] }
        }
    • 0:00 - Introduction
    • The 2027 App Intents updates — more control, flexibility, and a smoother developer experience across Siri, Shortcuts, Spotlight, Widgets, and Apple Intelligence. Three areas: entity enhancements, richer parameters, and intent execution, built on the Landmarks Travel Tracking sample.

    • 2:40 - Share entities across apps with ValueRepresentation
    • Beyond Transferable's File and Data representations, the new ValueRepresentation shares structured types the system understands, for example exporting a landmark as a PlaceDescriptor (GeoToolbox) so it flows to Maps for directions. Use a key-path if the entity already has the property.

    • 3:45 - Register relevant entities with RelevantEntities
    • Spotlight indexing and interaction donation can't surface never-seen, never-used content. RelevantEntities lets you suggest entities with a context (such as running playlists when a workout starts) via updateEntities, and remove them by context, by entity, or entirely.

    • 7:05 - Handle entities efficiently with EntityCollection
    • Resolving every entity before an intent runs is costly at scale (tagging thousands of photos). EntityCollection passes just identifiers to perform() without full resolution, a one-line parameter-type change that made tagging 1000 photos nearly instant.

    • 8:55 - Use entities across devices with SyncableEntity
    • Siri conversations now continue across devices, but local IDs differ per device. SyncableEntity declares a stable ID (server UUID or CloudKit record ID); when you only have local IDs, SyncableEntityIdentifier pairs a local and a stable ID so on-device code uses local and the system uses stable.

    • 11:01 - Richer parameter types
    • Declaring a @Parameter gives a native picker, Siri understanding, and localization for free, now extended to more native types like Duration (no custom time pickers) and PersonNameComponents, working across Siri, Shortcuts, and Widgets.

    • 12:38 - Union value parameters
    • A @UnionValue enum lets one parameter accept multiple types, for example a single widget showing photos from either a landmark collection or a photo album. The macro generates type info, case metadata, and picker support (typeDisplayRepresentation, caseDisplayRepresentations), and works everywhere including Shortcuts.

    • 13:26 - Extend execution with LongRunningIntent
    • Intents normally have 30 seconds; LongRunningIntent runs beyond it, manages the background task lifecycle, and shows progress as a Live Activity. Wrap work in performBackgroundTask and report progress (it builds on ProgressReportingIntent). Add CancellableIntent's onCancel to clean up gracefully; it also supports background GPU access.

    • 15:27 - Target the right process with ExecutionTargets
    • When intents live in a shared package linked by the app and extensions, the system picks a process by heuristics, not always right (for example a widget favorite button needs the writing main app). ExecutionTargets overrides this to target the main app, an App Intents extension, a WidgetKit extension, or any combination.

    • 17:14 - Next steps
    • Add ValueRepresentation to carry structured data, register relevant content, adopt EntityCollection for large entity sets, and add LongRunningIntent for work over 30 seconds. See "Code-along: Make your app available to Siri" and "Validate your App Intents adoption with AppIntentsTesting."

Developer Footer

  • 비디오
  • WWDC26
  • App Intents 프레임워크의 새로운 기능 살펴보기
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • Apple Intelligence
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • 머신 러닝 및 AI
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • Mini Apps Partner Program
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    최신 뉴스 읽기.
    Apple Developer 앱 받기.
    Copyright © 2026 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침