首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS版本低于13的手机上的CryptoKit崩溃应用程序

iOS版本低于13的手机上的CryptoKit崩溃应用程序
EN

Stack Overflow用户
提问于 2019-10-08 22:00:38
回答 1查看 2.4K关注 0票数 11

我刚刚开始使用CryptoKit来替换旧的库。我的计划是在运行iOS 13和更高版本的手机上更换它,在iOS 13以下的版本上仍然使用旧的库。然而,即使在iOS 12.4启动时,我也无法在不崩溃的情况下启动该应用程序。我删除了所有其他内容,只使用这些简单的代码行

代码语言:javascript
复制
if #available(iOS 13.0, *) {
    let nonce = try? AES.GCM.Nonce(data: iv)
}

我认为#available是用来确保在条件不满足时跳过的。

更奇怪的是,如果我没有调用包含这些线条的网格,应用程序就会崩溃,只是将它们放在应用程序中的某个地方就会导致崩溃。

我还在顶部导入了CryptoKit (使用和不使用if canImport(CryptoKit)),并将@available(iOS 13.0, *)添加到类中。

谁能告诉我,对于较低的iOS版本,“排除”代码的正确方法是什么?我猜一定可以使用iOS 13特定的功能,同时仍然通过“旧的”方法保持向后兼容?

另外,我使用的是Xcode11,但我想这可能是显而易见的。

我得到的错误是:

代码语言:javascript
复制
dyld: Library not loaded: /System/Library/Frameworks/CryptoKit.framework/CryptoKit

编辑:现在我也试着把它放在整个类中(包括导入)

代码语言:javascript
复制
#if canImport(CryptoKit)
#endif

而且,我注意到这一行可以存在而不会导致应用程序崩溃:

代码语言:javascript
复制
let key = SymmetricKey(data: Data())

对称密钥也是CryptoKit的一部分

编辑2:我已经知道弱链接可以解决这个问题。我尝试使用另一个新的(iOS 13)框架CryptoTokenKit,也遇到了同样的问题。但在这里,我可以添加框架并将链接设置为optional,这样就解决了问题。然而,当向应用程序添加框架时,由于某些原因,CryptoKit不可用。

EN

回答 1

Stack Overflow用户

发布于 2019-11-16 20:17:37

正如here所指出的,Xcode没有正确地将CryptKit添加到链接框架列表中。要解决此问题,必须在应用程序的目标中手动添加-weak_framework标志。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58287922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档