Besserer Code: Bestimmen Sie Gerätetypen und iOS-Versionen

In einem früheren Beitrag, Besserer Code: Hinzufügen von E-Mail-Funktionen zu Ihren Apple iOS-Apps, haben wir gesehen, wie Sie einer App E-Mail-Funktionen hinzufügen, damit Ihre Benutzer Sie für Support kontaktieren können. Da sich Apps auf verschiedenen Gerätetypen und iOS-Ebenen unterschiedlich verhalten können, ist es oft sehr nützlich, genau zu wissen, was diese Besonderheiten sind, wenn ein Benutzer ein Problem meldet. In diesem Beitrag erfahren Sie, wie Sie den Gerätetyp und die iOS-Version, auf der Ihre App ausgeführt wird, programmgesteuert ermitteln. In Kombination mit dem Code aus dem letzten Beitrag können Sie Ihren Apps ermöglichen, Support-E-Mails mit diesen wichtigen Informationen automatisch zu generieren.

Projekt

Öffnen Sie Xcode und wählen Sie im Menü Datei die Option Neu und dann Neues Projekt. Ein neues Arbeitsbereichfenster wird angezeigt, und Sie erhalten mehrere Anwendungsvorlagen zur Auswahl.

Wählen Sie auf der linken Seite im Abschnitt iOS die Option Anwendung aus. Wählen Sie Single View Application und klicken Sie auf die Schaltfläche Next. ( Abbildung A )

Abbildung A.

Geben Sie im nächsten Bereich SupportInfo als Produktnamen und com.myappcompany als Firmenkennung ein. (Sie können gerne Ihren eigenen Produktnamen und Ihre Firmenkennung ersetzen.)

Lassen Sie das Klassenpräfix unverändert. Es sollte leer sein - XYZ ist nur ein Platzhalter-Hinweis.

Stellen Sie sicher, dass nur Automatische Referenzzählung verwenden und Storyboards verwenden aktiviert sind.

Stellen Sie die Gerätefamilie auf iPhone ein und klicken Sie auf Weiter. ( Abbildung B )

Abbildung B.

In einem neuen Bereich werden Sie gefragt, wo Sie das Projekt speichern möchten. XCode erstellt einen SupportInfo-Projektordner in dem von Ihnen ausgewählten Verzeichnis.

Sobald das Projekt erstellt wurde, öffnet Xcode ein Arbeitsbereichfenster mit Ihrem neuen Projekt.

Erstellen der Benutzeroberfläche

Klicken Sie im Bereich Dateien und Gruppen auf MainStoryboard.storyboard. Wählen Sie nach dem Öffnen im Interface Builder das Ansichtsobjekt aus, klicken Sie auf den Attributinspektor und ändern Sie die Hintergrundfarbe der Ansicht in eine Farbe Ihrer Wahl.

Gehen Sie als Nächstes zur Objektbibliothek unten rechts im Arbeitsbereich und ziehen Sie ein Paar Beschriftungsobjekte auf die Ansicht, die wie in Abbildung C dargestellt angeordnet ist . Ändern Sie den Text der Beschriftung ganz links in "Gerätetyp:".

Abbildung C.

Ziehen Sie ein weiteres Etikettenpaar in die Ansicht direkt unter dem ersten und ändern Sie den Text des Etiketts ganz links in "iOS-Version:". Abbildung D zeigt die bisherige Situation.

Abbildung D.

Klicken Sie anschließend auf den Assistenten-Editor in der oberen rechten Ecke der Xcode-Oberfläche. ( Abbildung E )

Abbildung E.

Der Assistant Editor zeigt ViewController.h in einem angrenzenden Bereich an (siehe Abbildung F) . Klicken Sie auf die Beschriftung neben "Gerätetyp:", um sie auszuwählen, drücken Sie dann die Steuertaste und ziehen Sie sie von der Beschriftung bis direkt unter das Wort "@interface" in ViewController.h. Wenn Sie Ihren Finger von der Maus lösen, wird das Dialogfeld Verbindung angezeigt. Geben Sie "deviceLabel" in das Feld Name ein und drücken Sie die Eingabetaste. Sie haben jetzt eine Steckdose mit dem Namen deviceLabel erstellt und diese mit dem UILabel im Storyboard verbunden. Machen Sie dasselbe für das Etikett neben "iOS Version:" mit dem Namen "iOSLabel".

Abbildung F.

Klicken Sie auf die Schaltfläche Standardeditor, um den Assistenten-Editor zu schließen.

Code hinzufügen

Beginnen wir bei unserem ersten Versuch damit, viewDidLoad wie folgt zu ändern:

 - (void) viewDidLoad 
 { 
 super viewDidLoad; 
 NSString * iOSVersion = UIDevice currentDevice systemVersion; 
 self.iOSLabel.text = iOSVersion; 
 NSString * model = UIDevice currentDevice model; 
 self.deviceLabel.text = model; 
 }} 
Erstellen Sie die App und führen Sie sie aus. Die Ergebnisse sind interessanter, wenn Sie eher auf ein reales Gerät als auf den Simulator abzielen. Abbildung G zeigt die Ergebnisse auf einem iPhone 4 und iPhone 5.

Abbildung G.

iPhone 4 und 5 Ergebnisse

UIDevice gibt uns ziemlich genaue Informationen über die iOS-Version, aber beachten Sie, dass es keinen Unterschied zwischen den beiden Geräten erkennen kann, was für Supportzwecke eindeutig nicht ausreicht. Zum Glück können wir es besser machen! Fügen Sie die folgenden zwei Methoden direkt unter viewDidLoad hinzu:

 - (NSString *) platformRawString { 
 size_t size; 
 sysctlbyname ("hw.machine", NULL & size, NULL, 0); 
 char * machine = malloc (Größe); 
 sysctlbyname ("hw.machine", machine & size, NULL, 0); 
 NSString * platform = NSString stringWithUTF8String: machine; 
 frei (Maschine); 
 Rückflugplattform; 
 }} 
 - (NSString *) platformNiceString { 
 NSString * platform = self platformRawString; 
 if (Plattform isEqualToString: @ "iPhone1, 1") return @ "iPhone 1G"; 
 if (Plattform isEqualToString: @ "iPhone1, 2") return @ "iPhone 3G"; 
 if (Plattform isEqualToString: @ "iPhone2, 1") return @ "iPhone 3GS"; 
 if (Plattform isEqualToString: @ "iPhone3, 1") return @ "iPhone 4"; 
 if (Plattform isEqualToString: @ "iPhone3, 3") return @ "Verizon iPhone 4"; 
 if (Plattform isEqualToString: @ "iPhone4, 1") return @ "iPhone 4S"; 
 if (Plattform isEqualToString: @ "iPhone5, 1") return @ "iPhone 5"; 
 if (Plattform isEqualToString: @ "iPod1, 1") return @ "iPod Touch 1G"; 
 if (Plattform isEqualToString: @ "iPod2, 1") return @ "iPod Touch 2G"; 
 if (Plattform isEqualToString: @ "iPod3, 1") return @ "iPod Touch 3G"; 
 if (Plattform isEqualToString: @ "iPod4, 1") return @ "iPod Touch 4G"; 
 if (Plattform isEqualToString: @ "iPad1, 1") return @ "iPad 1"; 
 if (Plattform isEqualToString: @ "iPad2, 1") return @ "iPad 2 (WiFi)"; 
 if (Plattform isEqualToString: @ "iPad2, 2") return @ "iPad 2 (GSM)"; 
 if (Plattform isEqualToString: @ "iPad2, 3") return @ "iPad 2 (CDMA)"; 
 if (Plattform isEqualToString: @ "iPad3, 1") return @ "iPad 3 (WiFi)"; 
 if (Plattform isEqualToString: @ "iPad3, 2") return @ "iPad 3 (4G, 2)"; 
 if (Plattform isEqualToString: @ "iPad3, 3") return @ "iPad 3 (4G, 3)"; 
 if (Plattform isEqualToString: @ "i386") return @ "Simulator"; 
 if (Plattform isEqualToString: @ "x86_64") return @ "Simulator"; 
 Rückflugplattform; 
 }} 
 Ändern Sie nun viewDidLoad wie folgt: 
 - (void) viewDidLoad 
 { 
 super viewDidLoad; 
 NSString * iOSVersion = UIDevice currentDevice systemVersion; 
 self.iOSLabel.text = iOSVersion; 
 self.deviceLabel.text = self platformRawString; 
 }} 

Fügen Sie abschließend die folgende Importanweisung oben in die Datei ein.

 #importieren 
Wenn wir die App erneut erstellen und ausführen, sind die Ergebnisse jetzt viel interessanter, wie in Abbildung H dargestellt . Durch die Verwendung des Systemaufrufs sysctlbyname auf niedriger Ebene in platformRawString erhalten wir viel genauere Geräteinformationen, die jedoch je nach Gerät etwas geheimnisvoll sind.

Abbildung H.

Wir können die Rohgeräteinformationen nützlicher machen, indem wir sie über die platformNiceString-Methode übergeben. Die Liste der Geräte, die mit dieser Methode interpretiert werden können, ist ziemlich vollständig und enthält nur Informationen zu den neuesten 9 "iPad- und iPad Mini-Modellen.

Ändern Sie viewDidLoad wie folgt und erstellen und führen Sie die App noch einmal aus:

 - (void) viewDidLoad 
 { 
 super viewDidLoad; 
 NSString * iOSVersion = UIDevice currentDevice systemVersion; 
 self.iOSLabel.text = iOSVersion; 
 self.deviceLabel.text = self platformNiceString; 
 }} 
Wie in Abbildung I gezeigt, haben wir jetzt genau das, was wir brauchen.

Abbildung I.

Leider ist im iOS SDK nicht alles enthalten, was ein iOS-Programmierer benötigt. Low-Level-Systemaufrufe wie sysctlbyname sind ein gutes Beispiel dafür, warum es wichtig ist, immer aus einer Vielzahl von Quellen wie TechRepublic, Stack Overflow und vielen anderen großartigen Websites im Web zu lernen.

Hoffentlich hilft Ihnen dieser kleine Leckerbissen bei der Unterstützung der Benutzer Ihrer iOS-Apps.

Lesen Sie auch:

  • Besserer Code: Fügen Sie Ihren Apple iOS-Apps E-Mail-Funktionen hinzu
  • Besserer Code: Entwickeln Sie universelle Apps für iOS-Geräte
  • Wählen Sie die richtige Bildschirmtastatur für Ihre iOS-App

© Copyright 2021 | mobilegn.com