2011年1月14日金曜日

iOSアプリの動作をシミュレーターと実機で分岐する方法メモ

Cameramaticのカメラ周りの機能はUIImagePickerViewController を一切使用せず、AVFoundationフレームワークを利用しています。

AVFoundationを利用するとUIImagePickerViewControllerでは実現できないことまでカスタマイズが可能になります。
それはそれで大変素晴らしいのですが、一点だけ困ったことがありました。

AVFoundationはシミュレーターには対応していません。
(シミュレーター用にビルドするとエラーが発生する)

そのため、最初の頃は動作確認の際にいちいち実機に転送していました。
お察しの通りこれはすごく面倒です。

カメラ周りに関してはそういうものだと諦めていたのですが、カメラとは全然関係ない機能 (例えばFlickrに画像をアップロードする機能) の動作確認まですべて実機に転送しなければいけないというのは殺生です。


調べてみると解決策がありました。

シミュレータと実機で動作を分岐するには TARGET_IPHONE_SIMULATOR というマクロを使えば可能になっています。


#include "TargetConditionals.h"

#if TARGET_IPHONE_SIMULATOR
   // シミュレーター上でのみ実行される処理
#else
   // 実機でのみ実行される処理
#endif


TARGET_IPHONE_SIMULATORはTargetConditionals.hというファイルに定義されているので最初にincludeしておきます。


#if !TARGET_IPHONE_SIMULATOR

#import <AVFoundation/AVFoundation .h>

#endif
このように書くと実機でのみAVFoundationをimportします。
(もちろんここ以外にもAVFoudationを前提としている箇所にTARGET_IPHONE_SIMULATORで分岐処理を書く必要はあります。)

0 件のコメント: