Xcode 14 beta错误:存储属性不能使用'@available'标记为可能不可用。

35
当我在 Xcode 14 beta 上运行我的应用程序时,出现了以下错误,我不知道如何解决:
存储属性不能使用 '@available' 标记为可能不可用。
当我在 Xcode 13 上运行时,它不会弹出,应用程序可以正常运行。我在 .xcworkspace 文件中。

1
如果问题出在RevenueCat库中,那么就不是你的代码有问题了,你无能为力。请向库作者报告这个bug,然后回到Xcode 13继续工作。 - matt
请查看此链接:https://dev59.com/jlIG5IYBdhLWcg3whAMW - LoVo
我遇到了同样的问题,有没有人有解决方案请分享。 - Jitendra Chauhan
我已经像这样修复了它:https://dev59.com/eFgR5IYBdhLWcg3wAJBK#73699790 - mirkancal
9个回答

24

我在 XCode 14 的 Flutter 项目中遇到了这个错误。其中一个外部包使用了:

@available(iOS 14.0, *) 我的当前解决方案是:

更新 Podfile 中的平台版本:platform :ios, '14.0', 然后执行 pod update && Pod install。


有没有一种方法可以解决它,而不将iOS 14定义为全局平台? - jed1
在我的代码中发生的这个问题已经像我上面提到的那样得到了解决。请您具体说明一下您遇到的问题。这个问题只出现在我正在更新最新的 Xcode 版本时。@jed1 - Vishnu

16

如果这个错误是由于DKImagePickerController引起的,那么让我告诉您一个百分百有效的解决方案

按照以下步骤操作:

  1. 进入您的 Podfile 文件,并将此https://github.com/miguelpruivo/DKImagePickerController.git 的网址替换为此https://github.com/zhangao0086/DKImagePickerController.git 的网址。
  2. 在您的 Flutter 项目中运行以下命令:
    2.1) flutter clean
    2.2) flutter pub get
  3. 导航到 ios 文件夹并运行以下命令:
    3.1) pod install(如果使用 M1,请使用 arch -x86_64 pod install
    3.2) pod update(如果使用 M1,请使用 arch -x86_64 pod update
  4. 运行您的项目。

1
真实的故事!这是此项目的最佳解决方案。 我记得这是由于某些项目中止而发生的。感谢您的记录。 - Randika Vishman

15
在 Xcode 13 及以下版本中,如果你使用了一个懒加载的 @available 存储属性,你就可以编译通过,如下所示:
@available(iOS 10.0, *)
private(set) lazy var center = UNUserNotificationCenter.current()

然而,在Xcode 14中,这种方法不起作用。

相反,您需要使用一个不可用的存储属性,并使用计算的@available属性:

private var _selectionFeedbackGenerator: Any? = nil
@available(iOS 10.0, *)
fileprivate var selectionFeedbackGenerator: UISelectionFeedbackGenerator {
    if _selectionFeedbackGenerator == nil {
        _selectionFeedbackGenerator = UISelectionFeedbackGenerator()
    }
    return _selectionFeedbackGenerator as! UISelectionFeedbackGenerator
}

Answer source


13

3
这对我有用,我原来使用的是 flutter_inappwebview 版本 5.3.2,现在改为了 5.4.4,执行 flutter pub get 命令后,它可以正常工作了。谢谢! - Halen
你是如何使用最新版本的?你做了什么? - gurkan stack
我该如何安装这个软件包? - gurkan stack
我的 pubspec.yaml 中没有这样的库。 - gurkan stack

3
请确保在构建设置选项卡中更改 iOS 部署目标的两个部分,就像我的图片一样: enter image description here

3

我曾经遇到过同样的问题。根据GitHub上的存储库指示,解决方法是更新Podfile版本:platform :ios, '14.0'


0

兄弟,我刚刚为我的项目找到了一个解决方案,它可能对你有用,但我仍然想分享一下我的经验;

class MyClass {
    @available(iOS 15.0, *) // Stored properties cannot be marked potentially unavailable with '@available'
    var myProperty: String
}

Xcode 提供了整个类来制作 @available

@available(iOS 15.0, *)
class MyClass {
    var myProperty: String
}

这是我的解决方案。您可以在getter和setter方法上使用@available属性,而不是直接在属性上使用。
class MyClass {
    private var myValue: String = ""
    
    @available(iOS 15.0, *)
    var myProperty: String {
        get {
            return myValue
        }
        set {
            myValue = newValue
        }
    }
}

这是来自我的真实项目; 在此输入图像描述

0
我的情况:
  1. 删除ios文件夹。(应该保存您的Info.plist)
  2. flutter create .
  3. 将ios更改为14。(Pod文件)
  4. flutter pub get => cd ios => pod install => cd .. => flutter run

0
在我的情况下,我修改了类似下面的“available”语句。
// 这段代码在Xcode 15(Swift 5.9)上出现错误。
@available(swift, obsoleted: 0.6.3, renamed: "changeCallback")
public var changeFunction: ChangeFunction? = nil

// 代码在Xcode 15(Swift 5.9)上无效。
@available(*, unavailable, renamed: "changeCallback")
public var changeFunction: ChangeFunction? {
    set {
        changeCallback = newValue
    }
    get {
        return changeCallback
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接