【问题标题】:iOS 13 Running on old targetsiOS 13 在旧目标上运行
【发布时间】:2019-09-13 21:27:49
【问题描述】:

我正在努力更新项目以使用 iOS 13。

在我更新 carthage 后,该项目在最新 iOS 版本的设备上运行良好。

当我尝试在较旧的目标上运行时,我收到很多与“...仅在 iOS 13 中可用”相关的错误:层、一些视图控制器、自定义 uiview。

项目建议建议我添加 @available(iOS 13.0, *) 但没有任何结果。

我做了一些研究,并尝试在视图控制器之前添加:

   #if canImport(SwiftUI) && DEBUG
    import SwiftUI
    @available(iOS 13.0, *)
    myviewcontroller 

     #endif

只有在我尝试在旧目标(项目目标是 10.0)上运行时才会出现这个问题。

我过度尝试在方法名称上添加 @available(iOS 13.0, *) 但错误仍然存​​在。 我有 200 多个错误,如下图所示。

【问题讨论】:

  • 不要使用AnyObject 作为sender 的类。至少是一个 UIView 吗?一个 UIButton?
  • sender.layer 的具体情况确实看起来很奇怪,因为 AnyObject 在任何 iOS 版本上都不应该有 layer(而且 AnyObject 几乎肯定是在这里使用的错误类型反正)。是不是有一些奇怪的扩展添加了layer,而您手动注释它可用于 iOS 13+?

标签: swift ios13


【解决方案1】:

如果某物(例如方法)带有 @available (iOS 13.0, *) 注释,则必须先检查 iOS 13 是否可用才能引用它,例如:

if #available(iOS 13.0, *){
    methodRequiringIOS13(…)
} else {
    legacyAlternativeMethod(…)
}

guard #available(iOS 13.0, *) else {
    // Do legacy stuff here
    return
}
// Do stuff for iOS 13+ here

否则你会得到你在为旧目标编译时看到的错误。

因为听起来您的代码库已经支持旧版本,所以检查您从那时起添加了哪些 iOS 13 特定的东西应该很简单,然后将所有这些都包含在这些检查中。当然,这意味着在您准备好达到最低部署目标之前,您必须为所有内容提供替代的旧版实现,因此请确保任何新添加都值得付出努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多