システムのウィンドウ枠がないアプリを作る方法

アプリケーション記述ファイルのsystemChromeをnoneに設定し、transparentをtrueにすればよい。
記述例は以下の通り。


        Test
        Test app!
        Sample app copyright information
        
                Main Window
                Test.swf
                true
                none
                true
                800
                600
        
        

しかし、システムのウィンドウ枠がないと閉じるボタンがないためアプリ側でアプリケーションを終了させる方法を提供する必要が出てくる。

アプリケーションを終了させるには、現在開いているすべてのNativeWindowのインスタンスを取得し、close()メソッドを呼べば良い。コードは下記の通りとなる。

import flash.display.NativeWindow;
import flash.system.Shell;

function closeAllWindows():void {
                 Shell.shell.openedWindows.forEach(function(nw:*, index:int, arr:Array):void {
                          nw.close();
                 });
}

実際は、いきなり全てのwindowを閉じていい場合は少ないと思うが上記のコードのようにflash.system.Shellクラスのstaticプロパティを使うケースは多いのではないかと思う。

AIRのパッケージ作成方法

AIRアプリケーションをパッケージングするには、beta2からデジタル署名が必要になった。

とりあえずは、adtコマンドを使って署名ファイルを作成できる。

$adt -certificate -cn SelfSigned 1024-RSA sampleCert.pfx samplePassword

これでsampleCert.pfxというファイルができるので、このファイルを使ってAIRパッケージを作る。

例えば、アプリケーション記述ファイルがTest-app.xml、アプリケーション本体がTest.swf、パッケージ名がTest.airの場合、
下記のコマンドで作成出来る。

$adt -package -certificate sampleCert.pfx -password samplePassword Test.air Test-app.xml Test.swf

Test-app.xmlの記述ないように誤りがなければこれで、Test.airが作成される。

ここで一つだけ注意が必要なのだが、Test-app.xmlxml宣言に誤りがあるとこのコマンドを実行した際に下記のようなエラーが発生する。

error 100: Application descriptor cannot be parsed

adlコマンドはアプリケーション記述ファイルが多少仕様からはずれていても実行できるようだが、adtコマンドは正確な記述を要求する。
そのため、adlコマンドで実行できていたものがパッケージの段階で上記エラーが発生するということがあるようだ。