为支持 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
建议。
我有一个 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
建议。