JudeをMacOSXのアプリケーションにする

モデリングツールの Jude は気に入ってる。マインドマップUMLとコード生成を連携させるっていうことができるし、何よりも開発者の顔が見えるのが良い。中の人たちはちょくちょくオープンソース系のイベントに顔を出してるので、言いたいことはすぐに言える。

そう言うわけで、これをMacでも使いたいわけだ。(ちなみに、JudeJavaアプリケーションなのでrun anywhereだけれども、Macはサポート対象外である)どうせなら標準バンドルのアプリケーションと同じように、独自のアイコンを持っていて、アプリケーションのディレクトリをダブルクリックするだけで起動するようにしたい。ディレクトリツリーをFinderから実行可能にするのはそれほど難しいわけじゃない。でも、前にもやったのにやり方の細かいところを忘れていたので今回はメモしようと思う。

バージョンの選択

Jude Professional 5.1.1にした。5.2 beta 1はぬるぽを投げて起動してくれなかった。

KeyStr =  is invalid
java.lang.NullPointerException
    at java.lang.String.endsWith(String.java:1296)
    at jE.a(X:222)
    at jE.a(X:227)
    at jE.a(X:204)
    at jE.c(X:72)
    at wA.n(X:151)
    at aI.<init>(X:59)
    at JP.co.esm.caddies.jomt.Jude.e(X:516)
    at JP.co.esm.caddies.jomt.Jude.f(X:419)
    at JP.co.esm.caddies.jomt.Jude.a(X:75)
    at jS.run(X:406)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

環境は

$ java -version
java version "1.5.0_13"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237)
Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)
$ uname -a
Darwin yugui-macbook.local 9.1.0 Darwin Kernel Version 9.1.0: Wed Oct 31 17:46:22 PDT 2007; root:xnu-1228.0.2~1/RELEASE_I386 i38

手順

  1. JREやらWindowsインストーラーなんかは不要だ。本体だけzipで固めたやつを落としてくる。

  2. zipを展開するとjude_professionalディレクトリが出てくる。これをResourcesに改名

  3. Contentsディレクトリを作って、Resourcesをその中に移動。

  4. Contents/MacOSディレクトリを作成。

  5. Contents/MacOS/Judeを作成。../Resources/judeへのsymlink

  6. 8行目のJUDE_HOMEの設定を JUDE_HOME="dirname $0/../Resources" に変更

  7. Resources/jude.icojude-doc.icoをPreview.appでも他の何かでも、適当なツールでTIFFに変換。

  8. tiff2icnsでTIFFをicnsデータに変換。

  9. 下記の内容のContents/Info.plistを作成。

  10. ディレクトJudeの中にContentsを移動。JudeJude.appと改名。

Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>Japanese</string>
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>jude</string>
            </array>
            <key>CFBundleTypeIconFile</key>
            <string>jude-doc.icns</string>
            <key>CFBundleTypeName</key>
            <string>Jude Document File</string>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
        </dict>
    </array>
    <key>CFBundleExecutable</key>
    <string>Jude</string>
    <key>CFBundleIconFile</key>
    <string>jude.icns</string>
    <key>CFBundleIdentifier</key>
    <string>jp.co.esm.caddies.jomt.jude</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>Jude</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleVersion</key>
    <string>5.1.1</string>
    <key>NSMainNibFile</key>
    <string>MainMenu</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
</dict>
</plist>