I’m following Apple’s guide for creating a Safari App Extension. In short, I’ve:
The extension’s toolbar button appears in Safari. Apple’s guide says I should see the NSLog message in the console when I click the toolbar button, but I’m not seeing anything.
I’ve edited SafariExtensionHandler.swift to send a message to the script injected by the extension:
override func toolbarItemClicked(in window: SFSafariWindow) {
// This method will be called when your toolbar item is clicked.
NSLog("The extension's toolbar item was clicked")
window.getActiveTab(completionHandler: { (activeTab) in
activeTab?.getActivePage(completionHandler: { (activePage) in
activePage?.dispatchMessageToScript(withName: "toolbarItemClicked", userInfo: nil)
})
})
}
And I’ve edited the injected script (script.js) to alert that message:
safari.self.addEventListener("message", function (event) {
alert("We got a message from the extension! - " + event.name + ": " + event.message);
});
The alert appears when I click the toolbar button (when I’m on a page on webkit.org, as I’ve left in the default SFSafariWebsiteAccess settings), so the extension is working and registering the click. But I don’t see the NSLog in Xcode’s console, or the Console app.
I’m a real Xcode newbie, so I’m sure I’m missing something obvious — but why isn’t the NSLog message appearing in the console?
(I don’t run as an administrator, in case that makes a difference — although I did enter the administrator account details whenever I was asked to whilst running Xcode for the first time. I do notice that in the Console app, when I select system.log, I just see a message saying “Unable to read the file”. This might be related to not running as an administrator.)
Open Safari and choose Safari > Preferences. Select the Extensions tab, find your extension, and select its checkbox. If you're developing your extension and it isn't visible in Safari Preferences, you need to allow unsigned extensions in Safari.
In the Safari app on your Mac, click the extension's button in the toolbar. Choose how much access the extension has. Extensions may access the content of the web pages you visit. Check which extensions you have installed and make sure you're familiar with what they do.
Enable your app extension in SafariOpen Safari and choose Safari > Preferences. Select the Advanced tab, then select the “Show Develop menu in menu bar” checkbox. Choose Develop > Allow Unsigned Extensions, enter your password, and click OK.
Switch to the scheme for your extension (schemes are just to the right of the Run and Stop buttons), and then hit Run.
A Popup will ask you to choose an app to run: select Safari.
A new instance of Safari should open and you'll start seeing log output in the Xcode console.
If you haven't signed your app and extension however, Safari will reject your extension and the console will show a message like
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
In this case you just need to re-check "Allow Unsigned Extensions" in Safari's Developer menu and enable the extension in the Preferences pane, after which you should be good to go.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With