SSブログ

PaTrash2.0を作る - その11 [プログラミング]

先週の続き。デバグもできて動くようになれば、あとはDistributionのためのパッケージ化をすればいい。でも、それにけっこう悩んだ。今日はその話。

8  インストーラ

システム環境設定のバンドルは決まった場所にインストールされないといけない。そのためには「このディレクトリに入れてください」とREADMEファイルに書くのはなく、自動的にそこに配置されるようにするべきである。いわゆる「インストーラ」によってインストールできるようにしなければいけない。

ダブルクリックでインストーラによってインストールされるようなファイルを「パッケージ」という。パッケージはPackageMakerというデベロッパツールによって簡単に作ることができる。PackageMakerの使い方は、いくつかの日本語サイトにも紹介されているので、敷居は低い。

8.1  標準ディレクトリ

図-2に書いたようにシステム環境設定を使ってパラメータなどを設定しようとすると、必要なファイルがいろいろなディレクトリにバラバラに存在することになる。

PaTrash2.0ではいくつかのファイルが必要になるが、Appleのガイドに従って標準的なディレクトリにインストールすると考えると次のようになる。
ファイル位置(ディレクトリパス) 位置変更可能/不可
システム環境設定ペインのバンドル  ∼ /Library/PreferencePanes 不可
実行イメージ(agent)  ∼ /Library/Application Supportなど 可能
PaTrash2.0設定ファイル  ∼ /Library/Preferences 不可
LaunchAgent記述ファイル  ∼ /Library/LaunchAgents 不可
表の横幅が狭くて読みづらいけどようするに、実行イメージはどっちみち$Pathに設定されていなければ、パスを指定する必要があるため、標準位置にある必要はない。しかし、それ以外のファイルはこの位置になければ動作しない。

さっきも書いたけどディレクトリパスは正確でなければならないので、インストールをユーザに任せるのではなく、専用のインストーラが配置作業を行うようにした方がいい。またあとで書くように、アンインストーラも用意してゴミが残らないようにすべきである。

8.2  PackageMakerの難しさ

インストーラパッケージは「簡単に作ることができる」はずだった。ところがこのPackageMakerというツールが僕にはぜんぜんわからなくて苦労した。

まず、ユーザのディレクトリにインストールしたいのに、そこを指定する方法がわからない。インストール先は「Destination:」というテキストボックスがあってそこにパスを書けばいいんだけど、絶対パスかプロジェクト相対パスしか指定できない。しかもDestinationを指定する場所がなぜか2カ所ある。この区別がわからない。

システム領域にインストールするんなら誰のどのマシンでも皆同じなので絶対パスで書いて問題ないんだけど、インストーラを動かしているユーザのライブラリフォルダに入れたいときどうやって指定するのかわからない。

パスに$HOMEとかの環境変数を入れても、$HOMEなんていうとてもマヌケな名前のディレクトリができてそこにインストールされてしまう。~(チルダ、unixではユーザのホームディレクトリを表す。shellが環境変数$HOMEに置き換える)を使っても同じで、驚いたことに「~」という名前のフォルダができてしまう。shellからは消せないというこまったことになる(もちろんFinderでゴミ箱に入れることはできる)。いくらMac OS XではGUIからはunixが見えないようになっているとはいえ、Xcodeとは不整合となっていてPackageMakerのこういった動作はあまりにひどい。

結局、shellスクリプトを書いて、まず/tmpにインストールしてからスクリプトの中に、$HOME/Libraryにmvする、という記述をした。スクリプトの中ではちゃんと環境変数を維持しているので$HOMEはちゃんと正しいパスに置き換えられる。つまりスクリプトの呼び出し側はunixの標準的な呼び出し方をしていることがわかる。

しかしPackageMakerではそのスクリプトを指定する場所も2カ所ある。全然理解できない。

さらにPackageMakerは立ち上がっていると何もしていなくてもコンスタントにCPUを3〜4割消費している。何をやっているのかわからない。テンポラルファイルをさかんに作っているんだけど、それだけでCPUをこんなに消費するのもおかしいし、だいたいユーザが操作していないときにもずっと何かやってるというのは気に入らない。何かよろしくないことをやってるのではないか、と勘ぐられても仕方がない動作をしている。

使いにくさと相まってこのPackageMakerというアプリはいやなアプリだわ、まったく。

8.3  アンインストール

インストーラはPackageMakerで作ることができるけど、アンインストーラ用のツールは提供されていない。今回のような場合は、いくつかの場所にちらばったファイルを消すだけでいいので、それほど面倒ではない。

shell scriptを書いておくだけでもいい。実行可能のビット(lsコマンドでファイルパーミッションのx)が立っていれば、ダブルクリックするとターミナルが立ち上がってスクリプトが実行される。

ターミナルが立ち上がるのがカッコわるいと思うなら、小さなアプリを書けばいい。パスは決めうちなのでNSFileManagerを呼んでファイルを消すような動作をさせれば、今回の場合はじゅうぶんである。また、僕は全然使わないんだけどAppleScriptを使うのも手っ取り早くていい。多くのユーティリティのアンインストーラではコンパイル済みのAppleScriptが使われている。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立08/06献立08/07 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。