I’m following Apple’s guide for creating a Safari App Extension. In short, I’ve:
- Created a new Xcode project (in Xcode 8.1, on macOS 10.12 Sierra) using the Cocoa Application template
- Created a new target in the app using the Safari Extension template
- Run the app once, to make sure the Safari App extension is built
- Selected the “Allow Unsigned Extensions” option in Safari’s Develop menu
- Enabled the extension in Safari’s Extensions preference pane
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.)