アプリケーションが 3.1 を実行しているデバイスで動作することを確認できる唯一の方法は、3.1 を実行しているデバイスでアプリケーションをテストすることです。古い (iPhone 3G S より前の) ハードウェアのサポートについても同様です。私はストアであまりにも多くのアプリケーションを見てきましたが、それらは明らかに新しいデバイスでしかテストされておらず、古いハードウェアでは動作が停止したりメモリ不足になったりしています。そのハードウェアをサポートしていない場合は、Info.plist を適切に設定して、それらのデバイスで使用できないようにしてください。
新しいメソッドやクラスをどれだけ徹底的にチェックしたと思っても、微妙な問題に遭遇する可能性があります。たとえば、特定のフレームワークを弱いリンクにする必要がある場合とそうでない場合があります。そうしないと、新しい API を使用しなくても、アプリケーションが古い OS でクラッシュします。
古いモデルの iPod touch は eBay で安く売られており、4.0 がインストールされている場合は古い OS バージョンにダウングレードできます。または、古い OS バージョンを実行しているデバイスを持っている人を見つけて、アプリケーションのアドホック ビルドを送ってテストすることもできます。メモリ使用量が古いデバイスの危険な領域に近づきすぎないようにするために、Instruments をデバイスに接続する必要があるため、これはあまり望ましくありません。
申し訳ありませんが、それが確実な唯一の方法です。別の開発者が私に言ったように、「特定の OS バージョンまたはデバイスでテストしていない場合は、アプリケーションをそこで実行しないことを検討してください。」