2014-03-06追記
この記事、だいぶんほったらかしにしていましたが、Adobe AIR の近頃のバージョンでは AOT 時にリモート用の SWF を指定すると、DoABC タグを自動的にパッケージ側に取り込んでくれる機能が付きました。
こいつがかなりのビルド時間をもたらしてくれる厄介な機能でもあるんですが。。
ここからが本文
Apple の意向で、Adobe AIR for iOS は AOT としてビルドしたパッケージしかリリース出来ません。
ですが、AOT ではリモートやローカルストレージから取得した DoABC タグが組み込まれた SWF ファイル(スクリプト付き SWF ファイルやリンケージ付き SWF)を実行出来ません。
なので、DoABC を削除する方法が必要となり AIR で作ってみました。
swc を取ってくる
https://github.com/claus/as3swf
http://github.com/claus/as3swf/blob/master/bin/as3swf.swc
コード
as3swf.swc を使って
import com.codeazur.as3swf.SWF
// .....
var swfBytes:ByteArray = // SWF ファイルのバイト列
var swf:SWF = new SWF(swfBytes)
var abctag:TagDoABC = swf.tags.filter(function(item:ITag, index:int, array:*):Boolean {
return item is TagDoABC;
})[0]
var index:int = swf.tags.indexOf(abctag)
swf.tags.splice(index, 1)
var published:ByteArray = new ByteArray();
swf.publish(published);
こうして作った published をファイルとして保存すれば DoABC が綺麗になくなります。
注意
ただし、この方法で削除した DoABC が削除されることでリンケージはなかったものになってしまいます。
なので、その代わりとなるリンケージ用クラス(名前はリンケージ名と同じもの)を自分で宣言しなおしてあげなければなりませんのでご注意を!
なお、設定したリンケージ一覧は SymbolClass タグに書かれているのでプログラムから取得が可能です。