На этой неделе я обнаружил проблему в браузере для 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 есть ошибка.
  • Общение с мейнтейнерами и участниками проекта