实施新的Sign in With Apple
功能是否会使应用程序与iOS 12及更低版本不兼容,类似于SwiftUI?是否有可能编译一个必须import AuthenticationServices
像XCode 10
这样的应用程序?
使用 Apple 登录本身不会使整个应用程序与 iOS 12 及更早版本不兼容(SwiftUI 也是如此(。
但是,当您需要支持此类功能(从iOS 13开始可用(时,您需要使用@available(iOS 13.0, *)
属性和if #available(iOS 13.0, *)
检查来有条件地禁用对这些功能的支持。否则,您将在运行旧版iOS的设备上出现编译错误和/或崩溃。
如果您需要在早期版本的 iOS(以及非 iOS 平台(上支持使用 Apple 登录,如 Apple Staff所述,您应该使用 Apple JS 框架登录。
对于第二个问题,正如@Paulw11提到的,答案是否定的,因为Xcode 10不包括iOS 13 SDK。
如果你想要向后兼容,我建议避免使用CryptoKit进行sha256加密。您可以使用此字符串扩展导入CommonCrypto而不是 CryptoKit。
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。