You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Expo React Native中集成iOS App Intent的位置及生效问题求助

Expo原生模块集成iOS App Intent 问题排查与解决

核心问题

使用npx create-expo-module sample-app-module创建Expo原生模块后,将App Intent代码添加到模块的Swift文件中未生效,测试设备/模拟器无法识别对应的快捷方式。

问题原因与解决步骤

1. 代码放置与语法修正

你的代码存在语法错误,且放置位置不符合Expo模块的集成逻辑:

  • 语法修正:SiriAppShortcuts的appShortcuts需返回数组格式,补全缺失的闭合符号:
@available(iOS 16, *)
struct SampleAppIntent: AppIntent {
    static let title: LocalizedStringResource = "AppName Session"
    static var openAppWhenRun: Bool = false

    func perform() -> some IntentResult & ProvidesDialog {
        return .result(dialog: "How can i help you today?")
    }
}

@available(iOS 16, *)
struct SiriAppShortcuts: AppShortcutsProvider {
     static var appShortcuts: [AppShortcut] {
         [
             AppShortcut(
                 intent: SampleAppIntent(),
                 phrases: [
                    "Start a session with \(.applicationName)",
                    "Book a session with \(.applicationName)",
                    "\(.applicationName) session",
                 ]
             )
         ]
     }
}
  • 正确放置位置:在模块的iOS目录下单独创建SampleAppIntent.swift文件存放上述代码,而非直接写入模块的主Swift文件。

2. 模块编译配置

确保模块的Podspec文件包含Intent代码文件:
打开模块目录下的sample-app-module.podspec,在source_files中添加Intent文件路径(若已有该配置则无需修改):

s.source_files = "ios/**/*.{h,m,swift}"

3. 宿主项目配置

在使用该模块的Expo宿主项目中完成以下操作:

  • 添加权限描述:打开ios/[项目名]/Info.plist,添加Siri使用权限:
<key>NSSiriUsageDescription</key>
<string>通过快捷指令快速启动会话</string>
  • 生成原生代码:运行npx expo prebuild更新iOS原生项目文件。
  • 用Xcode运行:打开ios目录下的.xcworkspace,选择主App target运行,避免使用通用Expo开发客户端(自定义开发客户端需重新构建)。

4. 系统索引触发

App Shortcuts需要系统索引,完成以下操作确保识别:

  • 重新安装App后,重启测试设备/模拟器。
  • 打开系统「快捷指令」App,搜索你的App名称,查看是否出现对应快捷方式;或直接用Siri说出配置的短语(如"Start a session with [你的App名]")。

内容的提问来源于stack exchange,提问作者AkANO Toluwani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:17:07