关于 sirikit
sirikit 是面向 Apple 应用开发者的 SiriKit 开发技能,涵盖自定义意图、快捷指令和 Siri 建议的实现流程,并提供处理模式与配置参考。
主要功能
- 01配置 Intents 扩展与 Siri 权限
- 02定义自定义意图和参数
- 03处理意图解析、确认与执行
- 04捐赠及删除快捷指令
- 05定制 Siri 界面与词汇
适用场景
- 01为应用添加语音操作
- 02根据用户操作提供快捷指令
- 03在应用中接收并处理 Siri 意图
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ios-agent/ iosagent.dev --skill sirikit安装后在 Claude Code 中输入/sirikit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/app-intents.mdcustom-intents.mdintent-handling.mdintents-ui.mdshortcuts.mdvocabulary.md详细介绍
SiriKit 开发技能
让用户能够通过语音、快捷指令和智能建议与您的应用交互。
快速入门
添加 Intents 扩展
- 文件 → 新建 → 目标 → Intents 扩展
- 如果要自定义 Siri 界面,请启用“包含 UI 扩展”
- 在主应用目标中启用 Siri 功能(签名与功能)
最简 Intent 处理程序
import Intents
class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> Any {
switch intent {
case is OrderSoupIntent:
return OrderSoupIntentHandler()
default:
return self
}
}
}
class OrderSoupIntentHandler: NSObject, OrderSoupIntentHandling {
// 1. Resolve parameters
func resolveSoup(for intent: OrderSoupIntent) async -> SoupResolutionResult {
guard let soup = intent.soup else {
return .needsValue()
}
return .success(with: soup)
}
// 2. Confirm intent
func confirm(intent: OrderSoupIntent) async -> OrderSoupIntentResponse {
return OrderSoupIntentResponse(code: .ready, userActivity: nil)
}
// 3. Handle intent
func handle(intent: OrderSoupIntent) async -> OrderSoupIntentResponse {
// Fulfill the request
return OrderSoupIntentResponse.success(message: "Your order is confirmed!")
}
}
Intent 处理流程
┌─────────────────────────────────────────────────────────────┐
│ User speaks to Siri │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 1. RESOLVE - Validate each parameter │
│ • Return .success(with:) if valid │
│ • Return .needsValue() if missing │
│ • Return .disambiguation(with:) for choices │
│ • Return .unsupported() if invalid │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. CONFIRM - Final validation before execution │
│ • Verify services are ready │
│ • Return .ready or appropriate failure code │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. HANDLE - Fulfill the intent │
│ • Execute the action │
│ • Return success/failure response │
└─────────────────────────────────────────────────────────────┘
系统 Intent 领域
| 领域 | 使用场景 | 关键 Intent |
|---|---|---|
| 消息 | 发送/搜索消息 | INSendMessageIntent、INSearchForMessagesIntent |
| 通话 | VoIP 通话 | INStartCallIntent、INSearchCallHistoryIntent |
| 付款 | 转账 | INSendPaymentIntent、INRequestPaymentIntent |
| 叫车 | 请求乘车 | INRequestRideIntent、INGetRideStatusIntent |
| 锻炼 | 开始/结束锻炼 | INStartWorkoutIntent、INEndWorkoutIntent |
| 媒体 | 播放音频/视频 | INPlayMediaIntent、INAddMediaIntent |
| 照片 | 搜索照片 | INSearchForPhotosIntent |
| 列表与备忘录 | 创建备忘录/任务 | INCreateNoteIntent、INAddTasksIntent |
| 汽车命令 | 车辆控制 | INSetCarLockStatusIntent、INActivateCarSignalIntent |
| 预订 | 餐厅预订 | INGetReservationDetailsIntent |
自定义 Intent
在 Intent 定义文件中定义
- 创建
Intents.intentdefinition文件 - 添加新的 Intent,并采用动词加名词的命名方式(例如
OrderSoup) - 设置与用途相符的类别
- 定义带类型的参数
参数类型
- 系统:字符串、整数、布尔值、日期、人物、位置、货币
- 自定义:将自己的类型定义为枚举或对象
参考文档
- Intent 处理:解析、确认和处理模式
- 快捷指令:提供、建议和管理快捷指令
- 自定义 Intent:Intent 定义文件、参数、响应
- IntentsUI:自定义 Siri 界面视图
- 词汇:自定义术语和短语
- App Intents 迁移:现代 App Intents 框架
关键配置
Info.plist(Intents 扩展)
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsSupported</key>
<array>
<string>OrderSoupIntent</string>
</array>
<key>IntentsRestrictedWhileLocked</key>
<array>
<string>INSendPaymentIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
</dict>
请求 Siri 授权
import Intents
INPreferences.requestSiriAuthorization { status in
switch status {
case .authorized: print("Siri authorized")
case .denied: print("Siri denied")
case .notDetermined: print("Not determined")
case .restricted: print("Restricted")
@unknown default: break
}
}
常见模式
用户操作后提供快捷指令
import Intents
func donateOrderShortcut(order: Order) {
let intent = OrderSoupIntent()
intent.soup = order.soup
intent.quantity = order.quantity
let interaction = INInteraction(intent: intent, response: nil)
interaction.identifier = order.id.uuidString
interaction.donate { error in
if let error = error {
print("Donation failed: \(error)")
}
}
}
删除已提供的快捷指令
// Delete specific
INInteraction.delete(with: [orderID.uuidString]) { error in }
// Delete all from app
INInteraction.deleteAll { error in }
在应用中处理 Intent(启动时)
// SwiftUI
.onContinueUserActivity(NSStringFromClass(OrderSoupIntent.self)) { activity in
if let intent = activity.interaction?.intent as? OrderSoupIntent {
handleOrderIntent(intent)
}
}
// UIKit SceneDelegate
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if let intent = userActivity.interaction?.intent as? OrderSoupIntent {
handleOrderIntent(intent)
}
}
关键限制
- 后台执行:扩展运行时间很短;长时间任务应启动应用
- 共享数据:使用 App Groups 在应用和扩展之间共享数据
- 扩展中无 UI:使用 IntentsUI 扩展提供自定义视图
- 测试:安装后稍等片刻,让 Siri 识别新的 Intent
- 本地化:提供本地化的
AppIntentVocabulary.plist
评论
支持 Markdown