« Shadeの線形状をコミスタの定規に | メイン | SketchUpのシーンをComicStudioに1.5 »

●MacOSXでPython等のスクリプトを通常アプリのように

2010年9月16日    

今 Pythonで絵描きさん用ツールを作成しているのですが
それを配布するにあたりスクリプトの状態のままではマズいので

(主に使い勝手の面で)

通常のアプリケーションのように扱えるようにする方法を調べたのでメモ

ほぼ ここのサイトにある通りなのだけれど
http://d.hatena.ne.jp/y-echo/20100103/1262539509

参照しているサイトがMacOSX移行期のものなのでいつなくなるか不安なので

基礎的な情報として
MacOSXの一般的なアプリケーションは『ソフト名』に.appの拡張子のついたフォルダの中に

決まった形式で ソフトに必要な実行ファイルや画像ファイルを収めた形になっています
(アプリケーションバンドルと呼ばれます)

適当なフォルダに手動で.appの拡張子をつけると Finder上は一つのアプリケーションファイルのようになります

ただし 当たり前ですがそのままでは何も機能しません

アプリとして機能させるのに最小限必要なファイル構成は

[アプリ名.app]           ...親フォルダ
     └Contents
           ├Info.plist  ...アプリケーションの設定を記したXMLファイル
           └MacOS       ...実行するスクリプトやバイナリを収めるフォルダ
		       └(実行バイナリ等)
となっており Contentsフォルダ内にアプリケーションに必要なデータを収める形になっています
Finder上でアプリ名のフォルダ Contentsフォルダ MacOSフォルダを作ってもいいし
参考にしたサイトのように ターミナルでディレクトリを作ってもいいでしょう

ここではFinder操作でフォルダを作ります 親フォルダの.appの拡張子はまだつけないでおいてください

次にMacOSディレクトリに実行ファイルをいれます
通常のアプリではコンパイルされたファイルがここに入っていますが
シェルスクリプト等の実行可能なスクリプトファイルも利用できます
ここでは仮にPythonのスクリプトファイル test.py があるとします

最後に適当なテキストエディッタで文字コードUTF-8でInfo.plistを作成します

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleExecutable</key>
    <string>test.py</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
  </dict>
</plist>

これでアプリ名のフォルダに.appと拡張子を付加すれば
アプリケーションとして機能するようになります

アイコンを付加したい場合は
Contentsの下にResourcesフォルダを作ってその中に.icons拡張子のアイコンデータを収めて
Info.plist のの間の部分に

	<key>CFBundleIconFile</key>
	<string>(アイコンファイル名)</string>
の2行を追加します

(アイコンデータの作り方は検索で比較的多く出るので省略)

概要はこんなところですが
試している間で失敗したことをいくつか

アプリ化したものを一度起動するとInfo.plist等のデータがメモリ上にキャッシュされてるのか
変更が反映されないようです 設定をかえた場合はアプリ名を一度かえてみてください

Python等のスクリプトファイルの改行コードはLFで
(普段のスクリプトファイルをCRで書いていたので動かなくて往生してしまいました)

次はWindows用のexe化だ

投稿者 Yukimi` : 2010年9月16日 05:08