◀   |   |   ▶
◀   |   |   ▶

Xcode 始めました



Mac の標準開発環境である XcodeAppleScript も Xcode を使ってスクリプトを組めば、ウインドウやボタンなどのユーザーインターフェイスを持たせることができます。

でも私は、Xcode には魅力を感じながらも敬遠してきました。なぜか? それは『わかりやすい入門書がない』… つまり勉強するのがめんどくさい、という理由です。

プログラミングやスクリプティングの勉強の近道は、「とりあえず組んでみる」ことだと思います。ただ、参考書に書いてあるサンプルスクリプトを入力するだけでは面白くないし、それが参考書通りに動いても「ふうん」で終わってしまいます。

勉強はここから。サンプルを応用して、自分の欲しいプログラムを作り出すこと。これがいちばん勉強になります。私が AppleScript を憶えたのも、「作ってみたいもの」があったからなんです。

最近ブログがらみで、「作りたいもの」のアイデアが唐突に浮かびました。使いやすくするためには、Xcode をさけるわけにはいかないようなアイデアが。

かんじんの「作りたいもの」には、まだ手をつけていませんが、それを動かすためのアプリケーションは完成に近づきつつあります。

とりあえず、Xcode ビギナーがつまずいた項目をメモ。


初期設定を保存/読み出す方法は?

penguin-19 さんの『AppleScript for OS X』というページにズバリ書いてありました。
しかし、このハンドラを単独で使ったばあい、初期設定は ~/Libraly/Preferences/com.apple.ASApplication.plist の中に書き込まれます。このファイルは、AppleScript が共通して使う初期設定ファイルです。
独自の初期設定ファイルを作るなら、プロジェクトの Info.plist をPropertyList Editor で開いて、CFBundleIdentifier の Value を例えば、jp.ddo.arimura.processspy などに変更してやります。これで、jp.ddo.arimura.processspy.plist という初期設定ファイルが作成されます。

About ウインドウの MyCompanyName って…

新規プロジェクトを作成したときに設定したはずなのに、__ MyCompanyName__ のまま…
プロジェクトウインドウの Resources/InfoPlist.strings/English で変更。

idle ハンドラは使える?

どこかで Xcode で作った AppleScript アプリケーションでは on idle ハンドラは使えないという記述を見たことがあるのですが、間違い。
掌田津耶乃さんの「AppleScript Programming for Mac OS X」追補情報ページに解決方法が書かれています。

  1. MainMenu.nibをInterface Builderで開く。
  2. Nibファイルウィンドウで「File's Owner」を選択し、InfoウィンドウのAppleScriptを開く。
  3. Applicationの中に「idle」「open」の2つの項目がONになっていることを確認する。
  4. その下のスクリプトファイルのチェックがはずれているはずなのでONにする。
  5. すべて保存すれば完了。これできちんとイベントが機能するはずです。

(注:上記は、ドロップレットについて書かれたものなので「open」にもチェックを入れるようにされています。また、Xcode2.0 に付属する Interface Builder では、Info ウィンドウというより、Inspector ウインドウと言った方がわかりやすいかも。

日本語アプリケーション名は使える?

System Events を介してアプリケーションが起動しているか判定するのに、アプリケーション名の使い方でおかしなことになる。
exists (application processes whose name is theTargetApp)
とするなら、

  • theTargetApp が "テキストエディット" … ×
  • theTargetApp が "TextEdit.app" … ×
  • theTargetApp が "TextEdit" … ○

アプリ名を
choose file with prompt "Select target application" of type {"APPL"} without invisibles
で選択して、theStr という変数に格納するなら、
set theStr to short name of (info for the result)
とする。
ちなみに、「テキストエディット」なら displayed name、「TextEdit.app」なら name で OK。
これは Xcode ではなく、AppleScript の仕様だけど。

short name がないアプリはどうする?

上記の choose file ~short name を得ようとすると、結果が <null> になるアプリケーションが存在します。(iCal など)
自作アプリの場合は、Info.plist を PropertyList Editor で開いて「CFBundleName」を追加、value を「ProcessSpy」などとすれば、それが short name になります。
自作でないアプリケーションも、この方法で short name を埋め込むことはできるけど…
display dialog "" default answer "" buttons {"Cancel", "OK"} default button 2
として、タイプしてもらうほうがユーザーフレンドリーかな。

display dialog の結果が逆?

スクリプトエディタで上記の text input ダイアログを表示した場合、つづけて
copy the result as list to {text_returned, button_pressed}
として、入力されたテキストを変数 text_returned に、押されたボタンを button_pressed に格納するのが常套手段だけど、これを Xcode 上の AppleScript でやると、なぜか text_returned に「OK」が、button_pressed に「iCal」が入ってしまうという謎。
copy the result as list to {button_pressed, text_returned}
としときましょう。

それにしても、がんばって検索しても情報が少ないなぁ。で、どんなアプリケーションを作ったかというと… もう少しベータテストしてからにしときます(w

投稿: 2006年01月22日 (日) at 04:32   | | | |

◀   |   |   ▶
◀   |   |   ▶