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 8.2 升级不在 UIImageView 中显示图像,但仅在通过 iTunes 或 TestFlight 而不是 Xcode 加载的应用程序中
仅在 xcode for ios 的 react native 项目中使用 lottie 的自定义动画启动屏幕 [关闭]