Archive for 1月, 2011

iOS端末を判定する

2011年 1月 31日 Published by under 開発

iPad で重宝しているウェブアプリケーションの一つに 37signals Chalk があるんだけど、PC のブラウザで表示すると「サポートしていません」という旨を示すエラーページに飛ぶ様になっている。ところが最近のブラウザにはユーザエージェントを変更(悪く言うと偽装)できるものが多くて、そうすると実際に iPad で表示するものを簡単に見られてしまい開発者としてはあまり心地良くない場合もあると思う。

そこでユーザエージェントだけを使って判定する事に加えて、以前書いた様に iOS の Mobile Safari が持っているタッチイベントを持っているかどうかを併せて条件に入れておくと確実で良い。

if (('createTouch' in document) && (navigator.platform === 'iPad')) {
  window.location.replace('path');
}

コメントは受け付けていません。

ビデオを最適化するとiOSに同期しなくなる問題

2011年 1月 25日 Published by under 評価

iMove ’11とその新機能である予告編作成はとても手軽で面白いのだけど、iPhone 4 の動画撮影能力の弱さと iPhoto との連携による不安定さによって、たまにおかしな問題を起こす事がある。今回ちょっとハマってしまったのは、イベントライブラリにある iPhoto ビデオのファイルが iMovie で編集を加える事によって iOS との同期に失敗するというもので、具体的には次の様に再現できる。

環境:

  • Mac OS X 10.6.6
  • iMove ’11 バージョン 9.0.2 (1099)

手順:

  1. “ファイル>新規プロジェクト>映画予告編>ブロックバスター” からプロジェクト(アスペクト比=16:9/フレームレート=30fps – NTSC)を作成する。
  2. “絵コンテ>アクション・スロー” に iPhoto ビデオ(今回は少し暗い場所で撮影した、プロジェクト自体とフレームレートの異なる動画)を差し込む。
  3. 警告ダイアログに従って “ファイル>ビデオの最適化” を実行する。

すると、iMovie では問題無く動画の作成を終える事ができるが iTunes に iOS 機器を接続して上述した手順2で選択した動画ファイルを同期しようとすると次の様なエラーを出力して処理に失敗してしまう。

そこで Spotlight を使ってファイル名を検索してみると同名のファイルが「~/ムービー/iMovie オリジナルムービー/」フォルダに複製されている事が分かったので、解決策としてはこちらの動画ファイルを iPhoto に読み込み直すと同期が可能になる。iPhoto 上の問題ある動画ファイルは、内容が同じな事もあるので捨ててしまっても iMovie 側のファイルに影響が及ばない。

一応 iMovie の日本語フィードバックページから状況を投げておいたので対応に期待。

コメントは受け付けていません。

iOSでシェイクを検知する

2011年 1月 20日 Published by under 開発

今回の更新作業の中でもう一つ、iPhone を持って振る(シェイクする)方法を変更した。iOS 2 までは Accelerometer を使うしか道はなかったのだけど、iOS 3 になってから motionBegan, motionEnded, motionCancelled 関数が追加されていて単純な処理だったらこちらを使う方が良い。また、いちいち実機へビルドしなくともシュミレータでデバッグできる(cmd+ctrl+zという左手によるショートカットが楽な)のが最も大きな利点だ。

実際には ViewController.m ファイルで次の様な三つの関数を記述した。

- (BOOL)canBecomeFirstResponder {  
  return YES;  
}
 
- (void)viewDidAppear:(BOOL)animated {
  [self becomeFirstResponder];
}
 
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
  if (event.type == UIEventSubtypeMotionShake) {
    [webView stringByEvaluatingJavaScriptFromString:@"shake();"];
  }
}

重宝している書籍「iPhone SDK開発のレシピ」のサンプルコードが Github に置いてあるのだけど、該当するレシピ番号080が見当たらないのはこのせいなのかもしれない。

P.S. iOS 4.2 からは Safari で加速度センサーを使えるようになったので、ウェブアプリ版として公開する場合にも同じ挙動で仕様を作る事ができるのは有り難い。

コメントは受け付けていません。

Next »