iPhoneシミュレータと実機の違い

iPhoneシミュレータを使った開発から実機開発に移行したときに、実機との差異でつまずいた箇所とその回避策をメモ。

NSDateCalenderクラスの使用

差異

NSDateCalendarは実機では利用できません。Mac OS Xでも非推奨になる予定のようです。

Date and Time Programming Guide for Cocoa

This class does not exist in iPhone OS and is slated for deprecation in Mac OS X.

代替手段

このクラスの機能は、NSCalendar と NSDateComponentsで代替できます。詳しくは 【Cocoa】NSDateから日時の値を取得する: ページアウトされた記憶の残骸を参照。

注意としては、NSDateCalendarクラスでは何もしなくてもデフォルトのタイムロケールを考慮してくれるけど、NSCalendarはしてくれない。NSCalendarから移行する場合には要注意。(僕はここではまった)

NSDate#descriptionwithcalenderformatの使用

差異

実機向けのビルド環境で NSDateオブジェクトを文字列に変換する descriptionwithcalenderformatを使用すると警告が出ます。実行はできますが、非推奨なのかもしれません。

Apple - Support - Discussions - Warning - NSDate's ...

Warning - NSDate's descriptionWithCalendarFormat

代替手段

NSDateFormatterクラスで代替できます。使い方は ほぼ日、MacのGUI - Date Picker(日付の選択) : 強火で進めを参照。



自分が見つけた違いはこれだけで、その他はシミュレータと実機で同じコードが動作しています。もちろん、細かな挙動やパフォーマンスではいろいろな違いはあるけど、iPhoneシミュレータはよくできてます。