ブログトップ
コンピュータと共にある創造的日常
uneoyaji.exblog.jp

メディアアート・プロジェクトにハマったオヤジの日常生活
by une0exct
<   2008年 06月 ( 5 )   > この月の画像一覧
動的リンクとフレームワーク
すっかり忘却して実はとおに過ぎていた原稿〆切りが、2つもあって、催促メールを受け取ってやっと気づきまして、ブログの新規投稿も一休みしておりました。
さて、フレームワーク化ですが、DT4とかに組み込んでみると、いろいろ改良したい点などが出てきてしまい、なかなか仕様が収束しません。一応、マニュアルも同時並行でまとめてるんですがね。。。
組み込んでみて気づいたことの1つは、Cocoa アプリは、リンクしているフレームワーク内のライブラリが立ち上げ時に見つからないと、異常終了してしまうつうことです。標準では動的なリンク、つまり、実行開始時に dyld が動いてロードしようとするようです。ということは、配布時はフレームワークも一緒に入れとかないといかんと。できればバイナリだけ配りたいので、静的リンクにする方法はないかと探しましたが、フレームワークの形式で、それをやる方法が今のところ見つかりません。UNIX のライブラリ形式なら静的にもできるんですが、だれかフレームワークでそれやる方法教えて!
しかし、リソースもあるからなぁ。
[PR]
by une0exct | 2008-06-24 01:04
フレームワーク
MIDI コントローラをボタン、スライダ、メニューなどに割り当てる GUI をフレームワーク化すべく Xcode と格闘中です。アプリのプロジェクトと違う点はというと、まぁ普通に新しいプロジェクトを開くときに、ターゲットは Cocoa Framework だぞと指定すればいいわけですが、ちょいとフェイクが必要な箇所が2つあります。
1つは、言語環境。アプリでは、リソースのディレクトリの下に言語毎に、例えば日本語なら Japanese.lproj というサブディレクトリを作って、そこに Localizable.strings というファイルを作っておけば、NSLocalizedString 関数で、多言語対応できるわけですが、アプリのリソースの中にフレームワーク用のを混ぜる訳にはいかないので、フレームワークのソースコード内で NSLocalizedString 関数は使えないのです。代わりに、フレームワークのリソースバンドルを NSBundle の bundleForClass: で開いておいて、localizedStringForKey:value:table: で、使用中の言語に文字列を変換するっつうことです。
2つ目は、インストール。アプリに取り込むには、そのアプリの Xcode プロジェクトでリンクできるようにしないといけないわけですが、フレームワーク開発のビルドディレクトリにおいたままでは、参照できないので、少なくともユーザのライブラリフォルダにコピーするとかしないといかんわけです。それで、Xcode には開発したプロダクトを最終的に適切なフォルダにコピーするインストールの機能がついているんですが、デフォールトでは無効になっているので、インストール先のフォルダ指定とともに有効かしないといけない。それには、ターゲットの設定を編集して、DSTROOT と INSTALL_PATH と DEPLOYMENT_LOCATION を変更する必要があります。
つうことで、多少面倒ではありますが、フレームワーク化していろんなアプリに簡単に埋め込めるようにしつつあります。
[PR]
by une0exct | 2008-06-11 00:32
問題解決?
Leopard をアップデートしたら、フリーズしなくなったようです。というわけで、MIDI AE 1.1 は、そのまま放置することにしました。
と、MIDI にうつつを抜かしておりましたら、SBART が期限切れになっていたのを、すっかり忘れておりました。早速、利用期限を11月末に伸ばして再構築したものをアップロードしときました。文句来ないとこ見ると利用者は少ない模様。002.gif
MIDI AE を一段落させたところで、今度は本番の DT4 への組み込みにかかってます。こちらは AppleScript ではなく、パネル上のボタンやらスライダに MIDI のキー/ノブの指定をドラッグ&ドロップして設定するものです。普通の NSControl はメソッドの拡張でいいんだけど、最初からドロップサイトになっている NSColorWell はちと問題。サブクラスを作るしかないので、MIDICntlColorWell なるサブクラスを作って対応。指定されたノブで、どのチャネルを操作するかを指定できるようにしてみました。
[PR]
by une0exct | 2008-06-07 16:59
子プロセスと親プロセス
スレッドがだめならプロセスでどうだと、NSTask で作った子プロセスを NSPipe でつないで、コマンドプロトコルを決めて、やってみました。
ところが、またまた問題発生。AppleScript のコンパイルがハングアップ!007.gif とにかく NSAppleScript の compileAndReturnError メソッドに入ったっきり戻ってきません。どうも、親プロセスの用語集を見に行けないのかもしれませんね。かくなる上は、子プロセスではなくサーバとして立ち上げて socket でつなぐしかないのか。025.gif
[PR]
by une0exct | 2008-06-04 15:44
もう MIDI AE 1.1
1.0 が、あまりにおそまつ?だったので、いそいそと次のバージョンをリリースしました。こちら から新しいバージョン 1.1 をダウンロードできます。
しかし、新たな問題が発生しました。
1.1 では、AppleScript を独立したスレッドで実行するようにしたのですが、これが仇となって、display dialog "やった〜!" とか書くと、フリーズしてしまうのです。Modal dialog をサブのスレッドで動かすのは御法度なのでした。う〜ん、どうしよう。並列に動かし、かつ、スレッドじゃない方法というと、プロセスを分けるということですか。確かにメモリー共有の必要もなさそうだから、NSTask 使えば、なんとかなりそうな気もしますね。
[PR]
by une0exct | 2008-06-02 21:36