iPhoneとiPod Touch

現在書いているiPhone用アプリケーションはカメラは使うが位置情報や近接センサー情報を使わないので、漠然とiPod Touchでも動くだろうと思ってはいたのだが実機が手元に無いので検証しようが無い。 どうしても、どうしても動かしてみたくなったのでiPod Touchを導入した。

Apple iPod touch 32GB White MD058J/A

Apple iPod touch 32GB White MD058J/A


ハードウェアの違いだが、大まかには以下の違いがある。

機能 iPhone4S iPod Touch4G
CPU A5 1Ghz A4 800Mhz
RAM容量 512MB 256MB
LCD方式 IPS TN
GPS搭載 有(A-GPS) 無(Wi-fiによる位置計測有)
デジタルコンパス
バイブレーション
LEDフラッシュ
カメラ画素 5Mピクセル 2Mピクセル
AF(オートフォーカス)
近接センサー
HDR撮影

実のところ開発環境のXcode上ではiPhoneiPodは分かれていない。ということは上記のハードウェアの違いをきちんと理解していれば、基本的にバイナリには互換性があるということだ。
なお、プラットホームの違いはuname関数で取得することが出来るutsname構造体から得る情報で判定できる。

@implementation DeviceUtil
+ (NSString*)platformName
{
    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString:systemInfo.machine
                              encoding:NSUTF8StringEncoding];
}
+ (BOOL)isiPhone
{
    return [[self platformName] bb_contains:@"iPhone"];
}
+ (BOOL)isiPad
{
    return [[self platformName] bb_contains:@"iPad"];
}
+ (BOOL)isiPodTouch
{
    return [[self platformName] bb_contains:@"iPod"];
}

結果から書くとiPhone用のアプリケーションはそのまま、何の手も入れずにiPod Touch上でも動作した。ただしカメラの画素数も少なく、オートフォーカスも効かないし※、フラッシュのトーチモードも無いのでそこは動作しないものとして機能が無効になるように組む必要がある。例えば、上記のisiPhoneの戻り値によってバイブレーションの有無を予め決定しておく、等の考慮が必要だ。

あとはiPod Touch 4GはRAMがiPhone 4Sの半分しか無いのでより頻繁にMemeory warningが飛んでくることになる。メモリ管理はよりシビアにする必要があるようだ。

QRコードは問題無いが、よりフォーカス精度が必要な1Dバーコードの場合、読み込みは困難だった (ZBar使用)