AppIntent คือเฟรมเวิร์กของ Apple ที่เปิดตัวใน iOS 16 เพื่อแทนที่ Intents framework แบบเก่า โดยให้ API แบบประกาศสำหรับการรวมแอปกับ Siri, Shortcuts และ Spotlight แตกต่างจากแนวทางเก่าที่ต้องใช้ไฟล์ Intent Definition File แยกต่างหากและการสร้างโค้ด ObjC AppIntent ใช้ Swift บริสุทธิ์พร้อมโปรโตคอล AppIntent และ AppEnum ตาม เอกสาร Apple Developer, 2026 AppIntent ลดจำนวนโค้ดสำหรับสร้างอินเทนต์หนึ่งรายการโดยเฉลี่ย 60% เมื่อเทียบกับ Intents framework และเวลาในการรวมคำสั่ง Siri ลดลงจากหลายวันเหลือไม่กี่ชั่วโมง
ประเด็นสำคัญ
AppIntent คือเฟรมเวิร์กของ Apple สำหรับอธิบายคำสั่งแบบประกาศที่แอปของคุณสามารถดำเนินการตามคำขอของ Siri, Shortcuts, Spotlight, Control Center และ Action Button โดยมีพื้นฐานจากโปรโตคอล AppIntent ซึ่งนักพัฒนาจะอธิบายชื่ออินเทนต์ พารามิเตอร์ และเมธอด perform() — ตรรกะที่สามารถดำเนินการได้ เฟรมเวิร์กจะสร้างอินเทอร์เฟซผู้ใช้สำหรับกำหนดค่าพารามิเตอร์ในแอป Shortcuts และวลีเสียงสำหรับ Siri โดยอัตโนมัติ
ก่อน AppIntent นักพัฒนาใช้ Intents framework — ระบบที่อิงจากไฟล์ Intents Definition File ซึ่งสร้างโค้ด Objective-C และต้องการการตั้งค่า Intents Extension แยกต่างหาก กระบวนการนี้ยุ่งยาก: แม้อินเทนต์ธรรมดาก็ต้องใช้ไฟล์กำหนดค่าสูงสุด 5 ไฟล์ AppIntent ขจัดความซับซ้อนนี้ — อินเทนต์อธิบายในไฟล์ Swift เดียว และระบบสร้างทุกสิ่งที่จำเป็นสำหรับการรวมกับ Siri และ Shortcuts โดยอัตโนมัติ
ตาม เซสชัน WWDC 2024 "Dive deeper into App Intents" Apple มอง AppIntent เป็นกลไกกลางในการขยายฟังก์ชันการทำงานของแอปนอกเหนือจากอินเทอร์เฟซผู้ใช้แบบดั้งเดิม เมื่อถึงเวลาที่ iOS 18 เปิดตัว แอปมากกว่า 70% ใน 100 อันดับแรกของ App Store ใช้ AppIntent สำหรับการรวมกับ Shortcuts และ Siri แล้ว และผู้ใช้ iOS 18 โดยเฉลี่ยเรียกใช้อินเทนต์ 4–6 ครั้งต่อวันผ่านคำสั่งเสียงหรือวิดเจ็ต
Intents framework (iOS 10–15) ต้องการการสร้างไฟล์ .intentdefinition การสร้างคลาส ObjC/Swift ผ่าน Xcode การตั้งค่า Intents Extension และ App Intent Configuration AppIntent (iOS 16+) แทนที่ไปป์ไลน์นี้อย่างสมบูรณ์ด้วยโค้ด Swift บริสุทธิ์โดยไม่ต้องสร้าง ส่วนขยาย หรือการกำหนดค่าเพิ่มเติม ทำให้กระบวนการสร้างอินเทนต์เข้าถึงได้สำหรับนักพัฒนา iOS ทั่วไปโดยไม่ต้องศึกษา SiriKit
ข้อได้เปรียบหลักของ AppIntent คือการประกาศ นักพัฒนาอธิบายว่าอินเทนต์ทำอะไร ไม่ใช่การทำงานร่วมกับระบบอย่างไร เฟรมเวิร์กจัดการสถานการณ์การสนทนาของ Siri การแสดงพารามิเตอร์ใน Shortcuts และการส่งผ่านบริบทระหว่างอินเทนต์ด้วยตัวเอง ใน Intents framework แบบเก่า ทุกแง่มุมของการรวมต้องเขียนโค้ดด้วยตนเอง รวมถึง INUIHostedView สำหรับแสดงอินเทอร์เฟซผู้ใช้ของอินเทนต์
| คุณลักษณะ | Intents framework | AppIntent |
|---|---|---|
| ปริมาณโค้ด | 100–300 บรรทัดต่ออินเทนต์ | 30–60 บรรทัด |
| ไฟล์ที่จำเป็น | .intentdefinition, Extension, Config | 1 ไฟล์ Swift |
| การสร้างโค้ด | จำเป็น (Xcode -> ObjC) | ไม่จำเป็น |
| ความไม่พร้อมกัน | เฉพาะ completion handler | async/await + ความคืบหน้า |
| IntentDialog | ไม่มี | การสนทนา Siri ในตัว |
AppIntent เป็นโปรโตคอลกลางที่กำหนดอินเทนต์ ประกอบด้วย title (ชื่อสำหรับ Siri), description (คำอธิบายใน Shortcuts), พารามิเตอร์ (ผ่าน @Parameter) และเมธอด perform() ที่คืนค่า IntentResult ผลลัพธ์อาจเป็น IntentDialog (การสนทนากับ Siri), ค่าที่จะส่งกลับไปยัง Shortcuts หรือข้อผิดพลาด อินเทนต์แต่ละรายการยังสามารถให้ suggestedInvocationPhrase — วลีสำหรับเรียกด้วยเสียง
AppEntity อธิบายเอนทิตีที่อินเทนต์ทำงานด้วย ตัวอย่างเช่น หากแอปจัดการโปรเจกต์ AppEntity Project ประกอบด้วย id, displayRepresentation (วิธีแสดงเอนทิตีในอินเทอร์เฟซผู้ใช้) และ defaultQuery (วิธีค้นหาเอนทิตี) AppEnum คือการแจงนับสำหรับพารามิเตอร์ตัวเลือกที่สร้างอินเทอร์เฟซผู้ใช้ด้วยองค์ประกอบตัวเลือกใน Shortcuts โดยอัตโนมัติ แทนที่จะสร้างรายการพารามิเตอร์ด้วยตนเอง เพียงประกาศ enum ที่สอดคล้องกับ AppEnum ก็เพียงพอ
enum TaskPriority: String, AppEnum {
case low, medium, high
static var typeDisplayRepresentation: TypeDisplayRepresentation =
"Priority"
var displayRepresentation: DisplayRepresentation {
switch self {
case .low: "Low"
case .medium: "Medium"
case .high: "High"
}
}
}
struct CreateTaskIntent: AppIntent {
static var title: LocalizedStringResource = "Create Task"
@Parameter(title: "Task Name")
var taskName: String
@Parameter(title: "Priority")
var priority: TaskPriority
func perform() async throws -> some IntentResult {
try await TaskManager.shared
.createTask(name: taskName, priority: priority)
return .result(dialog: "Task created")
}
}
พารามิเตอร์ของ AppIntent ประกาศผ่าน property wrapper @Parameter ซึ่งรวมเข้ากับอินเทอร์เฟซผู้ใช้ของ Shortcuts และคำขอเสียงของ Siri โดยอัตโนมัติ พารามิเตอร์แต่ละตัวมี title (แสดงใน Shortcuts) และสามารถมีคำอธิบาย ค่าเริ่มต้น และข้อจำกัด AppIntent รองรับประเภทมาตรฐาน: String, Int, Double, Bool รวมถึงประเภทที่กำหนดเองผ่าน AppEntity และ AppEnum
การตรวจสอบความถูกต้องของพารามิเตอร์ดำเนินการในเมธอด perform() ก่อนดำเนินการตรรกะ หากพารามิเตอร์ไม่ถูกต้อง อินเทนต์จะคืนค่าข้อผิดพลาดผ่าน IntentError สำหรับการตรวจสอบที่ซับซ้อน สามารถใช้เมธอด validate() ซึ่งถูกเรียกก่อน perform() และสามารถให้ข้อเสนอแนะแก่ผู้ใช้ผ่าน IntentDialog ก่อนดำเนินการคำสั่ง ซึ่งมีประโยชน์โดยเฉพาะสำหรับสถานการณ์เสียงของ Siri ที่การถามผู้ใช้ซ้ำง่ายกว่าการดำเนินการคำสั่งที่ไม่ถูกต้อง
struct SendMessageIntent: AppIntent {
static var title: LocalizedStringResource = "Send Message"
@Parameter(title: "Recipient")
var recipient: String
@Parameter(title: "Message")
var message: String
func validate() throws {
guard message.count >= 1 else {
throw IntentError.invalidMessage
}
}
func perform() async throws -> some IntentResult {
try await Messenger.shared
.send(recipient: recipient, text: message)
return .result(dialog: "Sent!")
}
}
ตัวอย่างที่สมบูรณ์ของอินเทนต์สำหรับค้นหาโน้ตในแอปสาธิตการทำงานกับ AppEntity และ EntityQuery SearchNotesIntent รับสตริงค้นหาและคืนค่ารายการโน้ตที่พบ AppEntity Note อธิบายโครงสร้างโน้ต และ EntityQuery ดำเนินการค้นหาทั่วพื้นที่เก็บข้อมูล ผลลัพธ์ถูกส่งกลับผ่าน IntentResult พร้อมอาร์เรย์ของเอนทิตี ซึ่ง Shortcuts แสดงต่อผู้ใช้
struct Note: AppEntity {
let id: UUID
let title: String
let content: String
static var typeDisplayRepresentation: TypeDisplayRepresentation =
"Note"
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "(title)")
}
}
struct SearchNotesIntent: AppIntent {
static var title: LocalizedStringResource = "Search Notes"
@Parameter(title: "Query")
var query: String
func perform() async throws -> some IntentResult {
let results = await NoteStore.shared
.search(query)
.map { $0.toEntity() }
return .result(value: results)
}
}
หลังจากประกาศ AppIntent การรวมกับ Shortcuts และ Siri เกิดขึ้นโดยอัตโนมัติ แอป Shortcuts สแกน AppIntent ทั้งหมดจากแอปที่ติดตั้งและแสดงในรายการการดำเนินการที่มีอยู่ ผู้ใช้สามารถเพิ่มอินเทนต์ไปยังคำสั่งลัดของตน กำหนดค่าพารามิเตอร์ และรวมกับการดำเนินการอื่นๆ สำหรับ Siri อินเทนต์จะปรากฏเป็นคำสั่งเสียงโดยไม่ต้องตั้งค่าเพิ่มเติมจากนักพัฒนา
นักพัฒนาสามารถปรับปรุงการรวมโดยเพิ่ม suggestedInvocationPhrase — วลีที่แนะนำสำหรับการเรียกด้วยเสียง ตัวอย่างเช่น สำหรับอินเทนต์เพิ่มงาน: suggestedInvocationPhrase = "Add new task" Siri วิเคราะห์วลีนี้และแนะนำให้ผู้ใช้เมื่อเรียนรู้คำสั่งเสียง นอกจากนี้ยังสามารถระบุ categories — หมวดหมู่อินเทนต์ (create, view, search, edit) ซึ่งช่วยให้ Shortcuts จัดกลุ่มการดำเนินการตามความหมาย
| หมวดหมู่ | ตัวอย่าง | พฤติกรรมใน Shortcuts |
|---|---|---|
| .create | CreateTaskIntent | จัดกลุ่มกับการดำเนินการสร้างอื่นๆ |
| .view | ViewWeatherIntent | แสดงในหมวดหมู่ "ดู" |
| .search | SearchNotesIntent | ทำเครื่องหมายเป็นการดำเนินการค้นหา |
| .edit | UpdateTaskIntent | จัดกลุ่มกับการดำเนินการแก้ไข |
คำถามที่พบบ่อย
ไม่ AppIntent ไม่ต้องการ Intents Extension แยกต่างหาก อินเทนต์ถูกคอมไพล์ลงในแอปพลิเคชันหลักโดยตรง ซึ่งทำให้สถาปัตยกรรมง่ายขึ้นและขจัดความจำเป็นในการสื่อสารระหว่างกระบวนการ
AppIntent ใช้งานได้บน iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+ สำหรับ iOS 15 และเก่ากว่า ต้องใช้ Intents framework แนะนำให้รองรับทั้งสอง API เพื่อครอบคลุมอุปกรณ์ในวงกว้าง
IntentsResult รองรับ String, Int, Double, Bool, อาร์เรย์ AppEntity, IntentDialog และประเภทที่กำหนดเอง โครงสร้างข้อมูลที่ซับซ้อนจะถูกส่งกลับผ่าน EntityQuery ซึ่งรวมเข้ากับอินเทอร์เฟซผู้ใช้ของ Shortcuts โดยอัตโนมัติ
ได้ ผ่าน AppIntentsPackage — แพ็คเกจที่อนุญาตให้ดำเนินการอินเทนต์บนฝั่งเซิร์ฟเวอร์ มีประโยชน์สำหรับแอปที่มีตรรกะฝั่งเซิร์ฟเวอร์ซึ่งอินเทนต์ต้องเข้าถึงข้อมูลที่ไม่พร้อมใช้งานในเครื่อง
ใช้ โปรแกรมจำลอง iOS 16+ กับแอป Shortcuts เพิ่มอินเทนต์ไปยังคำสั่ง Shortcuts ในโปรแกรมจำลองแล้วเรียกใช้ สถานการณ์ Siri ต้องใช้อุปกรณ์จริงเนื่องจากโปรแกรมจำลองไม่รองรับการป้อนข้อมูลด้วยเสียง
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม