2012-09-01 16 views
7

Ich suche nach einer Möglichkeit, das Gerät zu erkennen, auf dem meine App läuft. Ich bin nicht an der Softwareversion interessiert. Ich suchte viele Fragen, aber keiner von ihnen (überraschend) meine Bedürfnisse aus folgenden Gründen erfüllen:Wie kann ich feststellen, welches iOS-Gerät mein Benutzer verwendet?

Lösung 1:

NSString *deviceType = [UIDevice currentDevice].model; 

Das funktioniert nicht, weil es mir gibt nur „iPad“. Ich möchte wissen, ob es sich um iPad, iPad 2, neuer iPad, iPhone 3GS, iPhone4 usw.

Lösung 2: Nicht für Gerätetyp testen, für die individuellen Fähigkeiten Überprüfung

Dies gilt nicht, weil ich möchten, dass diese Daten Benutzerstatistiken sammeln und keine gerätespezifische Operation ausführen.

Lösung 3: UIDeviceHardware Verwendung gefunden here

Dieser Code ziemlich veraltet aussieht und scheint auf dem Gerät private Daten zuzugreifen. Es gibt sogar Diskussionen darüber, ob eine App, die dies nutzt, genehmigt wird oder nicht. Noch wichtiger ist, ich habe keine Ahnung, wie es funktioniert :) Eine Alternative ist auch gefunden here

Sind irgendwelche der letzten zwei, die ich erwähnte, sicher zu verwenden? Sind sie zukunftskonform? Entsprechen sie den Apple-Zulassungsregeln?

Oder gibt es eine andere Methode, um dies zu umgehen?

Vielen Dank im Voraus.

Antwort

6

Apple verwendet eine solche API in ihrem Beispielcode. Um es mit dem LargeImageDownsizing Beispielprojekt in der Datei mit Zeilenanfang LargeImageDownsizingViewController.m 83:

geeignete Wahl resultierende Bildgröße und Kachelgröße kann getan werden, aber als Übung dem Entwickler überlassen. Beachten Sie, dass das Gerät Typ/Version Zeichenfolge (z.„IPhone2,1“ kann zur Laufzeit durch die Verwendung der sysctlbyname Funktion bestimmt werden:

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 in meinem Fall wäre iPod4,1 für einen iPod 4. Generation berühren.

Dieser Code steht für die beiden von Ihnen veröffentlichten Github-Beispiele.

+0

Danke. Jetzt, da ich weiß, dass es sicher ist, habe ich es in mein Projekt aufgenommen und das Problem gelöst. –

1

Technisch gesehen sollte funktionieren und Sie sollten es an Ihren Server senden, wie es ist. Sie sollten auch die iOS-Version zusammen mit der Plattform-ID senden, um Probleme zu vermeiden, wenn sich die Plattform-ID im zukünftigen Betriebssystem ändert.

Da die hier verwendete Funktion sysctlbyname gut dokumentiert ist, denke ich nicht, dass Apple die Regel Nummer 2.5 gegen dich verwenden kann. Allerdings gibt es immer noch die Regel Nummer 17.1:

17,1 Apps können keine Daten über einen Benutzer übertragen, ohne den Benutzer vorherige Genehmigung zu erhalten und dem Benutzer den Zugriff auf Bereitstellung von Informationen darüber, wie und wo die Daten verwendet werden

Es ist fraglich, ob die Geräteplattform über einen Benutzer handelt oder nicht. Mein Rat ist, dass Sie die App einreichen sollten, vorausgesetzt, Sie verletzen nicht 17.1 und erwähnen nie darüber. Es ist sehr wahrscheinlich, dass der Rezensent nicht weiß, was Sie hinter der Szene tun.

+0

Danke. Ich sammle die Daten, die ich sammle, und verbinde sie nicht mit einem Benutzer, also glaube ich nicht, dass es auch gegen die 17.1-Regel ist. Ich bin mir auch sicher, dass sie es nicht einmal bemerken werden. –

0

Die von Ihnen erwähnte UIDeviceHardware ist gut genug, aber ein bisschen veraltet. Sie können versuchen this Machte es mehr Apfel-Stil, so dass sie es mehr mögen.

Verwandte Themen