2010年11月29日月曜日

iOSアプリ検証日誌 11

■ベンチマーク1/デバッグタイプでパブリッシュ

▼CS5/GPU

function call = 17270 ms
int add       = 1547 ms
int sub       = 1552 ms
int mul       = 1492 ms
int div       = 1552 ms
int shift     = 1363 ms
double add    = 11791 ms
double sub    = 11788 ms
double mul    = 11623 ms
double div    = 11681 ms
double cos()  = 19226 ms
double sqrt() = 18205 ms
double normalize(fx,fy,fz) = 28271 ms


▼CS5/CPU

function call = 17287 ms
int add       = 1544 ms
int sub       = 1571 ms
int mul       = 1500 ms
int div       = 1544 ms
int shift     = 1357 ms
double add    = 11868 ms
double sub    = 11842 ms
double mul    = 11737 ms
double div    = 12074 ms
double cos()  = 19019 ms
double sqrt() = 18188 ms
double normalize(fx,fy,fz) = 28368 ms


▼CS5/自動

function call = 17535 ms
int add       = 1651 ms
int sub       = 1598 ms
int mul       = 1598 ms
int div       = 1598 ms
int shift     = 1444 ms
double add    = 11420 ms
double sub    = 11542 ms
double mul    = 11458 ms
double div    = 11458 ms
double cos()  = 19028 ms
double sqrt() = 17916 ms
double normalize(fx,fy,fz) = 28280 ms




■ベンチマーク1/テストタイプでパブリッシュ

▼CS5/GPU
function call = 2723ms
int add       = 172ms
int sub       = 173ms
int mul       = 175ms
int div       = 176ms
int shift     = 176ms
double add    = 8737ms
double sub    = 9092ms
double mul    = 8776ms
double div    = 8753ms
double cos()  = 10794ms
double sqrt() = 10309ms
double normalize(fx,fy,fz) = 10984ms

▼CS5/CPU
function call = 2747ms
int add       = 173ms
int sub       = 173ms
int mul       = 174ms
int div       = 171ms
int shift     = 169ms
double add    = 9031ms
double sub    = 9363ms
double mul    = 8972ms
double div    = 8937ms
double cos()  = 11310ms
double sqrt() = 10695ms
double normalize(fx,fy,fz) = 11441ms

▼CS5/自動
function call = 2652ms
int add       = 173ms
int sub       = 172ms
int mul       = 176ms
int div       = 171ms
int shift     = 169ms
double add    = 8790ms
double sub    =  8854ms
double mul    =  8860ms
double div    = 9141ms
double cos()  = 11136ms
double sqrt() = 10731ms
double normalize(fx,fy,fz) = 11292ms

2010年11月24日水曜日

iOSアプリ検証日誌 10

久しぶりだけど、覚書がたまってきたので。

・エミュレータでのデバッグ
DeviceCentralのサードパーティー製iPhoneプロファイルじゃデバッグできない(読み込めない)。
仕方ないから、
・プロファイル:Flash Player 10.1 320*480 Multitouch
・コンテンツ:HTMLへの埋め込み
でエミュレートしてる。
加速度センサの簡単なエミュレートくらいなら問題なくできるし。

・WindowsのiTunes, Macのに比べて使いにくい。。。
アプリのバージョン番号上げても、きちんとデバイスに自動アップデートしてくれなかったりするし。
遅いし(PCのせいだけど)。

・実機でのデバッグ
リモートデバッグセッションを活用すること。
TextFieldに書き出す方法だと、実行速度がものすごく落ちるので、デバッグにならない。
TextFieldへのテキスト追加はもちろん、TextFieldを表示リストに置いているだけでも、動作速度が天と地ほど違う。
(ダイナミックテキストを使用するアプリを作るときの苦労が目に見える。。)
デバッグモードのアプリは、起動にかなり時間がかかる。画面が10数秒真っ黒のままになるけれど、じ我慢して待つ。
よくアプリ起動せずに落ちるけど、めげない。

ということは、Packager自体はタダだけど、まともにデバッグしようとしたらやっぱりCS5必要ってことになるのかなあ。

・GPUレンダリング診断モードは、確認になるし、やってる気分になれていい。
コマンドは次の通り。

>"C:\Program Files\Adobe\Adobe Flash CS5\PFI\lib\pfi.jar" -package -target ipa-debug -provisioning-profile [provisionのパス] -storetype pkcs12 -keystore [p12ファイルの場所] -storepass [パスワード] "ipaファイル名" "アプリケーション記述ファイル" "swfファイル" (その他のアセット。あれば。)


---
あとはLED周りのTODO。
・今の環境では、レスポンスが帰ってくるまで300msecくらい。
・同じ明るさに調光するコマンドを送ると、1回調光しなおしてしまうから、同じ明るさだったらコマンドおくらないようにする必要がある。
・どうにもちかちかする。。上の実装してもなおらないようなら、より一層平滑化は必須になりそう。

2010年11月9日火曜日

iOSアプリ検証日誌 9

windowsでの証明要求作成
うまくいかない件、解決した。。

現象:
packagerのドキュメントどおりにCSRを作成するものの、Dev Centerにアップロードしようとすると、
We are unable to upload this Certificate file because it is invalid. Please check the file and try again.
という不親切なエラーでリジェクトされる。

解決方法:ChromeやFireFoxではなく、SafariでCSRをアップロードする。

http://blog.romanandreg.com/post/1416359998/we-are-unable-to-upload-this-certificate-file-because

とはいえ、結論としてはこのステップはMacで行ったほうがずっと楽だ。
たった1回の証明書作成のために、OpenSSL, Visual C++ 2008 ReDistributable, Safariをインストールしなきゃならないのは手間がかかりすぎる。

p12ファイルとプロヴィジョンのファイルがあれば、コンパイルも実機テストもできるんだし。

追記:
新しく作成した証明書とプロヴィジョンでのアプリケーションインストールまで確認しました。
むしろ、プロヴィジョンのアップデートに時間をかけてしまった。。
iTunes上でprovisionの内容の確認できないし、きっちりしないと逆に躓く原因になるなあ。

2010年11月8日月曜日

iOSアプリ検証日誌 8

できたこと

Accelerometerの値を取得してみた。
加速度ベースのジェスチャ(シャッフルでアンドゥ、等)はAPIには入っていない。
ざっと検索してみたけれど、(当然ながら)AS3の加速度ベースジェスチャ認識ライブラリっていうのはない。
本当に必要になったら、他の言語のライブラリを移植することになるんだろうな、という感じ。
(自分で実装するのは、難しすぎて割に合わなさそう。。)
今日は本当に取得値をトレースしてみただけなので、次は傾きでボールが転がるORジェスチャ時の値をグラフ表示するアプリでも作ってみるか。

Geolocation APIの値を取得してみた。
以下、計測値など。
--
▼屋内
latitude:35.67654243384615
longitude:139.78036281307692
altitude:0
horizontalAccuracy:65
verticalAccuracy:-1
heading:(デバイスによる。時計回りでの360度での角度またはNaN)
speed:-1

まず緯度経度について、とりあえずGoogleMapsで確認すると、きちんと計測できていることが確認できる(測地系や値の形式が同じなので、何も考えなくてもいい)

誤差について、mから度数に換算してみました。
・緯度
誤差65mのとき、緯度1度単位での誤差は、0.00058432=(65m/緯度一秒の距離30.9m)/3600。
・経度
誤差65mのとき、経度1度単位での誤差は、0.00072222=(65m/緯度一秒の距離25m)/3600。

verticalAccuracy, speedの-1は、ActionScriptのリファレンスには記述がないけれど、CocoaTouchのリファレンスによると、有効な値が取得できていない状態らしい。
altitudeの0も、有効な0ではないと思われる。

▼屋外
latitude:35.676447216
longitude:139.7806502833
altitude:20.712448120117188
horizontalAccuracy:47.42168335498
verticalAccuracy:70.28100138
heading:(デバイスによる。時計回りでの360度での角度またはNaN)
speed:徒歩だとほぼ0。車などでは変わるかもしれない。


イベントの来るタイミングに、かなりばらつきがある。
屋内では更新の頻度が落ちる傾向にある。何分も更新されないこともある。
屋外では、ほぼ毎秒に1回更新される。
(値の更新間隔をセットすることはできるが、主に頻繁に更新される状況を防ぐ意味のものなので、
Geolocationにおいては実装に使う必要があまり感じられない。)


▼その他参考

それにしても、屋内なのにとても正確に位置がわかるのに驚いてしまう。

▼詳しくは

ジャイロ
iPhone4にはジャイロセンサがついているけれど、AIRのAPIはないですね。


▼後で見る
・MAX2010の講演資料(カメラ、GPS、加速度)
(もう見た)加速度onモバイルデバイスのまとめ(2008)

iOSアプリ検証日誌 7

CameraUIクラス、というデバイス標準のカメラ制御アプリを使えるAPIがAIR2.5からできたらしい。
iOSでは使えないけれど。静止画および動画のキャプチャができるとのこと。

開発者向けリリースノート
ユーザ向けリリースノート

iOSアプリ検証日誌 6

できたこと

HTTP接続のモニタリングを試してみた。
(特定のホストの80番ポートに対する接続を常にモニタしてくれるというもの)

結局、モバイル環境でのネットワーク接続への対策としては、IOErrorEventのハンドラを、まじめに実装する、というのが推奨されている。

モニタリングは、社屋の中と周辺で、wifi→3G→圏外→3G→wifiという順で接続環境を変化させてみた。

基本的には、ネットワーク接続が失われたときにunavailableに、接続再開したときにavailableになる、とというイベントのみ発生する。
wifiと3Gの接続変更時には、基本的には何も起こらないが、まれに1度unavailableになってからすぐにavailableになることもあるよう。

このモニタリングがどのくらいリソースを食うのかは未確認。
それなりに頻繁にHTTPレスポンスを見るから、それなりに食っているのではないかと思うけれど。
  • ServiceMonitorのリファレンスには、接続が変化するたびにイベントが発生するとあるが、そうでもない。
  • 同じく、StatusEvent.codeより、ServiceMonitor.availableを使え、とあるが、イベント発生ごとに見ている限り、両者にずれはなさそう。
  • ServiceMonitor: http://help.adobe.com/ja_JP/Flash/CS5/AS3LR/air/net/ServiceMonitor.html



http以外のスキームのうち、
mailto:
tel:
sms:
も試してみた。
tel:スキームは、電話をかけるか否かをユーザに確認するダイアログが出ないので、自分で実装する必要がある。

2010年11月2日火曜日

iOSアプリ検証日誌 5

できたこと
テキスト、およびバイナリ形式でのファイルの保存と読み込み。
Loaderによる画像の読み込み。

所感
検証、というか、トピックとして残している点は、次の2つ。

ビデオまわりの読み込み、および再生
読み込んだSWFに含まれるアセットの利用

とりあえず流して、時間があればやるリストに入れるか・・・。

iOSアプリ検証日誌 4

できたこと

タッチ入力について
  • TouchEventは利用できる。最大タッチポイント数は5.
  • 接触領域の広さ(sizeX, sizeY)、および接触圧は取得できないよう。すべて常に1となる。
ローカルファイルストレージについて
ApplicaitonDirectoryは
/var/mobile/Applications/[16進8桁]-[16進4桁]-[16進4桁]-[16進4桁]-[16進12桁]/[App名].app
ApplicaitonStorageDirectoryは
/var/mobile/Applications/[16進8桁]-[16進4桁]-[16進4桁]-[16進4桁]-[16進12桁]/Library/Application Support/[AppID]/LocalStore
にそれぞれ存在する。
16進数の部分はAppごとに異なる。

モバイルアプリに必要な機能を最初から提供してくれるらしい、試したいですねえ。