Xcode 14报错:存储属性不可用@available标记潜在不可用(Flutter项目)
升级依赖包版本
多数第三方包会针对Xcode 14的编译规则更新修复这个问题。去pub.dev查对应依赖包的最新版本,修改项目pubspec.yaml里的版本号后,执行flutter pub get更新。如果是Git托管的依赖,切换到官方最新的分支或tag即可。临时修改依赖包源码
如果依赖包暂未更新,可手动修改本地Pod源码:- 找到项目
ios/Pods/[对应依赖包名称]目录下的iOS端代码文件 - 将标记了
@available(iOS 14.0, *)的存储属性,改成计算属性的写法,把可用性标记绑定到属性的get/set方法上。比如:
原错误代码:
修改为:@available(iOS 14.0, *) var someProperty: SomeType?private var _someProperty: SomeType? @available(iOS 14.0, *) var someProperty: SomeType? { get { _someProperty } set { _someProperty = newValue } }
注意:这种修改是临时的,下次执行
pod install或flutter pub get会被覆盖,优先等官方发布修复版本。- 找到项目
降级Xcode版本(不推荐)
若上述方法都无法解决,可暂时降级到Xcode 13.x版本,该版本允许存储属性使用@available标记,能绕过编译错误。但长期来看建议适配Xcode 14的新规则。适配多版本的条件编译(针对自定义依赖包)
如果你是该依赖包的维护者,可以用条件编译兼容不同Xcode版本:#if swift(>=5.7) && compiler(>=5.7) // Xcode 14+ 兼容写法 private var _someProperty: SomeType? @available(iOS 14.0, *) var someProperty: SomeType? { get { _someProperty } set { _someProperty = newValue } } #else // Xcode 13及以下写法 @available(iOS 14.0, *) var someProperty: SomeType? #endif
内容的提问来源于stack exchange,提问作者Umutcan Bağdu
相关产品推荐
相关产品推荐

