2012-09-01 15 views
7

私のアプリが動作しているデバイスを検出する方法を探しています。私はソフトウェアのバージョンに興味がありません。私は多くの質問を検索するが、それらのどれもが(意外に)次のような理由で私のニーズを満たしていない:ユーザーが使用しているiOSデバイスを検出するにはどうすればよいですか?

解決方法1:

NSString *deviceType = [UIDevice currentDevice].model; 

それだけで「iPadの」私を与えるので、これは動作しません。私はそれがアプリ、アプリ2、新しいiPad、iPhone 3GS、iPhone4のなどであるかどうかを知りたい

解決策2:これは私ので、適用されない個々の能力

をチェック、デバイスタイプのテストが行​​われていませんこのデータでユーザー統計を収集し、デバイス固有の操作を実行しないようにします。

解決策3: UIDeviceHardwareを使用するには、このコードはかなり時代遅れに見えると、デバイス上のプライベートデータにアクセスするようだhere

を見つけました。これを使用するアプリが承認されるかどうかについても議論があります。もっと重要なのは、どのように動作するかわかりません:)代替も見つけましたhere

私が最後に言及した2つのうちどれが安全に使用されていますか?彼らは将来、準拠していますか? Appleの承認ルールに準拠していますか?

これを回避する方法はありますか?

ありがとうございます。

答えて

6

AppleはそのようなAPIをサンプルコードに使用しています。行83で始まるファイルLargeImageDownsizingViewController.mで、LargeImageDownsizing例のプロジェクトを引用するには:

を、適切な結果の画像サイズ、タイルサイズを行うことができます選択 しかし、開発者への課題として残されています。タイプ/バージョン文字列(例: )「iPhone2,1」はsysctlbyname機能を利用して実行 時に決定することができます。私の場合

size_t size; 
sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
char *machine = malloc(size); 
sysctlbyname("hw.machine", machine, &size, NULL, 0); 
NSString* _platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
free(machine); 

_platformは、iPodは第4世代に触れるためiPod4,1だろう。

このコードは、あなたが投稿した両方のGithubの例のルートにあります。

+0

ありがとうございます。今は安全だと分かったので、私はプロジェクトにそれを組み込み、問題を解決しました。 –

1

技術的には、[UIDeviceHardware platform]は正常に動作し、そのままサーバーに送信する必要があります。将来のOSでプラットフォームIDが変更される場合は、iOSバージョンとプラットフォームIDを一緒に送信して、問題から救うことができます。

ここではsysctlbynameという機能が使用されているため、アップルではルール番号2.5を使用することはできません。しかし、まだそこにルール番号17.1:

利用者の事前の許可を得て、約 情報へのアクセスをユーザに提供することなく、ユーザーに関するデータを送信することができない17.1アプリどのようにデータが使用される場所

デバイスプラットフォームがユーザに関するものであるかどうかは疑わしい。私のアドバイスは、あなたが17.1に違反していないと仮定して、それについて決して言及していないと仮定して、アプリケーションを提出するべきであるということです。批評家はあなたがその場で何をしているのか分からない可能性が高いです。

+0

ありがとうございました。収集したデータを集めてユーザーにバインドしていないので、17.1ルールにも反対しているとは思わない。私は彼らが気づかないことも確信している。 –

0

あなたが言及したUIDeviceHardwareは十分に良いですが、少し古くなっています。 試すことができますthis もっとアップルスタイルにしたので、もっと好きになるかもしれません。

関連する問題