Я только начал использовать CryptoKit для замены старой библиотеки. Мой план состоял в том, чтобы заменить его на телефонах с iOS 13 и выше, и все еще использовать старую библиотеку на iOS версий ниже 13. Однако я не могу заставить приложение даже запускаться в iOS 12.4 без сбоев. Я удалил все остальное и только по этим простым строкам
if #available(iOS 13.0, *) {
let nonce = try? AES.GCM.Nonce(data: iv)
}
Я думал, что #available
использовался, чтобы убедиться, что он пропущен, если условие не выполнено.
Самое странное, что приложение аварийно завершает работу, и я никогда не вызываю сетку, содержащую эти строки, просто наличие их где-то в приложении приводит к сбою.
Я также импортировал CryptoKit сверху (с * 1009 и без * 1009). *) и я добавил @available(iOS 13.0, *)
к классу.
Может кто-нибудь сказать мне правильный способ «исключить» код или любой другой правильный путь для более низких версий iOS. Я предполагаю, что должна быть возможность использовать специфическую для iOS 13 функциональность при сохранении обратной совместимости с помощью «старых» методов?
Кроме того, я использую Xcode 11, но я предполагаю, что это может быть очевидно.
И ошибка, которую я получаю:
dyld: Library not loaded: /System/Library/Frameworks/CryptoKit.framework/CryptoKit
РЕДАКТИРОВАТЬ: Теперь я также попытался обойти это весь класс (включая импорт)
#if canImport(CryptoKit)
#endif
Кроме того, я заметил, что эта строка может существовать без сбоя приложения:
let key = SymmetricKey(data: Data())
И симметричный ключ также является частью CryptoKit
РЕДАКТИРОВАТЬ 2: Я понял, что слабыйсвязывание решило бы проблему. Я попытался использовать один из других новых (iOS 13) фреймворков, CryptoTokenKit, и у меня возникла та же проблема. Но здесь я мог бы добавить фреймворк и установить ссылку на опциональный, что решило проблему. Однако при добавлении фреймворков в приложение CryptoKit по какой-то причине недоступен.