基本上问题就在标题里。我确信有一种方法可以将你的应用程序发布到更早的iOs版本(在本例中是8),同时仍然能够使用更新的OS版本的独占功能。示例:我的应用程序对iOs 8.3的支持最低,随着iOs 9的最新发布,我想增加对强制触摸(只在iOs 9中可用)的支持,但同时,我希望能够修复but,并进行UI改进,例如,并将更新发布到这两个版本中。例如,主要的应用程序都会这样做,所以肯定有办法,但我哪儿也找不到,我放弃了:
编辑:有一个很好的方法吗?而不检查respondsToSelector之类的东西?类似于单独的项目?或者xcconfig文件可以做到这一点?我只是想知道..。因为在每一个ios 9目标功能上都有一个if else并不是一个很好的解决方案,当你谈论一个企业/大型应用程序时
发布于 2015-09-23 05:54:33
Swift 2的可用性功能应该可以解决您的问题。利用可用性,Swift支持操作系统版本控制和符号可用性测试。
首先,将构建设置中的部署目标设置为iOS 8.3,将基本SDK设置为最新。如果您在项目中使用的符号(类、方法等)仅在比部署目标(iOS 8.3)更新的操作系统中可用,则当您试图构建和运行项目时,Xcode将在该行上显示带有修复的错误消息。
请参阅Swift编程语言书的“控制流”一章中的检查API可用性。
可用性检查如下所示:
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属性。您可以将此属性应用于任何符号定义(例如,类),以标记符号的定义需要一定的最低OS版本。
与在使用iOS 9 API的每个地方使用可用性签入不同,您只需对整个类使用@available属性即可。然后,您只需要在使用该类的地方使用可用性检查。例如:
@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
}发布于 2015-09-23 03:08:30
在iOS 9上的设备并不意味着它有3d触摸,您应该使用forceTouchCapability属性来确定设备是否有3d触摸,并使代码的某些部分做出适当的反应。
如果您需要知道设备运行的是哪个iOS版本,请查看这条线,您可以使用if - the语句使代码做出适当的反应(比如确保该设备OS版本上确实存在该属性)。
发布于 2015-09-23 03:10:41
将Build中的"iOS部署目标“设置为8.3,将基本SDK设置为最新的iOS (iOS 9.0)。
您可以在iOS 8支持的类中使用iOS 9代码,只需确保只在iOS 8设备上执行任何iOS 9代码即可。您可以使用respondsToSelector:或[UIDevice currentDevice systemVersion]来帮助您。
https://stackoverflow.com/questions/32730271
复制相似问题