Safari App Extension を作成するための Apple のガイドに従っています。要するに、私は:
- Cocoa アプリケーション テンプレートを使用して、新しい Xcode プロジェクトを作成しました (macOS 10.12 Sierra の Xcode 8.1 で)。
- Safari 拡張機能テンプレートを使用して、アプリで新しいターゲットを作成しました
- アプリを 1 回実行して、Safari アプリ拡張機能がビルドされていることを確認します。
- Safari の [開発] メニューで [署名されていない拡張機能を許可する] オプションを選択した
- Safari の [拡張機能] 設定ペインで拡張機能を有効にしました
拡張機能のツールバー ボタンが Safari に表示されます。Apple のガイドによると、ツールバー ボタンをクリックするとコンソールに NSLog メッセージが表示されるはずですが、何も表示されません。
SafariExtensionHandler.swift を編集して、拡張機能によって挿入されたスクリプトにメッセージを送信しました。
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)
})
})
}
そして、挿入されたスクリプト (script.js) を編集して、そのメッセージを警告しました。
safari.self.addEventListener("message", function (event) {
alert("We got a message from the extension! - " + event.name + ": " + event.message);
});
ツールバーのボタンをクリックすると (デフォルトの SFSafariWebsiteAccess 設定のままにしたので、webkit.org のページにいるときに) アラートが表示されるため、拡張機能が機能し、クリックが登録されます。しかし、Xcode のコンソールまたはコンソール アプリに NSLog が表示されません。
私は本当の Xcode の初心者なので、明らかな何かが欠けていると確信しています — しかし、コンソールに NSLog メッセージが表示されないのはなぜですか?
(違いが生じる場合に備えて、私は管理者として実行しません。ただし、Xcode を初めて実行するときに求められたときは常に管理者アカウントの詳細を入力しました。コンソール アプリで、 system.log に「ファイルを読み取れません」というメッセージが表示されます。これは、管理者として実行していないことに関連している可能性があります。)