2011年10月5日水曜日

【備忘録】 AIR1.5以前で作ったアプリをそれ以降に移植するには

直前のエントリでAIR1.5で作ったアプリをAIR2.6にしようとしたら、バージョンアップ扱いにならなくなった件を書きましたが、解決。

この辺を参考に(FxUGさんありがとう!)、この辺を見たら解決。

要するに1.5以前で作ったアプリを2.0以降にバージョンアップさせる場合、アプリケーション記述ファイルにpublisherIDが必須なんだと。

知るかそんなもん!と思ったがFxUGって頼りになるわ~と思った。

ただ、それはそれとして、今まではapp-storageが指す先のディレクトリが、
  • adlから起動した場合(デバッグに使用) - application idそのもの
  • インストールして起動した場合 - application id+publisherID
に 分かれてたのでデータが混ざんなくてデバッグし易かったんだが、これまた2.xから一緒になりやがった。どっちを使うかでディレクトリ名を変えてやればいいので逃げようはあるんだけど・・・。

AIRのバージョン

つい先ごろ、PushIt!クライアントをAIR2.6向けに作り直してる間にAIR3がリリースされましたが、まあそれはさておいて。

今までAIR1.5で作ってたアプリをAIR2.6で作り直してですよ、アプリのバージョンアップをしようとしたその時!

インストールした場所に同じ名前のアプリケーションがあります。


ってそりゃそうだよ!同じアプリだもの!
だからバージョンアップしてくれって頼んでるの!
誰が新規インストールしてくれなんていったんだよ!


う~ん。。。困ったよ。。。
2.6じゃないと使えない機能を使っちゃったよ既に・・・。どーすんべ。

2011年10月3日月曜日

【備忘録】 AIRのHTMLLoaderは画面に表示しなくても使える

AIRをFlexスタイルで開発している、、、んだけど、世の中にはJavascriptの有用なライブラリがいっぱいあって、ActionScriptにはない、からJavascriptの部分だけ使いてーよー。という場合。

Javascriptを処理させるにはHTMLLoaderにJavascript(を含むHTML)ソースを食わせると良い。

HTMLLoader君は画面表示のための機能がいろいろあったりする(HTMLLoaderはDisplayObjectContainerを継承している)ので、表示しないと使えないかと思いきや、実はnewして、URLをloadさせてあげるだけでJavascriptは実行される。ナイス。

当然、AS側からコントロールできないと意味ないのでブリッジを作ってやる必要があるのだが、それもごく簡単。

AS側からJS関数を叩くなら、
var html:HTMLLoader = new HTMLLoader;
(・・・load・・・とか)
(completeイベント以降で)
html.windows.someJsFunc(x,y,z);
とかやるだけ。要はhtml.windowがJS側のグローバルスコープそのものになっている。
(ので、おなじみのgetElementByIdもAS側から呼べるぞ)

一方JS側からAS側の関数をコールバックさせたいなら、
var html:HTMLLoader = new HTMLLoader;
(・・・load・・・とか)
(domInitializeイベント以降で)
html.windows.someJsFunc = someAsFunc;
とかやっておけばよろしい。html.windowはリードオンリーではなく、オブジェクトの注入も可能だ。
JS側でsomeJsFuncを叩くと、AS側のsomeAsFuncが呼ばれる仕組み。

散々公式ドキュメント読んだんだけど、全然わからなくて泣いた。
上のを知ってからHTMLLoader.windowの説明を読むと「あ、そういうことですか」と合点が行くのだが・・・。

【備忘録】 AIR1.xから2.xへの切替

AIR1.xで作っていたアプリを2.x対応にするために、アプリケーション記述ファイルを書き換えて再コンパイル・・・するだけだとコンパイルエラーになる。

難しいことは良く分からないのだが、テーマとかいうのがHaloからSparkになったからなんだって!
今までmxmlファイルで「mx:ほにゃらら」としていたところを「s:ほにゃらら」にしなきゃいけなくって大変だ、というものぐささん(ていうか自分)の場合は、Haloを使い続けることもできる。

そういうものぐさ野郎はここを見て2.xでHaloを使い続けられるようにすべし。