スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Mountain LionとGrowl、通知センターのあれこれ

Mountain Lionがリリースされて数日たったが、その目玉機能はiOSとの連携が強化されたiCloudと、新たにiOSからやってきた通知センターではないかと思います。
このうち、通知センターについてはこれまで人気のあったツールであるGrowlとの住み分け、連携がどうなるかが日曜デベロッパーにとっての興味のあるところです。というのも、Growlは簡単に通知を表示するソフトとして普及している一方で、サードパーティーのソフトであるが故にユーザーにインストールしてもらう必要があり、なんとApp Storeでは有料(現在170円)になってしまったからです。その一方で、通知センターは新しいOSに標準搭載されている機能ですが、日曜プログラマーにとってはデベロッパー登録をはじめとして敷居が高いのです。
Growlは現在バージョン1.4ですが、2.0では受け取ったイベントを通知センターに流して連携するようになるとされています。それを待たずして、通知センターをサードパーティーのソフトが簡単に利用できるようにするソフトがいくつか登場しています。
拙作の MPEG Exporter TNG(以下MET)などのソフトウエアもGrowlを利用している関係上、それらが利用できないかどうかは非常に興味のあるところです。

Hiss
Hissは、Growlが受け取るはずだったイベントを通知センターに流して表示するソフトのこと。確かに多くのソフトウエアではそのように動作しますが、AppleScriptからの利用は難しそうです。METでは起動中のGrowlを検索してスクリプトからイベントを送るのですが、Hissは明示的に動作するアプリケーションではなく、AppleScript的なイベントも受け取るようにできていないからです。
よって、現在の仕様のHissはAppleScriptから利用するのは困難です。METは、Growlが終了していてHissだけが起動している環境では、Growlがインストールされていないのと同じように振る舞います。

terminal-notifier
簡単に通知センターを利用できるように作成されたツールです。Growlとはまったく関係なく動作しますが、METのプラグインがこのツールに対応すれば、通知センターを利用できるはずです。その実態はコマンドラインツールであり、一定の書式で呼び出すことで通知センターに表示を出すことができます。実際、この機能はうまくAppleScriptからも利用できます。ただし、なぜかこのアプリケーションのダウンロードされた位置をAppleScriptから呼び出せません。通常、アプリのIDのようなものでその場所を特定できるので、そこからパッケージ内のコマンドラインへのパスも生成することができますが、terminal-notifierの起動処理の方法が特殊なのか、エラーが出るのです。
(追記:この問題は解決しました。コメント欄に解決方法を記載しました。)

まだMountain Lionがリリースされて数日なので、これからも新しい動きがあるでしょうから、それを見極めてMETで対応しようと思います。
本命は、Growl 2です。
もしこの問題が解決すれば、以下のような簡単なスクリプトで対応が可能なはずです。

on terminal_notifier(msg)
set thePath to quoted form of ((POSIX path of (path to (application id "nl.superalloy.oss.terminal-notifier") as string)) & "Contents/MacOS/terminal-notifier") --ここがエラーになる
set theInfo to (info for (path to current application))
set theName to quoted form of (displayed name of theInfo)
set theID to quoted form of (bundle identifier of theInfo)
set msg to (thePath & " -message " & (quoted form of msg) & " -title " & theName & " -activate " & theID) as string
do shell script msg
end terminal_notifier


なお、terminal-notifierのアプリ本体がアプリケーションフォルダにそのままの名称でインストールされているのなら

on terminal_notifier(msg)
set thePath to quoted form of ((POSIX path of (path to application folder as string)) & "terminal-notifier.app/Contents/MacOS/terminal-notifier") --ここが保証されない
set theInfo to (info for (path to current application))
set theName to quoted form of (displayed name of theInfo)
set theID to quoted form of (bundle identifier of theInfo)
set msg to (thePath & " -message " & (quoted form of msg) & " -title " & theName & " -activate " & theID) as string
do shell script msg
end terminal_notifier


のようなスクリプトでも良いのですが、terminal-notifierは現在のところApp Storeで配布されているわけではないので、各ユーザーがどこにどのように保存しているかは保証されませんので、この方法は直ちには使えません。通常はダウンロードフォルダにでも入ったままでしょう。
なお、アップルに登録したデベロッパーは、Code signを用いてこのterminal-notifierを自作のアプリ内に組み込むことができるそうです(MITライセンス)。その場合、通知センターそのものに自分のアプリのアイコンを表示させることが可能です。その場合も、上記のスクリプトを一部書き換えるだけでいいはずです。
(追記:コメント欄に解決方法を記載しました。)
テーマ: Mac | ジャンル: コンピュータ

コメント

改善された動作するスクリプト

fixdotさん (http://blog.macorz.com/) やterminal-notifierの作者さんとのdiscussionから、次のようなスクリプトがほぼ完全動作するらしいということになりました。

on terminal_notifier(msg)
tell application "Finder"
set aPath to (application file id "nl.superalloy.oss.terminal-notifier") as string
set thePath to quoted form of ((POSIX path of aPath) & "/Contents/MacOS/terminal-notifier")
end tell
set theInfo to (info for (path to current application))
set theName to quoted form of (displayed name of theInfo)
set theID to quoted form of (bundle identifier of theInfo)
set msg to (thePath & " -message " & (quoted form of msg) & " -title " & theName & " -activate " & theID) as string
do shell script msg
end terminal_notifier

  • 2012/07/31 (Tue) 08:22
  • 管理人 #-
  • URL

コメントの投稿


管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。