QSTwitter 1.7

September 30th, 2009  |  Published in Uncategorized  |  2 Comments

Quicksilver の Twitter plugin である QSTwitter の最新版 1.7 をリリースしました。

1.6 での変更は、 following と follower を間違って取得していた問題の修正で、 1.7 での変更は Growl サポートを入れたことです。

Growl をアプリでサポートするのはわりとかんたんで、

  1. .plist を書く
  2. 通知 API を呼ぶ

たったこれだけで OK 。なのだけれど、 QSTwitter みたいなプラグインで Growl を使うにはそこまでかんたんでなく、以下のような手順になります。

  1. .plist を書くかわりに delegate を実装
  2. 通知 API を呼ぶ
  3. Framework のライブラリパスを から に変える

3つめで1時間ほどハマってしまいましたが、 install_name_tool というものを使えば OK でした。

% install_name_tool -change \
    '/../Frameworks/Growl.framework/Versions/A/Growl' \
    '/../Frameworks/Growl.framework/Versions/A/Growl

プラグイン (bundle) は、アプリケーション本体のパスと別のところにあるため、 ではまずいわけですね。また、バイナリ配布されている Growl.SDK は でビルドされているため、 を指定してやらないとプラグインからはそのままでは組み込めない、と。

参考


Tags: , ,
  • satoko

    リリース乙です!

    Macアプリ?作成は全くの初心者なのですが、3.のFrameworkのライブラリパスというのはTargetの”Library Search Path”でしょうか、それともCopy Files Build PhaseのDestinationでしょうか??その辺りよくわかってないので、教えて頂けるとありがたいです!

  • https://deadbeaf.org/ mootoh

    んとですね、 Xcode で指定するとこじゃないのですねこれが。

    ターゲットのバイナリを生成する際に、 Framework をリンクするわけですが、Framework をダイナミックリンクでくっつけるときは、その Framework へのパスを実行時に教えてあげることになります。

    それで、何もしないと


    otool -L build/Release/TwitterPlugin.qsplugin/Contents/MacOS/TwitterPlugin
    build/Release/TwitterPlugin.qsplugin/Contents/MacOS/TwitterPlugin:
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
    /../Frameworks/QSCore.framework/Versions/A/QSCore (compatibility version 1.0.0, current version 1.0.0)
    /../Frameworks/QSFoundation.framework/Versions/A/QSFoundation (compatibility version 1.0.0, current version 1.0.0)
    /../Frameworks/QSInterface.framework/Versions/A/QSInterface (compatibility version 1.0.0, current version 1.0.0)
    /../Frameworks/Growl.framework/Versions/A/Growl (compatibility version 1.0.0, current version 1.0.0)
    ...


    みたいになって、 Growl.framework がみつからないのですね。そこで本文にあるようなパス変更をしこむと、


    otool -L build/Release/TwitterPlugin.qsplugin/Contents/MacOS/TwitterPlugin
    build/Release/TwitterPlugin.qsplugin/Contents/MacOS/TwitterPlugin:
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
    /../Frameworks/QSCore.framework/Versions/A/QSCore (compatibility version 1.0.0, current version 1.0.0)
    /../Frameworks/QSFoundation.framework/Versions/A/QSFoundation (compatibility version 1.0.0, current version 1.0.0)
    /../Frameworks/QSInterface.framework/Versions/A/QSInterface (compatibility version 1.0.0, current version 1.0.0)
    /../Frameworks/Growl.framework/Versions/A/Growl (compatibility version 1.0.0, current version 1.0.0)
    ...


    となって OK ということです。

    ターゲットのところで、カスタムスクリプトを書けば解決すると思いますが、今回はさしむきターミナルから手で、本文にあるようなコマンドを打ち込んでました。