如何在针对旧 iOS 版本时添加需要 iOS 12 的自定义 Intent?
Posted
技术标签:
【中文标题】如何在针对旧 iOS 版本时添加需要 iOS 12 的自定义 Intent?【英文标题】:How can I add a Custom Intent which requires iOS 12 while targeting an older iOS version? 【发布时间】:2018-11-11 05:58:14 【问题描述】:我正在尝试在面向 ios 10.3 的应用中添加自定义 Intent 以支持 Siri 快捷方式。 Xcode 会自动生成意图类和协议,但是所有生成的类和协议都具有以下属性:
@available(iOS 12.0, watchOS 5.0, *)
我知道#available(...) 但它不用于在编译时包含或排除代码,所以如果我的目标设置为 pre-iOS,我不确定如何添加自定义 Intent 12.
在下面的 sn-p 中,MyIntentHandling 和 MyIntentResponse 是由 Xcode 自动生成的。但是,这里没有办法使用#available。
public class MyIntentHandler: NSObject, MyIntentHandling
func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) ...
func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) ...
谁有好的解决方案?
【问题讨论】:
【参考方案1】:不,
#available
用于编译和运行时检查。
Swift 编译器在编译时进行检查,确保没有调用您选择的部署目标不支持的方法,并强制您使用#available
条件。因此,从 Xcode 9 开始,支持旧 iOS 部署目标和使用新功能更加安全。
在运行时,会检查 #available
条件是否与您当前运行的 iOS 版本匹配,它将仅执行匹配的代码。
所以,有了额外的意图支持,您就安全了。
【讨论】:
以上是关于如何在针对旧 iOS 版本时添加需要 iOS 12 的自定义 Intent?的主要内容,如果未能解决你的问题,请参考以下文章
目标设置为 iOS 13 的 iOS 应用在 App Store 上不提供旧版本