基本上问题在于标题.我确信有一种方法可以将您的应用程序发送到早期版本的iO(在本例中为8),同时仍然可以使用较新操作系统版本的独有功能.
例:
我的应用程序对iOs 8.3的最低支持,以及最新版本的iOs 9,我想添加对力触摸的支持(仅在iOs 9中可用),但同时,我希望能够修复bug例如,进行UI改进,并将更新发送到两个版本.
主要的应用程序这样做,例如fb,所以必须有一种方式,但我无法在任何地方找到它,我放弃了:(
例:
我的应用程序对iOs 8.3的最低支持,以及最新版本的iOs 9,我想添加对力触摸的支持(仅在iOs 9中可用),但同时,我希望能够修复bug例如,进行UI改进,并将更新发送到两个版本.
主要的应用程序这样做,例如fb,所以必须有一种方式,但我无法在任何地方找到它,我放弃了:(
编辑:有一个简洁的方法吗?没有检查respondsToSelector和这些东西?像单独的项目?或者也许xcconfig文件可以做到这一点?我只是想知道..因为当你谈论企业/大型应用程序时,在每个ios 9目标功能上都有一个if else并不是一个很好的解决方案
解决方法
Swift 2的可用性功能可以解决您的问题.凭借可用性,Swift可支持操作系统版本控制和符号可用性测试.
首先,将构建设置中的部署目标设置为iOS 8.3,将基础SDK设置为Latest.如果您在项目中使用仅在比部署目标(iOS 8.3)更新的操作系统中可用的符号(类,方法等),Xcode将在您尝试构建时显示错误消息,并在该行上显示修复信息并运行您的项目.
请参阅The Swift Programming Language一书的Control Flow一章中的Checking API Availability.
可用性检查如下所示:
if #available (iOS 9,*) { // use APIs only available on iOS 9 or later } else { // do nothing,don't show feature in UI,etc }
这些是基础知识.在您的问题的第二部分,您正在寻找的是一种更大规模处理API可用性的方法.为此,您可以使用Swift 2的可用性功能的另一个功能,即@available属性.您可以将此属性应用于任何符号定义(例如,类),以标记符号的定义需要某个最小操作系统版本.
您可以在整个类中使用@available属性,而不是在每个使用iOS 9 API的地方使用可用性检查.然后,您只需要在使用该类的位置使用可用性检查.例如:
@available(iOS 9,*) class MyAwesomeiOSNineFeature { var myCoolObject = UICooliOSNineThing() func doAwesomeStuff() { // lots of code that uses iOS 9 stuff,no availability check } func doOtherStuff() { // lots of code that uses iOS 9 stuff,no availability check } } // In another class that doesn't have an `@available` requirement: if #available(iOS 9,*) { let feature = MyAwesomeiOSNineFeature() feature.doAwesomeStuff() } else { // don't show UI for new feature }