Как разместить расширение iOS8 Action в стороннем веб-браузере

Предположим, что я реализовал веб-браузер iOS, способный к двунаправленной связи с Javascript в веб-просмотре. Что мне нужно сделать, если я хочу, чтобы любые расширения действий iOS8 работали в нем, как в Mobile Safari? Нет никакой проблемы в том, чтобы указать веб-просмотру выполнять функции над обязательным объектом ExtensionPreprocessingJS и получить результат обратного вызова. Но как мне вообще получить этот NSExtensionJavaScriptPreprocessingFile ? Я не нашел ни одного API iOS8, который позволил бы мне перечислить подходящие расширения приложений. Тем меньше они получают свои Info.plist и фактически получают файл из содержимого пакета расширения приложения.

Благодаря моему тестовому расширению Action я знаю, что все extensionContext.inputItems, когда-либо переданные расширению, являются только и только тем, что документ расширения Apple Action говорит: один NSItemProvider под NSExtensionItemAttachmentsKey, предоставляя один kUTTypePropertyList с тем, что уже было возвращено выполнением JS . Другими словами, JS должен быть известен и выполнен еще до вызова beginRequestWithExtensionContext.

Я что-то упустил или сторонние приложения действительно не могут делать то же самое, что и Mobile Safari? Это имело бы смысл с точки зрения безопасности доступа к приложениям, но тем не менее… ключевые слова здесь — «модульность» и «расширяемость», верно? Является ли Mobile Safari более равным животным, чем животные ванильного пользовательского интерфейса / WKWebView? Я имею в виду, что WKWebView действительно имеет некоторые новые удобные функции JS (evaluate обработчик завершения, WKUserContentController), но как я могу связать его с общим расширением Action?


person Pavel Zdenek    schedule 01.12.2014    source источник


Ответы (1)


Так что, скорее всего, нельзя. Расширение Action может иметь NSExtensionActivationSupportsWebPageWithMaxCount правило активации, которое заявляют некоторые источники, необходимо, когда вы хотите коснуться веб-страниц своим расширением. Мне это было не нужно, достаточно объявить NSExtensionJavaScriptPreprocessingFile. В любом случае никто не знает, что вам нужно было бы поместить в activityItems контроллера на стороне хоста расширения, тем более что UTI, с которым он должен быть отнесен. я пытался

  • размещение ссылки на веб-просмотр непосредственно в массиве activityItems. Это хорошо работает для «примитивных» типов, таких как NSString или NSURL, несмотря на отсутствие UTI. Но для WKWebView это приводит к предупреждению во время выполнения Unknown activity items supplied.
  • создание NSItemProvider со ссылкой, угадывание UTI с наиболее общим применимым kUTTypeContent. XCode протестует против метода уже с семантическим предупреждением, потому что WKWebView не реализует требуемый протокол <NSSecureCopying>. Неудивительно, ничего не делает.

И последнее, но не менее важное: я нашел запрос функции Chromium ровно на чего я хочу добиться. Там разработчик 1Password и основной разработчик LastPass пришли к выводу, что уровень интеграции расширений приложений, как в Mobile Safari, невозможен в сторонних веб-браузерах iOS.

облом.

Если кто-то хочет продолжить попытки, я оснастил свою игровую площадку веб-просмотра iOS кодом активности. Не стесняйтесь раскошелиться.

person Pavel Zdenek    schedule 03.12.2014