Safari Extension Companion всегда имеет значение null

Я разрабатываю расширение Safari для своего локального приложения Mac, я хочу использовать SafariExtension Companion для связи между ними.

Однако в моем расширении Global.html всякий раз, когда я пытаюсь получить safari.extension.companion, оно всегда равно null. Я неправильно настроил расширение?

Кроме того, согласно руководству, я могу использовать safari.extension.addEventListener для прослушивания сообщения из локального приложения, однако, когда я отлаживаю расширение, оно подсказывает мне, что safari.extension.addEventListener не определен, почему так?

Ответ: safari.application.addEventListener правильный, Apple пишет неверный документ.

Я устанавливаю точный идентификатор комплекта компаньона в Extension Builder в качестве идентификатора, который я установил в Xcode для компаньона сафари в соответствии с руководством. Есть ли что-то еще, что мне не хватает? Пожалуйста помоги!!!


person Terence    schedule 08.12.2015    source источник


Ответы (1)


Сопутствующее расширение Safari — это тип расширения приложения MacOS X. Они поставляются как часть пакетов приложений. Когда приложение установлено (пакет копируется в Приложения), Safari подхватывает расширение.

Во-первых, вам нужен проект Xcode с целью типа «Приложение Cocoa» («Инструмент командной строки» не подойдет). Затем вам нужно создать цель типа «Компаньон расширения Safari», и у вас есть возможность указать основное приложение при его создании.

Когда вы создаете и архивируете приложение, а затем экспортируете архив, вы получаете возможность добавить расширение в комплект приложения. Затем установите пакет приложений.

Убедитесь, что идентификатор пакета расширения соответствует настройке в Safari Extension Builder. Кроме того, убедитесь, что приложение и расширение Safari подписаны, а ключи имеют совпадающие идентификаторы разработчика. Для типа сертификата в MacOS X выберите «Идентификатор разработчика» — сначала при запросе, затем при экспорте пакета из архива сборки.

РЕДАКТИРОВАТЬ: когда родной компаньон дает сбой, Safari тихо отключает его. Если вы удалите и переустановите пакет приложений, а также перезапустите Safari, он снова полюбит компаньона.

person Seva Alekseyev    schedule 02.02.2016
comment
Спасибо за ответ. Я сделал все вещи, но это все еще не работает. Что я сделал: 1. Я импортировал сертификат Safari в расширение. 2. Подпишите приложение и компаньон сертификатом разработки для Mac с тем же префиксом. 3. Заархивируйте его и экспортируйте как приложение, подписанное для разработки, а затем скопируйте пакет в папку приложения. - person Terence; 03.02.2016
comment
Нативная часть тоже должна быть подписана. Я не уверен, нужно ли подписывать основное приложение, расширение или и то, и другое, поэтому я подписал и то, и другое при создании и при экспорте. Сертификаты для Safari и MacOS X физически различны, но в них указан один и тот же идентификатор разработчика; по моему опыту этого достаточно. - person Seva Alekseyev; 03.02.2016
comment
Должен ли он быть подписан сертификатом распространения Mac? У меня есть только сертификат разработки. - person Terence; 03.02.2016
comment
При запросе сертификата MacOS X на сайте Apple я указал идентификатор разработчика в качестве типа. Несмотря на это, это дистрибьюторский (то есть производственный) сертификат. При экспорте пакета из архива я бы также указал Экспортировать приложение, подписанное ID разработчика. - person Seva Alekseyev; 03.02.2016
comment
Это работает какое-то время... Когда Safari падает, и я открываю его снова, он не работает. Из журнала я не вижу ничего особенного, кроме одного журнала. В случае успеха появляется сообщение pkd: enable pid=xxxxx for plugin-in (имя плагина, адрес и путь). И теперь это сообщение больше никогда не появляется. Подозреваю, что если это связано с какими-то настройками в Safari? - person Terence; 03.02.2016
comment
Заметил это. Похоже, что после сбоя плагина Safari незаметно отключает его. Если вы удалите и переустановите пакет приложений, а также перезапустите Safari, он снова полюбит плагин. - person Seva Alekseyev; 03.02.2016
comment
Я переустановил его, не перезапуская Safari, вот почему.... Спасибо. Проблема решена! - person Terence; 03.02.2016