为支持 iOS 12 和 13 的应用在 iPad 上启用键盘快捷键

Enabling keyboard shortcuts on iPad for app that supports iOS 12 and 13

我有一个 iOS 应用程序,它支持 iOS 10 到 iOS 13,并且最近为其添加了 Catalyst 支持。通过对 AppDelegate 的扩展支持键盘快捷键,我也想在 iPad 上启用它们。

extension AppDelegate {
  override func buildMenu(with builder: UIMenuBuilder) {
    super.buildMenu(with: builder)
    guard builder.system == .main else { return }

    // Add menus and shortcuts
  }
}

这在 Catalyst 目标上编译得很好,但是在为 iOS 构建时出现以下错误:'UIMenuBuilder' 仅在 iOS 13.0 或更新版本中可用

显而易见的解决方案是进行可用性检查:

@available(iOS 13.0, *)
extension AppDelegate {
  override func buildMenu(with builder: UIMenuBuilder) {
    super.buildMenu(with: builder)
    guard builder.system == .main else { return }

    // Add menus and shortcuts
  }
}

但随后错误变为 覆盖 'buildMenu' 必须与它覆盖的声明一样可用

所以现在我从 iOS 的构建中排除了扩展以获得工作构建,但这意味着 iPad.

没有捷径

我遇到了和你一样的问题。使用:

#if targetEnvironment(macCatalyst)

围绕您的扩展而不是 Xcode 的 @available 建议。