如何创建可在Spotlight显示的AppEntity快捷方式及自定义图标
关于AppIntent与AppShortcut的两个问题解决方案
一、创建主屏幕实体快捷方式(类似截图中的"Assigned"快捷方式)
你定义的AppShortcut默认属于Siri快捷方式范畴,要生成主屏幕上的独立实体快捷方式,可通过以下步骤实现:
- 确保已完成基础的
AppShortcut和AppIntent定义(即你提供的代码部分)。 - 在App内添加用户触发入口(比如按钮),调用系统提供的快捷方式添加界面:
- 使用
INAddVoiceShortcutViewController,这个控制器允许用户为快捷方式设置语音指令,同时支持添加到主屏幕的选项。 - 代码示例:
import IntentsUI // 在你的视图控制器中添加按钮点击事件 @IBAction func addShortcutToHomeScreen(_ sender: UIButton) { let intent = WatchListAppIntent() let shortcut = INShortcut(intent: intent) let vc = INAddVoiceShortcutViewController(shortcut: shortcut) vc.delegate = self present(vc, animated: true) } // 实现INAddVoiceShortcutViewControllerDelegate协议 extension YourViewController: INAddVoiceShortcutViewControllerDelegate { func addVoiceShortcutViewControllerDidCancel(_ controller: INAddVoiceShortcutViewController) { controller.dismiss(animated: true) } func addVoiceShortcutViewController(_ controller: INAddVoiceShortcutViewController, didFinishWith voiceShortcut: INVoiceShortcut?, error: Error?) { controller.dismiss(animated: true) // 按需处理成功/失败逻辑 } }
- 使用
- 用户操作流程:点击按钮后,在弹出的界面中完成语音指令设置,最后选择"添加到主屏幕",即可生成独立的实体快捷方式图标。
二、为AppShortcut设置自定义图标
原代码中使用的systemImageName仅支持系统图标,iOS 17+提供了自定义图标支持,通过AppShortcutIcon.customImage(_:)实现:
- 准备自定义图标:建议使用单色矢量图(PDF/SVG),适配不同分辨率后添加到Assets中,需设置为"Template Image",这样系统会自动处理浅色/深色模式的颜色适配。
- 修改
AppShortcut的初始化代码,替换systemImageName为icon参数:struct WatchListShortcut: AppShortcutsProvider { static var appShortcuts: [AppShortcut] { AppShortcut( intent: WatchListAppIntent(), phrases: [ "Tell \(.applicationName) to open first item in watch list", ], shortTitle: "WatchList item", icon: AppShortcutIcon.customImage(UIImage(named: "your-custom-icon")!) ) } } - 注意事项:自定义图标会被系统统一处理为符合快捷样式的圆角图标,若使用彩色图,系统可能会将其转为单色,因此优先使用单色模板图以获得最佳效果。
内容的提问来源于stack exchange,提问作者Syed Abdul Basit Shah Mashwani
相关产品推荐
相关产品推荐

