Отключение расширения автозаполнения на iPad приводит к тому, что хост-приложение не отвечает

Я разрабатываю расширение автозаполнения (AppEx) и наткнулся на следующую ошибку, которая возникает только на iPad.

Эта ошибка воспроизводится только на устройстве (не воспроизводится на симуляторе) и может наблюдаться, например, в приложении Dashlane.

Действия по воспроизведению:

  1. Включите автозаполнение для соответствующего приложения в настройках iOS -> Пароли -> Автозаполнение пароля.
  2. Откройте приложение, например LinkedIn или Netflix.
  3. Откройте расширение приложения для автозаполнения (не используйте QuickType, если это предлагается)
  4. Попробуйте закрыть модальное представление автозаполнения, нажав за его пределами (не закрывайте кнопкой «Отмена»).
  5. Теперь хост-приложение (LinkedIn или Netflix) перестает отвечать на запросы.

Полное демонстрационное видео выпуска. После закрытия представления автозаполнения невозможно активировать ни одно из текстовых полей в приложении LinkedIn:

Демонстрационное видео проблемы с автозаполнением

Возможные решения

Я обнаружил, что основная причина того, что приложение не отвечает, заключается в том, что система по-прежнему предполагает, что «управление» связано с расширением автозаполнения, а не с хост-приложением, даже когда представление автозаполнения закрыто.

Я понял это, запустив вызов метода через некоторое время после представления контроллера автозаполнения, так что вся последовательность стала следующей (тайм-коды просто иллюстрируют порядок и скорость, с которой происходят события):

  1. Присутствует контроллер автозаполнения (0:00)
  2. Нажмите за пределами контроллера автозаполнения (0:01)
  3. Вызов метода (0:02)

Вызов метода был одним из таких (может работать любой из них):

          @objc private func close(_ sender: AnyObject?) {
        self.extensionContext.completeExtensionConfigurationRequest()
    }
    
    @objc private func cancel(_ sender: AnyObject?) {
        self.extensionContext.cancelRequest(withError: NSError(domain: ASExtensionErrorDomain, code: ASExtensionError.userCanceled.rawValue))
    }

Итак, еслиextensionContextполучает информацию о том, что пользователь отменил запрос автозаполнения, в этом случае система правильно возвращает управление хост-приложению (например, LinkedIn).

Вопрос в том, как я могу наблюдать за событием «нажатие вне модального экрана» и соответственно вызывать один из методов?

0 ответов

Другие вопросы по тегам