На этой неделе я обнаружил проблему в браузере для iOS под названием Brave. Проблема содержала 4 предупреждения, которые нужно было исправить, и я попросил поработать над этим. Вот список предупреждений:
- «automaticallyAdjustsScrollViewInsets» устарела в iOS 11.0: вместо этого используйте UIScrollView contentInsetAdjustmentBehavior.
- «touchIDNotAvailable» устарело в iOS 11.0: используйте LAErrorBiometryNotAvailable.
- Функция touchIDNotEnrolled устарела в iOS 11.0: используйте LAErrorBiometryNotEnrolled.
- Функция touchIDLockout устарела в iOS 11.0: используйте LAErrorBiometryLockout.
После того, как мне разрешили работать над ним, я настроил проект на своем локальном компьютере, установил зависимости с помощью Carthage и создал приложение, чтобы убедиться, что все работает.
Затем я нашел в коде предупреждения, которые мне нужно было исправить, проанализировал код и начал исследовать, как их исправить.
«automaticallyAdjustsScrollViewInsets» устарела в iOS 11.0: вместо этого используйте UIScrollView contentInsetAdjustmentBehavior.
Вот определение automaticallyAdjustsScrollViewInsets:
Логическое значение, указывающее, должен ли контроллер представления автоматически настраивать свои вставки представления прокрутки. (Документация Apple)
Однако он устарел на устройствах iOS 11+, поэтому вместо него следует использовать UIScrollView.ContentInsetAdjustmentBehavior
.
Это свойство указывает, как вставки безопасной области используются для изменения области содержимого представления прокрутки. Значение по умолчанию для этого свойства —
UIScrollView.ContentInsetAdjustmentBehavior.automatic
. (Документация Apple)
Было два ViewController, которые использовали automaticallyAdjustsScrollViewInsets, и вот как это использовалось:
automaticallyAdjustsScrollViewInsets = false
и я изменил его на:
if #available(iOS 11.0, *) { scrollView?.contentInsetAdjustmentBehavior = .never } else { automaticallyAdjustsScrollViewInsets = false }
Исправлено ✅
предупреждения об устаревании touchID
Если вы используете платформу LocalAuthentication, разработчикам iOS не следует использовать какие-либо коды ошибок touchID с момента выпуска iOS 11, поскольку теперь в iOS есть 2 способа аутентификации: TouchID и FaceID. , и неэффективно иметь разные ошибки для сбоев TouchID/FaceID.
Первое, что меня беспокоило в этих предупреждениях, это то, что в этих предупреждениях не было указано ни одной строки кода или файла. Я пытался найти упоминания touchIDNotAvailable
, touchIDNotEnrolled
и touchIDLockout
в репозитории, однако не нашелиспользования этих свойств. в любом месте кода!
Единственная связанная вещь, которую я нашел в коде, была:
DispatchQueue.main.async { switch code { case .userFallback, .biometryNotEnrolled, .biometryNotAvailable, .biometryLockout: fallback?() case .userCancel: cancel?() default: cancel?() } }
где code
является экземпляром LAError.Code
И это смутило меня, потому что он использует LAErrorBiometryNotAvailable
, LAErrorBiometryNotEnrolled
,иLAErrorBiometryLockout
, как это требовалось в предупреждении.
Я провел исследование этих предупреждений и выяснил, что на самом деле это ошибка компилятора Swift! Поэтому я сообщил об этом участникам проекта и создал Pull Request со своим исправлением для первого предупреждения.
Вот мои результаты за эту неделю:
- Исправлено предупреждение об устаревании iOS 11:
‘automaticallyAdjustsScrollViewInsets’ was deprecated in iOS 11.0: Use UIScrollView’s contentInsetAdjustmentBehavior instead.
- Исследовал предупреждения об устаревании TouchID iOS 11 и узнал, что в компиляторе Swift есть ошибка.
- Общение с мейнтейнерами и участниками проекта