シミュレータによるテストとデバッグ
シミュレータは、実デバイス上でアプリケーションをテストする前段階で、ラピッドプロトタイプその他の開発作業に活用できます。それだけでなく、アプリケーションやウェブアプリケーションのテストやデバッグにもおおいに役立ちます。シミュレータに組み込まれたツールを活用し、効率的に開発作業を進めてください。
シミュレータによるテストと実デバイスとの違い
シミュレータは有用なツールですが、ここでテストするだけで充分ということにはなりません。これ自体はMac上で動作するアプリケーションなので、CPU、メモリ、ネットワーク接続など、コンピュータ上のさまざまなリソースが使えます。これはいずれも、モバイルデバイス上のリソースよりも高速です。したがって、処理性能、メモリ消費量、ネットワーク速度に関しては、正確なテストになりません。同じ理由で、ユーザインターフェイスの性能テストも、実デバイス上で行う必要があります。シミュレータ上では、実際よりも高速かつ滑らかに反応するかも知れません。
さらに、ユーザインターフェイス要素によっては、実デバイス上でタッチ操作するよりも、シミュレータ上でマウス操作する方が使いやすい、ということもあります。
最後に、シミュレータにはハードウェアやAPIにもいくつか違いがあるので、実デバイス上とは異なる動作になるかも知れません。
ハードウェアの違い
デバイスの機能はほとんどシミュレート可能ですが、一部のハードウェア機能は実デバイス上で直接テストしなければなりません。iOS 8.2以降、シミュレートされないハードウェア機能としては、次のようなものがあります。
Motionのサポート(加速度センサーとジャイロスコープ)はサポートされていません。
オーディオおよびビデオ入力(カメラとマイクロフォン)はサポートされていません。
近接センサー
気圧計
環境光センサー
さらにWatchKitアプリケーションと、シミュレートしたホストデバイスとの間には、信頼性の高い接続があります。どちらもシミュレータ上で動作しているからです。
OpenGL ESの違い
シミュレータは、OpenGL ES 1.1、2.0、3.0それぞれの完全な実装を備えており、アプリケーション開発に利用することができます。シミュレータが備える能力はA7 GPU相当です。iOSハードウェアについて詳しくは、『』を参照してください。シミュレータをハードウェアプロセッサと比べると、いくつか違いがあります。
シミュレータはタイルベースの遅延レンダラを使用しません。
ピクセル単位の精度は、グラフィックスハードウェアと同等でありません。
シミュレータにおけるOpenGL ESのレンダリングパフォーマンスは、実際のデバイス上におけるOpenGL ESのパフォーマンスとまったく関係ありません。
APIの違い
シミュレータのAPIが、実デバイスのAPIの機能をすべて備えているわけではありません。たとえば次のような機能が該当します。
Appleプッシュ通知の送受信
Photos、Contacts、Calendar、Remindersにアクセスする際のプライバシー警告
UIBackgroundModesキーHandoffサポート
さらにシミュレータは、次のフレームワークにも対応していません。
External Accessory
Media Player
Message UI
UIKitの
UIVideoEditorControllerクラス
下位互換性
シミュレータは、iOSおよびwatchOSのあらゆる版との下位互換性を維持しているわけではありません。
シミュレート可能なiOSおよびwatchOSの版番号をXcodeで調べるには
「Hardware」>「Device」>「Manage Devices」コマンドを実行してください。
「Devices」ウインドウが開きます。
左側の欄の一番下にある「Add」ボタン(「+」の表示)を押してください。
するとダイアログが現れるので、「iOS Version」ポップアップメニューを開いてみてください。
メニューの上の方に、インストール済みのiOSの版が並んでいます。
他の版のシミュレータをダウンロードするには
「Xcode」>「Preferences」を実行して環境設定を起動します。
すると環境設定ウインドウが現れるので、「Downloads」タブに切り替えます。
必要な版のiOSシミュレータに対応する「Download」ボタンを押してください。
iPad miniでの動作をテストする
シミュレータ上でiPad mini用のアプリケーションをテストする場合、iPadのシミュレーション環境で実行してください。このとき、iPad miniの機種に応じ、Retinaディスプレイと非Retinaディスプレイのいずれかを組み合わせます。
アプリケーションのアクセシビリティをテストする
「Accessibility」インスペクタで、アプリケーションのアクセシビリティをテストできます。ここには、アクセス可能な要素それぞれについて、アクセシビリティ情報が表示されるようになっています。図5-1に、シミュレータ上で実行される「Accessibility」インスペクタの様子を示します。
「Accessibility」インスペクタを起動するには
シミュレータの動作中に、「Hardware」>「Home」コマンドでホーム画面に切り替えてください。
「Settings」をクリックします。
「General」>「Accessibility」の順に選択します。
その上で、「Accessibility Inspector」スイッチをオンにしてください。
シミュレータ上で「Accessibility」インスペクタをオンにすると、シミュレータの動作が変わります。要素をクリックしたとき、それがアクティブになるのではなく、インスペクタのフォーカスが当該要素に移動するようになるのです。要素をアクティブにするためには、ダブルクリックしなければなりません。さらに、「Accessibility」インスペクタが有効である間は、スワイプやドラッグのジェスチャーが認識されません。このジェスチャーをするときは、いったん「Accessibility」インスペクタを無効にする必要があります。
これは、インスペクタの左上隅にある、「閉じる」ボタン(「X」を丸で囲んだ表示)で行います。
ウェブアプリケーションをテストする
ウェブアプリケーションを開発し、デバイス上で実行したときの使いやすさをテストするためにも、iOSシミュレータは有用です。
シミュレータ上でウェブアプリケーションをテストするには
テストしようとするシミュレータ環境を、「Hardware」>「Device」>「デバイス名」で選択します。
シミュレータのホーム画面からSafariを起動してください。
ブラウザ上で、対象ウェブアプリケーションにアクセスします。
iOS用ウェブアプリケーションの開発について詳しくは、『Getting Started with iOS Web Apps』を参照してください。
iCloudのテスト
iCloudを使うアプリケーションを開発する場合、シミュレータ上でiCloud同期機能をテストした後、実デバイス上でのテストに移るとよいでしょう。テスト用デバイスの台数が足りない場合でも、多数のデバイスにまたがるiCloud同期機能のテストが可能です。
iCloudの同期機能をシミュレートするためには、まず、Apple IDを使ってシミュレータにサインインする必要があります。シミュレータでiCloudのテストを行うために、専用のApple IDをぜひ用意するよう推奨します。
Apple IDを使ってシミュレータにサインインするには
7.1以降が動作するデバイスを指定して、iOSシミュレータを起動します。
ホーム画面で「設定(Settings)」を開き、「iCloud」を選択してください。
Apple IDとパスワードを入力し、「Sign In」をクリックしてください。
するとiCloudの同期機能をテストできるようになります。アプリケーションがiCloudと正常に同期しているか、「Debug」>「Trigger iCloud sync」コマンドで確認してください。
バックグラウンドでのフェッチ処理のテスト
頻繁に内容が更新されるアプリケーションで、バックグラウンドでのフェッチ機能を利用している場合、Xcodeとシミュレータを使ってこの機能をテストできます。シミュレータ上でアプリケーションを起動し、Xcodeに切り替えて、「Debug」>「Simulate Background Fetch」を実行してください。
スキームの設定によって、Xcodeがアプリケーションを起動する方法を制御することも可能です。起動後すぐに一時停止状態にしたい場合は、「Product」>「Scheme」>「Edit Scheme」コマンドを実行し、「Background Fetch」チェックボックスをオンにしてください。
シミュレータ上でデバッグ用ツールを使う
表5-1に示すように、「Debug」メニューを通じてシミュレータのデバッグツールにアクセスします。
メニュー項目 | 起動した結果 |
|---|---|
Slow Animations | アプリケーション内で再生するアニメーションの速度を落とします。アニメーションに問題がないか、確認する際に有用です。 |
Graphics Quality Override | デバイスのデフォルトのグラフィックス品質を設定します。「Low Quality」を選択すると、古いシミュレートデバイスの一部操作のパフォーマンスを上げることができます。たとえば、ホーム画面を下方向にドラッグするとSpotlight画面に移行します。高品質なバージョンでは、ブラーアニメーションを使用できます。これは低品質なバージョンでは使用できません。 |
Optimize Rendering for Window Scale | この項目を選択すると、比率を変更したシミュレート対象デバイスの画面のレンダリング速度を向上することができます。iPad Proのような大画面のデバイスで有用です。 この項目がオンになっていると、スクリーンショットは比率を変更した解像度で保存されます。フル解像度のスクリーンショットを保存するには、この項目を一時的にオフにします。 |
Color Blended Layers | レイヤが重なり合っている部分を目立つように表示します。複数のレイヤを重ねて描画している箇所は、赤の強調表示になります。一方、重ね合わせなしで描画している箇所は、緑の強調表示になります。アプリケーションのパフォーマンスを大幅に向上するには、この項目をオンにしたまま、アプリケーションに示される赤の部分を減らします。表のスクロールが遅い場合、レイヤの過多が原因であることも少なくありません。 |
Color Copied Images | 「Core Animation」がコピーした画像が青になるようオーバーレイ表示します。 |
Color Misaligned Images | 境界がデスティネーションピクセルに揃っていない画像上に、マゼンタをオーバーレイ表示します。マゼンタのオーバーレイができない場合は、所定の拡大率で描画した画像上に、黄をオーバーレイ表示します。 |
Color Off Screen Rendered | オフスクリーンで描画した上に、黄をオーバーレイ表示します。 |
Location | Core Locationを使い、実際とは異なる場所で実行しているようシミュレートします。場所の設定を次の中から選んでください。
|
クラッシュログを表示する
アプリケーションがクラッシュする場合、クラッシュログを見れば問題点が判明するかも知れません。これはコンソール上に表示します。
クラッシュログを表示するには
Finderで
Applications/Utilities/Consoleの順に選択し、コンソールを開きます。「Saved Crash Report for」と表示されている行を探してください。
行の左にある矢印を操作して、この行を展開表示します。
「Open Report」をクリックしてください。