Здравствуйте, разработчики Swift/iOS!
В настоящее время я работаю над расширенным проектом AI Keyboard (похожим на Grammarly) и заметил некоторое поведение, которое, похоже, бросает вызов известным ограничениям песочницы расширения клавиатуры iOS. Я пытаюсь понять, как этого удалось добиться.
1. Протестированные сценарии (наблюдаемое поведение)
Я провел два конкретных теста, которые показали, что Grammarly Keyboard получает доступ к данным, выходящим за рамки стандартного TextDocumentProxy:
- Сценарий 1: Полнотекстовое распознавание
- I набрал предложение с помощью Grammarly Keyboard (например, «Я мальчик»).
- Я переключился на родную клавиатуру iOS и набрал другое предложение с новой строки (например, «Ты девочка»).
- Когда я обратно переключился на Grammarly Keyboard, она смогла читать и выполнять проверку грамматики на весь текст в TextView (как «Я мальчик», так и «Ты девочка»).
- Сценарий 2: Детальное управление курсором
Клавиатура Grammarly позволяет пользователю нажмите и удерживайте клавишу пробела и проведите пальцем по области клавиатуры, чтобы переместить курсор в любое желаемое положение во всем текстовом поле.
2. Ограничение политики песочницы iOS
В соответствии с моделью безопасности Apple для расширений клавиатуры:
- Расширения предназначены для запуска в отдельном контейнере, что серьезно ограничивает их доступ к данным ведущего приложения или иерархии представлений.
- Стандартный доступ через TextDocumentProxy обычно ограничивается непосредственный окружающий текст (и documentContextAfterInput) и стандартные команды манипулирования текстом.
Код: Выделить всё
documentContextBeforeInput - Непосредственное чтение полного содержимого TextView или вычисление положения курсора на основе координат экрана обычно невозможно без нарушения изолированной программной среды.
Учитывая эти ограничения и наблюдаемое поведение, я хотел бы спросить сообщество:
Как, по вашему мнению, Grammarly (или аналогичным сложным сторонним клавиатурам) удается обойти эти ограничения на iOS?
Существуют ли какие-либо известные, но недокументированные методы или безопасные методы обходные пути для:
- A. Безопасного доступа ко всему содержимому текущего поля ввода?
- B. Получения управления на основе координат для точного позиционирования курсора в любом месте текста?
Спасибо за ваш опыт!
Подробнее здесь: https://stackoverflow.com/questions/797 ... ictions-fo
Мобильная версия