“使用 Apple 登录”是不是允许应用向后兼容 iOS 12 及更低版本?

Posted

技术标签:

【中文标题】“使用 Apple 登录”是不是允许应用向后兼容 iOS 12 及更低版本?【英文标题】:Will "Sign in With Apple" allow apps to be backward compatible with iOS 12 and lower?“使用 Apple 登录”是否允许应用向后兼容 iOS 12 及更低版本? 【发布时间】:2019-09-13 18:04:39 【问题描述】:

实现新的Sign in With Apple 功能是否会使应用与 ios 12 及更低版本不兼容,类似于 SwiftUI?是否可以在 XCode 10 之类的东西上编译一个必须 import AuthenticationServices 的应用程序?

【问题讨论】:

你真的在这里问两件事。您可以使用 @available 使应用程序与较低版本的 iOS 兼容,以在较低版本上“隐藏”使用 Apple 代码登录。您的第二个问题是在 Xcode 10 中编译您的项目;这是不可能的,因为您将在项目中使用 iOS 13 SDK @Paulw11 我可以支持用苹果登录以获得最低的模态 “最低型号”是什么意思?如果您指的是 iOS 版本,则无法在 iOS 12 之前支持它,但它适用于任何运行 iOS 12 或更高版本的 iOS 设备。 【参考方案1】:

使用 Apple 登录本身不会使整个应用程序与 iOS 12 及更早版本不兼容(SwiftUI 也是如此)。

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

如果您需要在早期版本的 iOS(以及非 iOS 平台)上支持 Sign in with Apple,如 Apple Staff 的mentioned,您应该使用Sign in with Apple JS 框架。

第二个问题,正如@Paulw11 提到的,答案是,因为 Xcode 10 不包含 iOS 13 SDK。

【讨论】:

感谢 Apple 强迫我们使用 iOS 13 的专属功能。因此迫使我们使用 Xcode 11 并使用所有那些丑陋的可用注释和检查来编写讨厌的代码。 我需要一个完整的例子来说明如何使用苹果 js 为 ios 12 实现签名。 @Eugene Berdnikov 所以在 iOS 中,没有选项支持使用较低 iOS 版本的应用程序登录。我说的对吗? @sejn 没有选项支持在 iOS 12 及更早版本上使用本机 iOS SDK(身份验证服务框架)通过 Apple 登录【参考方案2】:

如果您想要向后兼容,我建议避免使用 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) 进行条件导入并在 Other Linker Flags 中设置 -weak_framework CryptoKit 但仍然崩溃适用于 iOS12 及以下。到目前为止,使其工作的唯一方法是避免导入 CryptoKit。

【讨论】:

您能否确认一下,Apple 登录支持是否适用于最低 iOS 版本?

以上是关于“使用 Apple 登录”是不是允许应用向后兼容 iOS 12 及更低版本?的主要内容,如果未能解决你的问题,请参考以下文章

向后兼容在 MobileFirst 8.0 服务器中运行的 7.1 应用程序

Xcode 5 Asset Catalog 是不是向后兼容 pre-iOS 7?

当列更改数据库中的名称时,如何扩展或更新解析器以允许向后兼容

Apple iOS 是不是支持向后兼容?

Android Studio 上的向后兼容性 (AppCompat)

VCRedist 2015 Update 1 是不是向后兼容?