IOS-Geräte auf Hardwareeigenschaften prüfen
In manchen iPhone-/iPod touch-Applikationen ist es notwendig, beispielsweise auf die Exitenz einer Kamera zu prüfen damit die Applikation auf beiden Gerätetypen reibungslos funktioniert. Schließlich schmiert die Anwendung auf einem iPod touch (ohne Kamera) sang- und klanglos ab, sobald man einen [[ADC:/UIImagePickerController] verwendet und Apple weist dann die Applikation im Review-Prozess für den App-Store auch zurück.
Um also unnötige Verzögerungen zu vermeiden, kann man wie folgt vorgehen:
Applikation benötigt zwingend eine Kamera[edit]
Wenn eine App unbedingt eine Kamera benötigt (z.B. bei einem Kamera-Tool), kann man die benötigten Hardwarekomponenten als Array oder Dictionary in die Info.plist eintragen:
UIRequiredDeviceCapabilities = still-camera
- Array
- Hier wird die Eigenschaft "still-camera" als Wert eingetragen, wobei natürlich der Datentyp der Array-Elemente entsprechend auf "String" stehen muss
- Dictionary
- Hier wird das Element als "BOOL" Wert eingetragen mit "still-camera" als Key
- Beispiele
Key | Beschreibung |
---|---|
telephony | Telefonfunktion (für tel:// Links benötigt) |
sms | SMS-Funktion (für sms:// Links benötigt) |
still-camera | UIImagePickerController)), um für Fotos auf eine integrierte Kamera zuzugreifen |
auto-focus-camera | Wenn man die Autofokus-Funktion einer Kamera benötigt |
video-camera | UIImagePickerController)), um für Videos auf eine integrierte Kamera zuzugreifen |
wifi | Wenn die Applikation WLAN-Zugang benötigt |
accelerometer | Wenn die App UIAccelerometer benutzt, um auf solche Events reagieren zu können. Wird für reine Displaydrehungen (Portrait <> Landscape) nicht benötigt. |
location-services | Verwendung des Core Location Frameworks. Hinweis: wenn man explizit ein GPS benötigt, sollte man zusätzlich den folgenden gps Schlüssel eintragen! |
gps | App benötigt eine vorhandene GPS (odr AGPS) Hardware für die Ortsbestimmung |
magnetometer | Bei Verwendung des Core Location framework für richtungsbezogene Events |
microphone | ... na, was wohl? |
opengles-1 | Bei Verwendung des OpenGL ES 1.1 Interface |
opengles-2 | Bei Verwendung des OpenGL ES 2.0 Interface |
armv6 | App wurde nur für den armv6 Befehlssatz übersetzt (verfügbar ab iPhone OS v3.1) |
armv7 | App wurde nur für den armv7 Befehlssatz übersetzt (verfügbar ab iPhone OS v3.1) |
peer-peer | App benötigt Peer-to-Peer Verbindungen über Bluetooth (verfügbar ab iPhone OS v3.1) |
In der App auf Existenz einer Eigenschaft abfragen[edit]
Alternativ lässt sich in der App selber auch die Kamera abfragen, um beispielsweise den Button, der einen UIImagePickerController aufruft, auf einem iPod touch einfach zu deaktivieren oder eine entsprechende Meldung anzuzeigen.
Kamera abfragen[edit]
Die Existenz einer Kamera kann mit Hilfe der Methode isSourceTypeAvailable: des UIImagePickerController abgefragt werden:
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
// Kamera ist verfügbar ...
} else {
// Keine Kamera
}
GPS und Magnetometer abfragen[edit]
Auf vorhandene GPS-Hardware kann nicht unmittelbar sonndern nur indirekt mit Hilfe des CLLocationManager aus dem Core Location Framework geprüft werden. Dazu kann man eine sehr hohe Genauigkeit einstellen und entsprechend reagieren, wenn keine Daten in der gewünschten Genauigkeit vorliegen (siehe auch hier)
Die Verfügbarkeit von Magnetometer-Events testet über die Property headingAvailable der Klasse CLLocationManager:
if(myLocationManager.headingAvailable) {
// ...
}
Siehe auch[edit]
- iPhone Dev Center: Device Support (apple.com)
- uidevice-extension von Erica Sadun