Xcode 不断提供 .signUp 仅在 iOS 13.2 中可用。这是一些 Xcode 错误吗?

Posted

技术标签:

【中文标题】Xcode 不断提供 .signUp 仅在 iOS 13.2 中可用。这是一些 Xcode 错误吗?【英文标题】:Xcode keeps giving .signUp is only available in iOS 13.2 . Is this some Xcode bug? 【发布时间】:2020-05-29 11:39:30 【问题描述】:

我正在使用 Xcode 11.3.1 并尝试实现“使用 Apple 登录”。但是 Xcode 不断给出这个错误。我已经尝试重建、清理我的项目,但似乎没有任何效果。

我想要做的是 - 如果设备装有 ios 13.2,则显示“使用 Apple 注册”,否则显示“使用 Apple 登录”按钮,因为 type:signup 在 iOS 13.2 或更高版本中可用。 这是我的代码:

@available(iOS 13.0, *)
lazy var appleSignInButton:ASAuthorizationAppleIDButton = 
    let button : ASAuthorizationAppleIDButton
    if #available(iOS 13.2, *)
        button = ASAuthorizationAppleIDButton(type: .signUp, style: .black)
    else
        button = ASAuthorizationAppleIDButton(type: .signIn, style:.black)
    
    button.addTarget(self, action: #selector(appleSignUP), for: .touchDown)
    return button
()

【问题讨论】:

signUp 函数是什么? 我在操场上试过你的代码,它没有给出任何错误。 @George_E signUp 函数创建一个带有授权请求的 ASAuthorizationController 并执行请求。我已经为该功能使用了@available(iOS 13.0,*),这很好,因为另一个视图控制器具有类似的登录功能并且在那里工作正常。 【参考方案1】:

使用函数而不是计算属性来解决此问题。

@available(iOS 13.0, *)
func getAppleSignInButton() -> ASAuthorizationAppleIDButton 
    let button: ASAuthorizationAppleIDButton
    if #available(iOS 13.2, *) 
        button = ASAuthorizationAppleIDButton(type: .signUp, style: .black)
    else
        button = ASAuthorizationAppleIDButton(type: .signIn, style: .black)
    
    button.addTarget(self, action: #selector(appleSignUP), for: .touchDown)
    return button

如果需要,您也可以将其分离出来并保留惰性 var。

@available(iOS 13.0, *)
lazy var appleSignInButton: ASAuthorizationAppleIDButton = 
    let button = getSignUpOrInButton()
    button.addTarget(self, action: #selector(appleSignUP), for: .touchDown)
    return button
()

@available(iOS 13.0, *)
private func getSignUpOrInButton() -> ASAuthorizationAppleIDButton 
    if #available(iOS 13.2, *) 
        return ASAuthorizationAppleIDButton(type: .signUp, style: .black)
     else 
        return ASAuthorizationAppleIDButton(type: .signIn, style: .black)
    

【讨论】:

它工作正常。虽然我不明白为什么它现在可以工作以及为什么它首先显示错误。 我会假设惰性 var 的原始初始化是自包含的,它只是具有更严格的可用性要求。但老实说,我也不确定。我花了一段时间才弄清楚。【参考方案2】:
ASAuthorizationAppleIDButton.ButtonType.signUp

根据 Apple 的文档,确实仅在 iOS 13.2+ 中可用:

SDKs

iOS 13.2+
macOS 10.15.1+
Mac Catalyst 13.2+
tvOS 13.1+

ASAuthorizationAppleIDButton signUp Enumeration Case

【讨论】:

以上是关于Xcode 不断提供 .signUp 仅在 iOS 13.2 中可用。这是一些 Xcode 错误吗?的主要内容,如果未能解决你的问题,请参考以下文章

Crashlytics 线程仅在使用 Xcode 11 构建的 iOS 13 上崩溃

EXC_BAD_ACCESS 仅在运行 iOS 8 的 xcode 8 上

带有 Xcode 4.3.1 的 iOS 5.1:[UIColor colorWithPatternImage:] 奇怪的行为仅在设备上

ios/xcode:更改条形按钮项的标题

iOS 8.2 升级不在 UIImageView 中显示图像,但仅在通过 iTunes 或 TestFlight 而不是 Xcode 加载的应用程序中

仅在 xcode for ios 的 react native 项目中使用 lottie 的自定义动画启动屏幕 [关闭]