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

3D Touch Quick Actions完全失效,复制苹果示例代码仍无法运行

解决3D Touch Quick Actions在Xcode 11新项目中无响应的问题

你遇到的问题核心是Xcode 11默认启用了UIScene生命周期,而苹果的示例项目大概率还是基于旧的UIApplication生命周期开发的,导致你复制的AppDelegate代码无法触发快捷方式的回调逻辑。

问题根源

从Xcode 11开始,新建项目默认采用Scene-Based App架构,原来属于UIApplicationDelegate的很多回调会转移到UISceneDelegate中,包括3D Touch Quick Actions的处理逻辑。你在AppDelegate中实现的performActionFor shortcutItem方法,在Scene模式下不会被系统调用——这就是为什么点击快捷方式只会打开App,但完全没有打印"shortcut pressed"的原因。

解决方案:将快捷方式处理逻辑移到SceneDelegate

你需要在SceneDelegate.swift中添加对应的处理方法,具体步骤如下:

  1. 在scene(_:willConnectTo:options:)方法中处理冷启动时的快捷方式参数:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // 处理App完全关闭时,点击快捷方式启动的场景
    if let shortcutItem = connectionOptions.shortcutItem {
        handleShortcutItem(shortcutItem)
    }
    guard let _ = (scene as? UIWindowScene) else { return }
}
  1. 实现Scene模式下的快捷方式回调方法:
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
    handleShortcutItem(shortcutItem)
    completionHandler(true)
}
  1. 添加统一的处理函数(让代码更整洁,也方便后续扩展不同快捷方式的逻辑):
private func handleShortcutItem(_ shortcutItem: UIApplicationShortcutItem) {
    print("shortcut pressed")
    // 后续如果有多个快捷方式,可以通过shortcutItem.type区分处理
}

额外检查点

  • 确认你的项目Info.plist中存在UIApplicationSceneManifest配置(这是Xcode 11新项目默认自带的),如果手动移除过这个配置,AppDelegate的方法才会生效,但不建议这么做,应该遵循新的生命周期规范。
  • 再次核对UIApplicationShortcutItems的配置项,确保UIApplicationShortcutItemType等字段没有拼写错误——虽然你说已经严格复制,但细节失误往往是这类问题的元凶。

修改完成后,无论App是完全关闭状态点击快捷方式启动,还是在后台时被快捷方式唤起,都能正常触发打印逻辑了。

内容的提问来源于stack exchange,提问作者Kurt L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:11