読者です 読者をやめる 読者になる 読者になる

RetroWeb ~iPhoneとAndroidでハイブリッドゲームアプリ開発~

AIR for iOS+AndroidでSmartPhone Game ハイブリッドアプリ開発

最近作ったアプリ
100億本の抜け毛 100億匹のモナー DQ3闘技場アプリ モナーペット(進化)

iPhoneアプリとAndroidアプリ両方同時に更新して、アプリインストールもなく即テストする方法

[Adobe AIR][AIR for Android][AIR for iOS][ゲーム開発]

VAIO Zにしたら、なぜかFlashからUSB接続経由でiPhoneにアプリのipaを転送できなくなってしまったので、swfローダーアプリ作りました。これでswfさえサーバーにアップすれば、誰でもすぐ最新版のテストができます。使い方はサーバー側のswfが更新されたらアプリを再起動するだけ。最初の1回しかインストールの手間がかからないので、毎回つないでインストールや、TestFlight周知して頑張るより圧倒的に手軽ですw iPhone版とAndroid版が両方同時にワンタッチで更新できます。さらにaneさえ同じなら、別アプリのテストもできます。特にAndroidはaneがあるとパブリッシュ&転送に、開発者本人ですらなぜか毎回数分かかったりするので、それが10秒くらいになるのはデカいと思います。

ポイントは母体となるアプリに必要なaneを入れておく点と、iOSの場合はインタープリターモードでipaを書き出す点と、下記の1行です。これで外部SWFのASも動くようになります。
loaderContext.applicationDomain = ApplicationDomain.currentDomain

aneのクラスをダミークラスにして記述しておけば、PCブラウザからもアプリの確認ができて、さらに心強くなる予感。

テストラッシュが済んだら、本番用のアプリに書き出して、最終テストしてリリース。

サンプルソース(sample source)

var _TARGET_SWF_PATH:String = "http://hoge.hoge/hoge.swf";//plz change your swf

var _so:SharedObject = SharedObject.getLocal("LoadTest", "/");

startLoad();

function startLoad():void{
/*	if(_so.data.swfBin){
		loadSwfBin(_so.data.swfBin);//optional(avoid reload)
	}else{*/
		loadFile(_TARGET_SWF_PATH);
//	}
}



function loadFile(url:String):void {
   var urlLoader:URLLoader = new URLLoader();
   urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
   urlLoader.addEventListener(Event.COMPLETE, onCompleteURLLoad);
   var urlReq:URLRequest = new URLRequest(url);
   urlLoader.load(urlReq);
}
 
function onCompleteURLLoad(evt:Event):void {
	var bytes:ByteArray = _so.data.swfBin = URLLoader( evt.target ).data;
	_so.flush();
	loadSwfBin(bytes);
}

function loadSwfBin(bytes:ByteArray):void{
   var loaderContext:LoaderContext = new LoaderContext();
   loaderContext.allowCodeImport = true;
   loaderContext.applicationDomain = ApplicationDomain.currentDomain;// new ApplicationDomain();
   loaderContext.allowLoadBytesCodeExecution = true;
	
   var loader:Loader = new Loader();
   loader.loadBytes( bytes, loaderContext );
   addChild(loader);