mcpField
S
sirikit

sirikit

github.com/ios-agent开发1240 次安装34 周前更新
代码仓库

关于 sirikit

sirikit 是面向 Apple 应用开发者的 SiriKit 开发技能,涵盖自定义意图、快捷指令和 Siri 建议的实现流程,并提供处理模式与配置参考。

主要功能

  1. 01配置 Intents 扩展与 Siri 权限
  2. 02定义自定义意图和参数
  3. 03处理意图解析、确认与执行
  4. 04捐赠及删除快捷指令
  5. 05定制 Siri 界面与词汇

适用场景

  1. 01为应用添加语音操作
  2. 02根据用户操作提供快捷指令
  3. 03在应用中接收并处理 Siri 意图

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ios-agent/iosagent.dev --skill sirikit

安装后在 Claude Code 中输入/sirikit确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
app-intents.md
custom-intents.md
intent-handling.md
intents-ui.md
shortcuts.md
vocabulary.md

详细介绍

SiriKit 开发技能

让用户能够通过语音、快捷指令和智能建议与您的应用交互。

快速入门

添加 Intents 扩展
  1. 文件 → 新建 → 目标 → Intents 扩展
  2. 如果要自定义 Siri 界面,请启用“包含 UI 扩展”
  3. 在主应用目标中启用 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 定义文件中定义
  1. 创建 Intents.intentdefinition 文件
  2. 添加新的 Intent,并采用动词加名词的命名方式(例如 OrderSoup)
  3. 设置与用途相符的类别
  4. 定义带类型的参数
参数类型
  • 系统:字符串、整数、布尔值、日期、人物、位置、货币
  • 自定义:将自己的类型定义为枚举或对象

参考文档

关键配置

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