IPhone用のアプリケーションを1つ開発しましたが、今はそれをApp Storeで欲しいです。非常に多くの私のiOSオタクの友人が実際のデバイス、つまりiPhoneでテストするように私に言った。
それで、彼らの(Apple)が私のデバイスとほぼ同じである「シミュレータ」を与えたのに、なぜ実際のiPhoneデバイスで私のiPhoneアプリをテストする必要があるのでしょうか。
実際のデバイスでアプリケーションをテストして、少なくともそれがどのように動作するかを確認する必要があります。
iOS開発者は、このリストを続けてください。
エミュレータでテストするときに決してわからないことの1つは、実際のデバイスを手に持って、画面上で指をスライドさせるユーザーにとって、それが実際にどのように感じられるかです。その結果、ラップトップのタッチパッドでシミュレートするときにスムーズに見えたユーザーアクションは、実際のデバイスの使用ではかなり面倒になる場合があります。アプリケーションに問題がないことを確認するには、実際のデバイスでテストします。
実際のデバイスでテストする価値のあるもう1つのことは、バッテリーの消費です。それは、シミュレータ開発者がツールでそれをどのように再現できたかに依存するよりも、実際のデバイスでテストする方が本当に安全です。
シミュレータで十分に近くない他の事柄があるかもしれません。たとえば、オーディオの音量とバランス-ラップトップで聞こえる方法は、実際の電話での状態とは異なる場合があります。振動は、シミュレーターで正しく動作させることがほとんどできない別の例です。実際の電話でのジャイロセンサーの動作方法。 GPS /ロケーション関連のもの。などなど...
シミュレータと実際のデバイスのテストは非常に重要な問題です。私の過去のプロジェクトの1つで、商業的成功の重要な部分は、これらの種類のテスト間の注意深いバランスでした。つまり、本質的には、なぜデバイスにあるのかという質問を恒久的に再質問することになります
実際の作業は、whyを尋ねたときに始まり、特定のケースや状況で、デバイス上のテストとシミュレーターのテストのどちらを選択するかを選択します。
デバイステストを無視すると、製品がエンドユーザーの手に渡って破壊される(かなり高い)リスクにさらされ、開発に費やしたすべての努力が完全に失われます。しかし、問題は、シミュレーターのテストがはるかに安く、自動化がはるかに簡単であることです。デバイス上のみのテストに盲目的に固執する場合、それらのリリースは実質的により遅くなり、競合他社のリリースよりも高価になる可能性があります。
経験から、そして最高の投票からの離陸:
Windows Phone 7用のデシメーションX2を開発したときの最大の違いは、マウスではなく指でした。WP7がなく、WP7がリリースされる前だったため、エミュレーターでコーディングされました。 Microsoftから発売タイトルを携帯電話に招待されたため、最後の文が意味をなさない場合は、リリース前に無料のWP7を受け取る可能性がありました。実際の電話ではユーザーが指で行うことは非常に困難でしたが、マウスでは簡単でした。そして、それはスクリーンエッジケースと関係がありました。残念ながら、私たちのゲームでは、常に画面の端に指を置く必要がありました。一部の携帯電話では、画面が沈んでいることや厚みのあるケースのために操作が困難でした。これを修正するパッチを実際に公開しました。これは、すべての初めてのユーザーに、私たちのゲームの悪いバージョン、および潜在的に使用できないバージョンが表示されたことを意味します。 :(
次に異なるのは、ハードウェアの速度の違いでした。 Xbox 360バージョンのゲームを採用し、それに応じてフレームレートの半分(60fpsから30fps)および3分の1 GHz(3.0GHzから1.0GHz)にダウングレードするという不正確な方法で文字通り推測する必要がありました。違う。もちろん、プロセッサーは異なり、私たちはこれを知っていました。ハードウェアがなければ、私たちは推測が不十分でした。 WP7がなかったため、これは私たちの選択ではありませんでしたが、私が今あなたと共有しているレッスンを学びました。一部の携帯電話では、ゲームの最も集中的な部分でフレームを落としました。 :(減速がそのような激しい部分に適していると彼らが思ったので、誰も気にかけなかったようです。それで、それは大したことではありませんでした。
実際のハードウェアでテストします。また、さまざまな電話ハードウェアをコーディングするときは、パフォーマンスが問題かどうかをローエンドのハードウェアでテストしてください。
IPhoneシミュレーターは、iPhone自体にはないいくつかのAPIを実装しています(私の知る限り、iPhoneがSAXのみをサポートするDOM XML APIが頭に浮かびますが、これは今でも変更されている可能性があります)。
また、アプリを「感じる」ことができます。ボタンは適切なサイズですか?右ボタンが親指の下にありますか? iPhoneはアプリを実行する準備ができていますか?シミュレーターはエミュレーターではなく、そのアプリのデスクトップMacにCocoa Touchを追加するだけで機能します。メモリ不足の警告などをシミュレートする必要があります。
シミュレーターをポケットに入れて歩き回るユーザーは多くないからです。
編集:シミュレーター(またはエミュレーター)でアプリをテストしているときは常に、定義上、実在物を100%正確に表現することはできない偽のデバイスを使用しています。エミュレータはシミュレータよりも正確かもしれませんが、それでも違いはあります。 100%正確な唯一のエミュレータは、デバイス自体です。
シミュレーターでコードを設計、テスト、最適化すると、シミュレーターで最適に動作するように微調整されたアプリケーションが生成されます。ただし、ユーザーにはシミュレーターはありません。間違ったデバイスをターゲットにしている。非常に似ています。ただし、ユーザーが使用するデバイスとは異なります。
これにより、いくつかの種類の問題が発生する可能性があります。バグのような深刻な問題、クラッシュはあなたの最優先事項です。しかし、他にもあります。人間工学など。シミュレータを手に持ってみてください。ちょうど試して。 UI要素は、別の画面でレンダリングされる可能性があり、カラーレンダリングが異なる可能性があり、サイズも確かに異なります(たとえば、美しい網膜ディスプレイによって悪化する問題です。たとえば、網膜のMacbookを使用しても完全に解決されるわけではありません)。それらの絶妙なグレーの色合いは、太陽の下のデバイスでも同様に区別できますか?
速度の微妙な違い、および異なるセンサーエミュレーション(またはその欠如)により、エクスペリエンスが劇的に変わる場合があります。
アプリケーションがインターネット接続に依存している場合、LTE、3G、Edge、GPRSを切り替えたり、さまざまなシナリオをテストしたり、さまざまなキャリアをテストしたりすることはできません。
脱獄したデバイスをサポートしますか?おそらくそうではないかもしれませんが、そうである場合は、おそらく1つでアプリをテストすることをいとわないでしょう。または、そうでない場合は、ジェイルブレイクされた環境を検出していると確信していますか?
シミュレーターで開発しているiPadゲームは、ユーザーが体重を持ち、指を使ってプレイしているときにも同様に使用できますか?意図しない複数のタッチがアプリを破壊する可能性はありますか?これは、安全なシングルタッチ(または対称ダブルタッチ)シミュレーター環境では予期できなかったものですか?
実際に地面を離れたことのないパイロットが指揮する飛行機に搭乗するのは快適ですか?
要するに、出荷前に、ユーザーが使用するのと同じデバイスを使用してください。それらのいずれもシミュレータを使用しません。
実用的な理由:
1)「メール送信」機能がありません。
2)デバイスを上下逆に置くことはできません。
そしてもちろんすでに理由を述べました:
3)低帯域幅
4)シミュレーターと比較して非常に小さい計算能力
5)オープンGL呼び出しはシミュレータでは少し異なります
6)ディスク容量/ RAM.
ハードウェアのパフォーマンスは一般的に悪いと言われていますが、OpenGL ESの場合はそうではないことに注意してください。シミュレーターはそれをソフトウェアで実装するため、デバイス自体で実行しているときに巨大なパフォーマンスincreaseに気付くことは珍しくありません。
さらに、Open GL ESのソフトウェアとハードウェアの実装の間にはいくつかの小さな違いがあります。たとえば、シェーダーの精度のヒントは異なる出力を持っているかもしれません。
PushNotification、カメラを使用など、デバイスでのみテストできる機能があります。これらはシミュレータでテストできない機能です。
また、App Storeに送信する前に実際のデバイスでアプリをテストすると、アプリが拒否される可能性が低くなります。シミュレーターでアプリが正常に機能することもありますが、実際のデバイスでクラッシュすることが、アプリが拒否される主な理由です。
実際のデバイスとエミュレータの間には実際のパフォーマンスの違いがある場合があります。多くの場合、エミュレーターを使用したテストだけでアプリが非常に遅くなることがわかりましたが、これは予期していませんでした。
IOS(またはAndroid、Windows Phone)用に実装する場合、デスクトップ用ではなくデバイス用に開発します。一部の計算/リソースを大量に消費するアプリケーションの場合、これは実際のデバイスでのシミュレータBUTの問題の通常の動作を意味する場合があります。
したがって、最初からデバイスでテストしないと、このような状況が後の段階で発生する可能性があります。