实施新的Apple登录
功能是否会使应用程序与iOS 12及以下版本不兼容,类似于SwiftUI?是否有可能编译需要导入AuthenticationServices
的应用程序,如XCode 10
?
使用“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。
如果您需要向后兼容性,建议避免使用 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。
@available
来使应用程序兼容较低版本的iOS,并在较低版本中“隐藏”使用苹果登录的代码。你的第二个问题是在Xcode 10中编译你的项目;这是不可能的,因为你的项目将使用iOS 13 SDK. - Paulw11