2012年07月11日

iOSシミュレータと実機のキャッシュを殺せ

 iPhoneアプリを作成するとき、iOSシミュレータは必須であり、まずはシミュレータでアプリを動作させる。シミュレータを扱う上での注意点はキャッシュされたアプリデータである。キャッシュされたデータを削除しないとXcode上での変更がiOSシミュレータで反映されないことがある。

  iOSシミュレータにアプリをインストールするのは簡単で、XcodeでiPhoneもしくはiPadのシミュレータを選択してビルドすればよい。シミュレータでの動作確認には開発用プロビジョニングプロファイルは不要なので、iOS Developer Programに登録する必要はない。そのままビルドすればよい。

 Xcode 3.2.xのときのシミュレータはだいたいの大きさでシミュレート表示していた。iPhone 3GもRetinaのiPhone 4もほぼモニタでは同じサイズ表示される。何が違うのかというと、角丸が大きい場合はiPhone 3GSまででiPhone 4以降は角丸が小さくなって、シミュレータの表示はほぼ矩形になる。しかしモニタでの表示サイズは同じであった。

 この方法でのデメリットは、ピクセル等倍で表示できないということである。iPhone 4以降のRetinaで表示してもピクセル数は実機の解像度に相当しないため、ディテールがわかりにくい。サイズの小さいテキストはほとんどシミュレータの役割を果たさない。

シミュレータでもピクセル等倍で表示するべきだ

という意見はアップルの社内で当然あっただろう。しかしMacBookでもiPhone 4 Retinaの高さ「960 pixel」は収まりきらない。iPadのRetinaに至っては高さが「2048 pixel」あるので、3分の1くらいしか表示できなくなってしまう。そこでアップルからの解答は

MacintoshもRetinaにしてiOSシミュレータに対応するぞ


というものであった。もちろんMacintoshのRetina化の最大要因がiOSシミュレータのためということではないだろうが、iOSシミュレータでより実機に近い表示を望む場合はRetina Macintoshを使いましょうという、アップルからのお達しである。

 SakuttoBookはPDFや関連ファイルを差し替えるだけなので、iOSシミュレータでアプリを動作させるのは簡単なのだが、けっこう問い合わせが多いのは、

PDFを差し替えても反映されませんがどういうことでしょうか

というものである。もともとXcodeのプロジェクトフォルダ内にある「document.pdf」を同じファイル名に差し替えて、iOSシミュレータを動作させると、そのPDFがアプリとなって表示されるはずなのだが、すり替わらないのである。

 このままではSakuttoBookの「PDFを差し替えるだけでアプリができます」というキャッチフレーズが嘘になってしまう。もちろん原因はSakuttoBookにあるわけではない。iOSシミュレータのアプリキャッシュデータが更新されていないということが原因である。というのは、SakuttoBookを動作させるとき、まずデフォルトで入っているサンプルPDFを使ってiOSシミュレータを起動する。そうすると、サンプルのアプリデータがiOSシミュレータ内に残ってしまう。それが削除できていないから反映しないのである。

 iOSシミュレータでも実機でも同じだが、アプリの識別は「info.plist」にある「Bundle identifier」で行う。Bundle identifierは完全なユニークテキストでなければならないので、通常URLの文字列を逆さましてそこにアプリ名を識別するためのテキストを追加する。しかしPDFを差し替えてiOSシミュレータ用にビルドすると、すでにiOSシミュレータ上にある同じBundle identifierのアプリがインストールされているので、再ビルドしたアプリが更新されないのである。

120711-02.gif
*Bundle identifierにユニークテキストを指定する。iOSシミュレータで複数のアプリを使い分けないときは、そのままでいい。通常アプリを申請するときのBundle identifierを入力する。

 アプリを更新するには、iOSシミュレータのメニューから[コンテンツと設定をリセット]を選択してiOSシミュレータ内のキャッシュデータをすべて削除する。もし複数のシミュレートされたアプリがあって、アプリを選択してキャッシュデータを削除したいときは、iOSシミュレータ上にあるホームボタンを長押し(マウスで長押し)すると、実機と同じように「×」がアプリに表示されて削除可能になる。

120711-01.gif
*OSシミュレータのメニューから[コンテンツと設定をリセット]でアプリを更新するたびにリセットしておくと確実。


120711-03.gif
*iOSシミュレータでホームボタンを長押し。再度長押しすると通常のモードに戻る。


 Xcodeでアプリを作成してiOSシミュレータでビルドして、次に実機にインストールして、申請用にビルドしてなどと煩雑な手順を踏んでいると、ついつい[コンテンツと設定をセリット]を忘れてしまうことがある。しかし考えてみれば、iOSシミュレータでビルドするとき、iOSシミュレータ上に同じ識別子のアプリがあるとき

同じ識別子のアプリがあります。
更新しますか?


とか聞いてくるアラートを表示させればよい。そこでコンテンツをリセットすれば、すでにあるアプリのキャッシュは削除されて、変更したプロジェクトで再ビルドできるようにすればよい。

 そういう意味では、Xcodeのインターフェースは脇が甘いといわれても仕方がないのではないかと思うがどうだろうか。古いアプリキャッシュを自動的に更新させない理由があるのだろうか。それともビルドしたデータをiOSシミュレータに転送するとき、iOSシミュレータ内のアプリデータにアクセスしてチェックできない理由があるのだろうか。

 ちなみに実機でも確実に変更したアプリデータを反映させるためには、実機上でインストールしたアプリを先に削除しておく方が確実だ。いずれにしてもiOSシミュレータを使うときは[コンテンツと設定をリセット]を忘れないようにしよう。






◆落とし穴を回避するiOSアプリのビルドと申請[インクナブラのiPhone、iPadのiOS電子書籍セミナー]
〜Xcode 4.3.xでするアプリの実機インストールと配信用ビルドとは〜
http://bit.ly/MeW9LI





◆Xcode 4でする実機インストールの動画チュートリアルをアップ
http://bit.ly/JEofvK

◆Xcode 4でiOSアプリの設定と申請を最短距離でする方法
http://bit.ly/Jk88Bc

◆SakuttoBook(サクッとブック)でiPhoneアプリを作る方法
http://bit.ly/mhgjCG

◆SakuttoPubliパーソナル:iPhoneブックアプリ開発・申請代行はお任せ下
さい。
http://bit.ly/swjdFW

◆Xcode 4対応のSakuttoBook Lite版ならぬTrial版、無料ダウンロード開始
http://denshi-shoseki.seesaa.net/article/263470895.html


 


posted by @jink0222 at 20:56 | Comment(0) | TrackBack(0) | SakuttoBook日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック