OS X Programming Tips/ja
From Lazarus-ccr
English (en) Français (fr) Japanese (ja)
Contents |
[edit] Lazarus と Free Pascal のインストール
Lazarus と Free Pascal は Subversion (SVN) を用いてソースコードをダウンロード・アップデートし、それを用いてインストールすることができますが、単に Lazarus と Free Pascal を導入することだけが狙いなら、次に示す方法でディスクイメージ (*.dmg) によって導入することもできます。安定化バージョンは Source Forge にありますし、最新のもの(動作保証はありません)はスナップショットページから得られます。この場合、他の所に書かれている OS X 用のインストールガイドに従う必要はありません。
1.1. Apple Developer Tools がインストールされていることを確認してください。Free Pascal は Apple Developer Tools に含まれるツールの一部を利用します。OS X 10.3 では、OSとは別に Xcode Tools CD が用意されそこからインストールすることができますし、OS X 10.4 Tiger では OS のインストール DVD の中に Xcode Tools フォルダがあります。
Apple Developer Tools がインストールされているかどうかは、/Library/Receipts ディレクトリを見るとわかります。Apple Developer Tools がインストールされていれば、DeveloperTools.pkg という名前のファイルがあるはずです。Apple Developer Tools に含まれるツールを動かしてみる方法もあります。例えば ld をターミナルから実行してみてください。Apple Developer Tools がインストールされていれば、OS X のリンカの利用法が表示されるはずです。
Tip: Free Pascal を Xcode IDE から利用できるように、イントーラは gcc のパッケージを要求します。OS X 10.4 では gcc は Apple Developer Tools とは別に用意されているため、gcc4.0.pkg もインストールしておく必要があります。ディスク容量に余裕があれば、Xcode メタパッケージ (XcodeTools.mpkg) をインストールすれば結構です(訳注: Tiger のDVDに入っているのがこのメタパッケージです)
1.2. X11 がインストールされていることを確認してください。OS X 10.3 では、OS 付属の Xcode Tools CD からインストールでき、OS X 10.4 では、インストール DVD の中にある Optional Installs をクリックするとインストーラが起動します。
X11 がインストールされていれば、「アプリケーション」内の「ユーティリティ」フォルダ (/Applications/Utilities) に X11 という名前のアプリケーション (*.app) があるはずです。
Tip: X11 をドックにドラッグ&ドロップしておけば、X11 window を一発起動することができます。
1.3. fink をダウンロードしてインストールします。OS X のバージョン(10.3 Pantherか10.4 Tigerか)によって、ダウンロードすべき fink のバージョンが異なりますので、正しい方をインストールしてください。次にインストールした fink を用いて、Lazarus が必要とする GTK 及び関連パッケージをダウンロード・インストールします。fink をインストールしたら、ターミナルから次のコマンドを一行で入力してください(訳注、管理者アカウントでなければなりません)。
sudo /sw/bin/apt-get install gtk+ gdk-pixbuf
パスワードを入力するようにプロンプトが出ますので、自分のパスワードを入力すると GTK ライブラリのバイナリのダウンロードが始まります。ブロードバンド環境でない場合は、一時間くらいはかかるかもしれません。
重要: fink のバージョンが正しいことを確認してください。OS X(Panther か Tiger か)及びプロセッサ(PowerPC か Intel か)によって、適したバージョンは異なります。
メモ: Lazarus のインストール方法の中では、OS X は特例です。それは現在の所 Lazarus が X Window システムと Gimp Toolkit (GTK) のライブラリに依存しているのに、GTK のライブラリがデフォルトの状態では OS X には含まれないため、ユーザ自身がインストールしなければならないからです。将来的には X や GTK は不要になるかもしれませんが、とりあえず今の所はこういった面倒を我慢してください。ステップ 1.2 と 1.3 は Lazarus で開発された GUI アプリケーションを OS X 上で実行する場合にも必須です。
Tip: Free Pascal を用いて、ライブラリやコンソールアプリケーションを開発するだけなら、お好みのテキストエディタを用いてソースを書き、それをターミナルやスクリプト上でコンパイルすることもできます。この場合、Apple Developer Tools と Free Pascal をインストールすれば十分です。
1.4. 次の三つの .dmg ファイル をダウンロードしてインストールします。dmg ファイルは Source Forge または the Lazarus デイリースナップショットから得られます:
fpc .dmg fpcsrc .dmg lazarus .dmg
(訳注: 上から Free Pascal 本体、Free Pascal ソース、Lazarus 本体です。名前は例えば 2007年5月15日のIntel Mac向けLazarusスナップショットなら lazarus-0.9.23-20070515-i386-macosx.dmg のようになります。)
インストールが終われば、これらのファイルは削除してもかまいません。
1.5. X11 ウィンドウで次のように入力して Lazarus を起動してみます:
cd /usr/local/share/lazarus ./lazarus
Lazarus が「Free Pascal コンパイラが見つからない」と文句を言ってきたら、IDE の Environment | Environment options を出し、Comiler path に /usr/local/bin/ppcppc と入力してください。Intel Mac の場合は /usr/local/bin/ppc386 とします。
Tip: Lazarus をダブルクリックで起動したり、ドックにドロップしたりする方法については、下の方のアプリケーションバンドルの作成セクションを参照してください。
1.6. X11 tips.
- X11 ウィンドウで次のようにタイプすると、マウスをクリックした時の動作が「らしく」なります(訳注: 初期状態では、最初のクリックではウィンドウが選択されるだけで、例えばボタンを押すにはもう一度クリックする必要があります):
defaults write com.apple.x11 wm_click_through -bool true
一旦 X11 を終了して再起動すると有効になります。
- X11 を終了するときに毎度毎度確認ダイアログが出ますが、うざいと思われる場合は次のようにタイプして X11 を再起動してください:
defaults write com.apple.x11 no_quit_alert true
- Lazarus を簡単に起動する方法に、X11 のメニューを利用するものがあります。X11 の「アプリケーション」|「メニューをカスタマイズ」を出し、「追加」をクリックして、「メニュー名」の下に Lazarus、コマンドの下に次の文字列を入力します:
open -a /usr/local/share/lazarus/lazarus
「完了」をクリックしてウィンドウを閉じます。これで、「アプリケーション」|「Lazarus」を選択することで Lazarus を簡単に起動することができます。
1.7. Qt ウィジェットセットを Lazarus で利用することに興味があるなら、Qt interface framework をインストールします。OS Xでの利用法についての詳細は Qt Interface Mac のページをご覧ください。
[edit] Lazarus と Free Pascal のアンインストール
通常の OS X アプリケーションのアンインストールは、そのアプリケーションを「アプリケーション」フォルダからゴミ箱に移動すればそれですみますが、Lazarus と Free Pascal は開発ツールであり、ファインダでは通常表示されないいくつかのフォルダにインストールされます。
Lazarus 及び Free Pascal をアンインストールする必要がある場合は、下記のコマンドを uninstallLaz.sh という名前のファイルとしてコピー・保存して実行してください。Lazarus 及び Free Pascal は、古いバージョンの上から新しいバージョンを上書きインストールすることができます。ですが、新しいバージョンをインストールする前に、古い方をきれいさっぱり消しておくのも悪い考えではありません。また、このリストにあるコマンドを見れば、Lazarus 及び Free Pascal のさまざまな部分がどこにインストールされるかが判るでしょう。
bin=/usr/local/bin share=/usr/local/share lib=/usr/local/lib receipts=/Library/Receipts rm -fv $bin/ppcppc rm -fv $bin/bin2obj rm -fv $bin/data2inc rm -fv $bin/delp rm -fv $bin/fd2pascal rm -fv $bin/fpc rm -fv $bin/fpcmake rm -fv $bin/fpcmkcfg rm -fv $bin/fpcsubst rm -fv $bin/fpdoc rm -fv $bin/fprcp rm -fv $bin/h2pas rm -fv $bin/h2paspp rm -fv $bin/makeskel rm -fv $bin/mkxmlrpc rm -fv $bin/plex rm -fv $bin/postw32 rm -fv $bin/ppdep rm -fv $bin/ppudump rm -fv $bin/ppufiles rm -fv $bin/ppumove rm -fv $bin/ptop rm -fv $bin/pyacc rm -fv $bin/rstconv rm -fv $bin/unitdiff rm -r $share/lazarus rm -r $share/fpcsrc rm -r $share/doc/fpc-2.1.1 rm -r $share/examples/fpc-2.1.1 rm -r $lib/fpc rm -r $receipts/lazarus-*.pkg rm -r $receipts/fpcsrc-*.pkg rm -r $receipts/fpc-*.pkg
ここでは、Free Pascal 2.1.1版のスナップショットがインストールされていると仮定しています。違うバージョンをインストールしている場合は、関連する二つのコマンド(訳注: rm -r $share/doc/fpc-2.1.1 と rm -r $share/examples/fpc-2.1.1)を適当なものに書き換えてください。
このスクリプトを実行するには、スクリプトファイルを保存したディレクトリに移り、次のようにタイプします(管理者アカウントが必要です):
chmod +x uninstallLaz.sh sudo ./uninstallLaz.sh
プロンプトに対し、自分のパスワードを入力します。
メモ: Lazarus はまた、「.lazarus」フォルダをユーザのホームディレクトリに作成し、環境設定や、最近開いたプロジェクトやファイルを保存します。新しくインストールする Lazarus に環境を引き継ぎたいなら、このフォルダはそのままにしておきます。OS X は通常、ドット (.) で始まる名前を持つファイルやフォルダを表示しません。このフォルダや中身を見るには、ターミナルで次のようにタイプします:
cd ~/ ls -al cd .lazarus ls
(訳注: cdはディレクトリを移動するコマンド。最初のコマンドでホームディレクトリに移動し、ls(ディレクトリを表示するコマンド)に -al オプションをつけて、ドット付きファイルも表示対象にしています。このページの最後の方に簡単なUNIXコマンドの説明がありますのでご覧ください。)
[edit] Lazarus LCL ウィジェットセットの選択
OS X 上の Lazarus では、三つのウィジェットセット widgetset から一つを選ぶことができます。それぞれに利点と欠点があります。二つは開発途上ですが OS X 上の Lazarus の将来を見通していくためには適しているでしょう。
GTK ウィジェットセット
| 利点 | 欠点 |
|---|---|
| 標準的な LCL コントロールがすべて動作 | マックのものとは思えない、醜くえぐいコモンダイヤログ |
| 現行の Lazarus は GTK を用いてコンパイルされているため、ウィジェットセットもよく検査されている | X11 や山のような GTK をインストールしないと、Lazarus も Lazarus で作成した GUI アプリも走らない |
| Lazarus の起動をコマンドラインから行う必要がある -- ダブルクリックでは起動しないし、ドックにもおけない(作成した GUI アプリも同様) -- これを実現したい人は次項参照 |
Qt ウィジェットセット (Qt Interface Mac参照)
| 利点 | 欠点 |
|---|---|
| OS X ネイティブのルック&フィール | まだ動作しない LCL コントロールがある |
| 他のプラットフォームにもQt ウィジェットセットは移植されている | 現在の所 LCL を別にコンパイルし、Lazarus に「それがどこか」教える必要がある |
| Qt ウィジェットセットを開発すると、他の複数のプラットフォームにも利益を齎す | アプリを走らすのに、Qt インタフェースフレームワークが必要 |
| Qt インタフェースは高機能 | オープンソースの場合を除き、商用ライセンスが高額 |
| 他のウィジェットセットに比べ開発が容易 |
Carbon ウィジェットセット (Carbon Interface参照)
| 利点 | 欠点 |
|---|---|
| OS X 標準の Carbon フレームワークを用いるので、新たなライブラリやフレームワークを必要としない | まだ動作しない LCL コントロールがある。完成はLazarus 1.0以降になる予定 |
| OS X ネイティブのルック&フィール | OS X専用に近い |
[edit] GTK アプリケーション(Lazarus自体を含む)からのアプリケーションバンドル作成
OS Xで、実行ファイルをダブルクリックで起動できるようにしたり、ドックにドロップすることができるようにしたりするには、アプリケーションバンドルを作成する必要があります。アプリケーションバンドル (app bundle) は実際には特殊なフォルダです。実行ファイルと同じ名前で、「.app」という拡張子がついています。ファインダはこの拡張子を表示しませんが、ターミナルで ls コマンドを用いると見ることができます。
Carbon 及び Qt ウィジェットセットを用いた場合のアプリケーションバンドル作製法はそれぞれのページに述べられています。動作させるには X11 を起動する必要のある GTK アプリケーションでは若干やっかいです。下記のスクリプトをコピペして、create_gtk_app.sh という名前のファイルを作り、chmod +x コマンドを用いて、そのファイルを実行可能な状態にしてください。そうすると create_gtk_app.sh を次のように実行してアプリケーションバンドルを作成することができるようになります(execfile の部分はバンドルを作成しようとする GUI アプリケーションの名前に置き換えてください):
./create_gtk_app.sh execfile
このスクリプトは Lazarus そのものをアプリケーションバンドルにするためにも用いることができます(Lazarus も GTK アプリケーションですから)。バンドルを作成したいディレクトリ(たとえば「アプリーケション」フォルダ /Applications)に移動し、次のスクリプトを走らせます:
[path_to_script]/create_gtk_app.sh lazarus
できあがった Lazarus.app は他のアプリケーションと同様にドックに置くことができます。
詳細については、スクリプトをよく読んでください。
Tip: 下のスクリプトには、極めて長い行が一つあります。このページを印刷するとき、その行がはみ出してしまうかもしません。次に、問題の行を二行に分けて書いておきます。スクリプトファイルでは、これが正しく一行になっていることを確認してください。
echo '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' >>$plistfile
#!/bin/sh
# Force Bourne shell in case tcsh is default.
#
appname=$1
appfolder=$appname.app
macosfolder=$appfolder/Contents/MacOS
plistfile=$appfolder/Contents/Info.plist
if [ $appname = "lazarus" ]
then
appfile=/usr/local/share/lazarus/lazarus
else
appfile=$appname
fi
#
if [ "$appname" = "" ]
then
echo "Usage: $0 executable_file"
echo "Creates .app bundle (folder) for executable file that uses GTK widgetset"
elif ! [ -e $appfile ]
then
echo "$appfile does not exist"
elif [ -e $appfolder ]
then
echo "$appfolder already exists"
else
echo "Creating $appfolder..."
mkdir $appfolder
mkdir $appfolder/Contents
mkdir $appfolder/Contents/MacOS
mkdir $appfolder/Contents/Resources
#
if [ $appname = "lazarus" ]
then
# This is special case for lazarus IDE.
# Create a script file in .app folder that starts X11, then Lazarus.
echo '#!/bin/sh' >$macosfolder/$appname.sh
echo '# This script starts X11, then Lazarus.' >>$macosfolder/$appname.sh
echo 'open -a x11' >>$macosfolder/$appname.sh
echo "export DISPLAY=':0.0'" >>$macosfolder/$appname.sh
echo 'open -a '$appfile >>$macosfolder/$appname.sh #IMPORTANT! If you're running TCSH, or other,
chmod +x $macosfolder/$appname.sh # "open -a" doesn't work. Use "open" instead
else
# Instead of copying executable into .app folder after each compile,
# simply create a symbolic link to executable.
ln -s ../../../$appname $macosfolder/$appname
# Create a little script file in .app folder that opens executable with X11.
echo '#!/bin/sh' >$macosfolder/$appname.sh
echo '# This script opens the executable file with X11.' >>$macosfolder/$appname.sh
echo 'open ${0/%.sh}' >>$macosfolder/$appname.sh
chmod +x $macosfolder/$appname.sh
fi
#
# Create PkgInfo file.
echo "APPL????" >$appfolder/Contents/PkgInfo
#
# Create information property list file (Info.plist).
echo '<?xml version="1.0" encoding="UTF-8"?>' >$plistfile
echo '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' >>$plistfile
echo '<plist version="1.0">' >>$plistfile
echo '<dict>' >>$plistfile
echo ' <key>CFBundleDevelopmentRegion</key>' >>$plistfile
echo ' <string>English</string>' >>$plistfile
echo ' <key>CFBundleExecutable</key>' >>$plistfile
echo ' <string>'$appname'.sh</string>' >>$plistfile
echo ' <key>CFBundleInfoDictionaryVersion</key>' >>$plistfile
echo ' <string>6.0</string>' >>$plistfile
echo ' <key>CFBundlePackageType</key>' >>$plistfile
echo ' <string>APPL</string>' >>$plistfile
echo ' <key>CFBundleSignature</key>' >>$plistfile
echo ' <string>????</string>' >>$plistfile
echo ' <key>CFBundleVersion</key>' >>$plistfile
echo ' <string>1.0</string>' >>$plistfile
echo ' <key>CSResourcesFileMapped</key>' >>$plistfile
echo ' <true/>' >>$plistfile
echo '</dict>' >>$plistfile
echo '</plist>' >>$plistfile
fi
[edit] 自作アプリケーションバンドルにアイコンを貼る方法
5.1 OS X の Icon Composer (訳注: /Developer/Applications/Utilities にあります)などのプログラムを持いて自作アプリケーションのアイコンファイル(拡張子は .icns)を作ります。
5.2 アイコンファイルをアプリケーションバンドルの Resources フォルダにコピーします。例えばコマンドラインで、次のようにタイプします:
cp -p myapp.icns myapp.app/contents/resources
5.3 アプリケーションバンドルの Info.plist ファイルに、次のキーを追加します:
<key>CFBundleIconFile</key> <string>myapp.icns</string>
5.4 こうやってもアイコンが更新されない場合は、ファインダを「リフレッシュ」して、新しいアイコンを表示させる方法を試してみましょう:
- 一旦ログアウトして、再度ログインする。
- 問題のアプリケーションを一旦他のフォルダに移動し、また元に戻す。
- ファインダの再起動(Esc-Option-Apple を押す)
自作アプリケーションを他のマックにインストールする場合はこの問題はおきないはずです。ファインダが問題を起こすのは、そのアプリケーションのアイコンを作成時のものから変更しようとする場合だけです。
[edit] ネットから得られる便利なツール
プログラマなら誰しも良いテキストエディタを必要とするものです。ですが、OS Xのテキストエディットはそうではありません。代わりに TextWrangler をダウンロードしてインストールしましょう。TextWrangler はフリーウェアで、Pascal やスクリプトファイルの文法ハイライト機能を持ったテキストエディタです。
優秀なエディタとしては、他にも AlphaX、BBedit があり、OS Xの Xcode IDE もエディタとして使えます。
OS Xのマニュアルページ (man) は UNIX もろだしで、絶望的に使いづらいものです。Sogudi は OS X の Safari 用の小さなアドオンです。インストールすると、Safari の URL 入力欄に "man:<マニュアルを読みたいコマンド名>" とタイプすることができるようになります。例えば、grep コマンドのマニュアルは次のようにタイプすると表示されます:
man:grep
ウェブのページと同様、マニュアルの内容をスクロールして読むことや、印刷することや、検索することができます。
NeoOffice は OS X 版の OpenOffice.org で、見かけも動作も OS X アプリそのものです。これを一度使ってしまうと、もう X11 上の OpenOffice には戻れないでしょう。
(訳注: マック用のOpenOfficeはX11アプリです。NeoOfficeはOpenOfficeのUI部分をJavaで書き直したものです。従ってAquaのルック&フィールが得られるだけではなく、日本語入力の問題がありません)
Unix and Open Source downloads
アップルは多くのフリーアプリを提供しています。多くのものはUNIXからの移植で、X11上で走ります。大いなる Gimp が一例です。
Onyx は便利な OS X のメンテナンスツールです。
OS X用 FTP クライアントをお探しですか? Cyberduck はOS Xのために特に開発されたオープンソースの FTP クライアントです。
[edit] OS X に含まれる便利なコマンドとツール
open
コマンドラインからアプリケーションを起動したり、ファイルを開けたりします。アプリケーションを起動しファイルを開く際、ディレクトリをわざわざ指定しなくてすむため便利です。例えばカレントディレクトリの Pascal ファイルを TextWrangler で開くには、次のように入力します:
open –a textwrangler myfile.pas
zip / unzip
Xcode toolsをインストールすると標準でコマンドラインアプリケーションとしてインストールされます。
Console
/Applications/Utilities (日本語では「アプリケーション」→「ユーティリティ」)フォルダからドックにドラッグ&ドロップして、手元においておきましょう。これを起動すると、例えばクラッシュの際 GUI アプリがコンソールに吐いたエラーやメッセージを見ることができます。デバグに当たっては欠くべからざるツールです。
Activity Monitor
このアプリも /Applications/Utilities にあります。CPU とディスクの利用状況をモニタするのに便利です。
otool / install_name_tool
otool を使うと、実行ファイルやライブラリの情報を見ることができます。例えば、Lazarus について知りたければ、次のようにします:
cd /usr/local/share/lazarus otool –L lazarus
想像のとおり、Lazarus が /sw/lib、/usr/X11R6/lib、/usr/lib に含まれる多くのライブラリに依存していることがわかるでしょう。
install_name_tool を -change スイッチと共に使うと、ライブラリのインストール名を実行ファイルやライブラリの要求に合わせて変更することができます。
Grab
/Applications/Utilities フォルダの Grab を用いると、スクリーンショットやウィンドウショットが得られます。ファイルにも保存することができます。
Icon Composer
/Developer/Applications/Utilities フォルダの Icon Composer を用いると、アイコンファイル (.icns) を作成することができ、このファイルは自作のアプリケーションバンドルで用いることができます。
PackageMaker / Disk Utility
自作のアプリを公開する際、ディスクイメージ (.dmg) ファイルを作成するのに用います。詳細は Deploying Your Application 参照。
PackageMaker は /Developer/Applications/Utilities フォルダにあります。Disk Utility は /Applications/Utilities フォルダにあります。ドックにドラッグ&ドロップしておくことができます。
Script Editor / osascript
Script Editor を使うと、アップルスクリプト AppleScript のファイルを編集、コンパイル、実行することができます。/Applications/AppleScript フォルダにあります。
osascript を使うと、コマンドラインやスクリプトファイルからアップルスクリプトのコマンドやファイルを実行することができます。詳細はmanでご覧ください。上記 Sogudi がインストールしてあれば、man:osascript で見られます。
[edit] 常用されるUNIXコマンド
Windows から OS X にやってきた利用者は、UNIX のコマンドに戸惑いがちです。そこでここに対照表を用意しました。コマンドについての詳細な情報は man コマンドで見られます。上記 Sogudi をインストールしてあれば、Safari にman:command と入力すれば見られます。
| 動作 | Windowsのコマンドプロンプト | OS X ターミナル、X11 |
|---|---|---|
| 他のディレクトリへの移動 | cd | cd |
| 新しいディレクトリの作成 | mkdir | mkdir |
| ディレクトリの削除 | rmdir | rmdir |
| ディレクトリ内のファイルを時間順で詳細表示 | dir /od | ls -ltr |
| タイムスタンプを維持したファイルの複製 | copy | cp -p |
| テクストファイルの内容表示 | type | cat |
| ファイルの削除 | erase | rm |
| ファイルの移動 | move | mv |
| ファイル名変更 | ren | mv |
| ファイル検索 | dir /s | find |
| ファイル内文字列検索 | findstr | grep |
| 2テクストファイル間の相違を表示する | fc | diff |
| ファイル属性の変更 | attrib | chmod |
| スーパーユーザ・ルートとして作業 | (無し) | sudo |
| シンボリックリンクの作成 | (無し) | ln |
| 実行ファイルのスリム化 | strip(Free Pascalに含まれる) | strip |
[edit] Links
Coming to OS X from Unix or Linux?
Coming to OS X from Windows and want to learn Unix scripting?
Coming to Object Pascal from C++, C# or Java?
