"Sign in With Apple"是否允许应用程序向后兼容iOS 12及更低版本?

13

实施新的Apple登录功能是否会使应用程序与iOS 12及以下版本不兼容,类似于SwiftUI?是否有可能编译需要导入AuthenticationServices 的应用程序,如XCode 10


你这里实际上在问两件事情。你可以使用 @available 来使应用程序兼容较低版本的iOS,并在较低版本中“隐藏”使用苹果登录的代码。你的第二个问题是在Xcode 10中编译你的项目;这是不可能的,因为你的项目将使用iOS 13 SDK. - Paulw11
@Paulw11,我能否支持最低模式下的苹果登录? - sejn
你说的“最低型号”是什么意思?如果你指的是iOS版本,那么它无法支持iOS 12之前的版本,但可以在运行iOS 12或更高版本的任何iOS设备上使用。 - Paulw11
2个回答

4

使用“Sign in with Apple”本身并不会使整个应用程序与iOS 12及更早版本不兼容(SwiftUI同样适用)。

但是,当您需要支持此类功能(从iOS 13开始提供)时,您需要使用@available(iOS 13.0, *)属性和if #available(iOS 13.0, *)检查来有条件地禁用对这些功能的支持。否则,在运行较旧版本iOS的设备上将出现编译错误和/或崩溃。

如果您需要在早期版本的iOS(以及非iOS平台)上支持“Sign in with Apple”,就像Apple员工提到的那样,您应该使用Sign in with Apple JS框架。

针对您的第二个问题,正如@Paulw11所述,答案是,因为Xcode 10不包括iOS 13 SDK。


感谢苹果强制我们使用iOS 13独有的功能。 因此,迫使我们使用Xcode 11并编写那些丑陋的可用注释和检查的恶劣代码 >.< 建议的替代方案是JS框架... 真的吗? - d4Rk
我需要一个完整的示例,演示如何在iOS 12中使用Apple JS进行签名。 - Muhammed Alkabani
@Eugene Berdnikov,所以在iOS中没有支持在较低版本的应用程序中进行登录的选项。我说得对吗? - sejn
@sejn 在 iOS 12 及更早版本中,使用本机 iOS SDK(身份验证服务框架)不支持使用苹果登录选项。 - Eugene Berdnikov

2

如果您需要向后兼容性,建议避免使用 CryptoKit 进行 sha256 加密。相反,您可以使用导入 CommonCrypto 的字符串扩展。

import CommonCrypto

extension String {
   var sha256: String {
       let data = Data(utf8)
       var hash = [UInt8](repeating: 0,  count: Int(CC_SHA256_DIGEST_LENGTH))

       data.withUnsafeBytes { buffer in
           _ = CC_SHA256(buffer.baseAddress, CC_LONG(buffer.count), &hash)
       }

       return hash.map { String(format: "%02hhx", $0) }.joined()
   }
}

我已经尝试使用条件导入#if canImport(CryptoKit)并在其他链接器标志中设置-weak_framework CryptoKit,但在iOS12及以下版本仍会崩溃。到目前为止,使其工作的唯一方法是避免导入CryptoKit。


请问一下,苹果的“使用 Apple 登录”功能是否支持最低版本的 iOS? - sejn

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