Почему arent расширяет приложение Safari для приложений NSLog, появляющееся на консоли в Xcode?
Im после Руководство по использованию Apple Safari для приложений. Короче говоря, Ive:
- Создал новый проект Xcode (в Xcode 8.1, на macOS 10.12 Sierra) с использованием шаблона Cocoa
- Создана новая цель в приложении с использованием шаблона расширения Safari
- Запустите приложение один раз, чтобы убедиться, что расширение приложения Safari создано
- Выбрал опцию "Разрешить неподписанные расширения" в меню "Настройка Safari"
- Включить расширение в панели предпочтений Safaris Extensions
В Safari появится кнопка панели расширения. Ярлык говорит, что я должен увидеть сообщение NSLog в консоли, когда я нажимаю кнопку на панели инструментов, но я ничего не вижу.
Ive отредактировал SafariExtensionHandler.swift, чтобы отправить сообщение в script, введенное расширением:
override func toolbarItemClicked(in window: SFSafariWindow) {
// This method will be called when your toolbar item is clicked.
NSLog("The extension toolbar item was clicked")
window.getActiveTab(completionHandler: { (activeTab) in
activeTab?.getActivePage(completionHandler: { (activePage) in
activePage?.dispatchMessageToScript(withName: "toolbarItemClicked", userInfo: nil)
})
})
}
И Ive отредактировал введенный script (script.js), чтобы предупредить это сообщение:
safari.self.addEventListener("message", function (event) {
alert("We got a message from the extension! - " + event.name + ": " + event.message);
});
Предупреждение появляется, когда я нажимаю кнопку на панели инструментов (когда Im на странице на webkit.org, так как Ive оставил в настройках SFSafariWebsiteAccess по умолчанию), поэтому расширение работает и регистрирует щелчок. Но я не вижу NSLog в консоли Xcodes или в приложении консоли.
Im реальный новичок Xcode, поэтому Im Im Im пропустил что-то очевидное - но почему сообщение NSLog не появляется на консоли?
(Я не запускаюсь как администратор, в случае, если это имеет значение, хотя я и вводил данные учетной записи администратора каждый раз, когда меня просили при запуске Xcode в первый раз. Я замечаю, что в приложении консоли, когда я выберите system.log, я просто вижу сообщение "Невозможно прочитать файл". Этот может быть связан с тем, что он не работает как администратор).
Ответы
Ответ 1
Перейдите к схеме для вашего расширения (схемы находятся справа от кнопок "Выполнить" и "Стоп" ), а затем нажмите "Выполнить".
Всплывающее окно попросит вас выбрать приложение для запуска: выберите Safari.
Новый экземпляр Safari должен быть открыт, и вы начнете видеть выход журнала в консоли Xcode.
Если вы еще не подписали свое приложение и расширение, Safari отклонит ваше расширение, и на консоли появится сообщение типа
2017-04-12 13:00:44.799843-0400 Safari[37188:2787364] [Extensions]
Computing the code signing dictionary failed for extension with
identifier com.your.app.extension
2017-04-12 13:00:44.799865-0400 Safari[37188:2787364] [Extensions]
Disabling and blocking extension with identifier:
com.your.app.extension
В этом случае вам просто нужно переустановить "Разрешить неподписанные расширения" в меню "Разработчик Safari" и включить расширение в панели "Настройки", после чего вам будет хорошо идти.
Ответ 2
Бета-версия Xcode 10.2 поставляется с новым методом для достижения этой цели: SFSafariToolbarItem.showPopover()
Ссылка: https://developer.apple.com/documentation/safariservices/sfsafaritoolbaritem?changes=latest_minor