2007-03-31

OS X アプリケーション

アプリケーションにshared library(dylibファイル)を突っ込みたいときの方法。Contents/MacOSにdylibファイルを入れるとして、

  1. Contents/Info.plist

    <key>LSEnvironment</key>
    <dict>
    <key>DYLD_LIBRARY_PATH</key>
    <string>/Applications/Hoge.app/Contents/MacOS</string>
    </dict>
    を追加。インストール先が固定の場合に使用可能。dylibの場所をフルパスで指定しているため。Info.plist内の表記方法でインストール先を知ることができるかどうか不明。

  2. Contents/MacOSに

    #!/bin/sh
    APPPATH="${0%/*}"
    export DYLD_LIBRARY_PATH="$APPPATH/lib"
    exec "$APPPATH/Hoge" "$@"
    のようなシェルスクリプト(たとえばPrelude)を置き、Contents/Info.plistCFBundleExecutableにシェルスクリプトファイル名を書く。

    <key>CFBundleExecutable</key>
    <string>Prelude</string>

    これによりアプリケーションをどこに置いても、指定したシェルスクリプトから置いた場所を取得できるので、アプリケーションが起動する前に環境変数DYLD_LIBRARY_PATHを設定したり、いろんなことができる。


ということで後者がオススメ。

注意!

アプリケーション内のInfo.plistは何かがキャッシュしているらしく、Info.plistを書き換えてアプリケーション起動しても反映されない場合あり。その場合はアプリケーションを一旦別のフォルダに移動させてすぐ戻せば良し。Info.plistを書き換えるたびにフォルダ移動させると吉。これでかなり悩んだ orz