2013-05-27

AIR for iOS 實機測試時的遠端除錯 FarLog

# 2013-06-07 修正:遠端除錯 FarLog 修正

Flash 的 debugging mode 不好用,試了好幾次都沒成功。索性用 Mamp ( Apache, PHP ) 寫了個遠端除錯功能,適合在區域網路內使用。

PHP 簡單三個檔: index.php (顯示), log.php (接收) 和 clear.php (清除)。log.php 接收資料記錄到文字檔裡,由 index.php 顯示文字檔內容。

log.php
<?php
date_default_timezone_set('Asia/Taipei'); 
if(isset($_REQUEST['log'])) {
 $fp = fopen('log.txt', 'a+');
 $time = date("H:i:s ::: ");
 fwrite($fp, $time . $_REQUEST['log'] . "\n");
 fclose($fp);
}

index.php
<?php
 echo '<meta charset="UTF-8"><pre>';
 $log = file_get_contents('log.txt');
 echo $log;
 echo '</pre>';

clear.php
<?php
unlink('log.txt');

AS 的部份是發出 HTTP request, 使用 lin.shinder.utils.FarLog 類別的 log() 靜態方法。2013-05-28 修改
package lin.shinder.utils
{
 import flash.net.URLRequest;
 import flash.net.URLLoader;
 import flash.net.URLRequestMethod;
 import flash.net.URLVariables;
 import flash.utils.getTimer;

 import flash.events.Event;
 import flash.events.IOErrorEvent; 
 // import flash.events.HTTPStatusEvent;
 // import flash.events.SecurityErrorEvent;

 /**
  * @date 2013-05-27
  * @author shinder.lin@gmail.com
  */
 public class FarLog 
 {
  public static var requestEnabled:Boolean = true;
  private static const LOG_URL = "http://192.168.0.103:8888/farlog/log.php";

  
  public static function log(msg:String) {
   if(requestEnabled) {
    var req:URLRequest = new URLRequest( LOG_URL );
    var vars:URLVariables = new URLVariables;
    var loa:URLLoader = new URLLoader;

    vars.log = getTimer() + ' : ' + msg;
    req.method = URLRequestMethod.POST;
    req.data = vars;
    loa.addEventListener(IOErrorEvent.IO_ERROR, eventHandler, false, 0, true);
    loa.load(req);
   }
   trace(msg);
  }

  private static function eventHandler(event:Event):void {
   // trace(event);
  }
 }
}
初步使用情況還算滿意。

1 則留言:

Shinder 提到...

用 server 的時間做為識別是不智的決定,應該用 client 的時間。

FB 留言