【问题标题】:Xcode keeps giving .signUp is only available in iOS 13.2 . Is this some Xcode bug?Xcode 不断提供 .signUp 仅在 iOS 13.2 中可用。这是一些 Xcode 错误吗?
【发布时间】: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,*),这很好,因为另一个视图控制器具有类似的登录功能并且在那里工作正常。

标签: ios swift xcode sign-in-with-apple


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2022-07-14
    • 2020-03-18
    • 2021-12-13
    相关资源
    最近更新 更多