So bestimmen Sie das iPhone-Modell in Swift: Eine Analyse für Anfänger
\n\nHaben Sie sich jemals gefragt, warum Ihre Swift-App auf dem iPhone 13 einwandfrei funktioniert, aber auf dem iPhone SE (2. Generation) aussieht, als wäre sie hastig gezeichnet worden? Oder warum einige von Ihnen hinzugefügte Funktionen auf älteren Modellen plötzlich nicht verfügbar sind? Die Antwort ist einfach: Verschiedene iPhones haben unterschiedliche Fähigkeiten – von der Bildschirmgröße bis hin zu Face ID und haptischem Feedback.
\n\nIn diesem Artikel analysieren wir, wie Sie das iPhone-Modell in Swift bestimmen – von der einfachen Methode mit UIDevice bis zum professionellen Ansatz mit sysctlbyname. Sie lernen nicht nur, "iPhone" zu erhalten, sondern genau zu erkennen, ob es sich um ein iPhone 14 Pro Max oder ein iPhone 8 handelt. Los geht's!
\n\nWarum ist das wichtig?
\nJeder iOS-Entwickler steht früher oder später vor der Notwendigkeit, die Benutzeroberfläche oder Logik an ein bestimmtes Gerät anzupassen. Hier sind einige reale Szenarien:
\n- \n
- Adaptives Design: Auf iPhones mit "Notch" (iPhone X und neuer) müssen Elemente anders platziert werden als auf älteren Modellen mit Home-Button. \n
- Leistungsoptimierung: Auf älteren Geräten (iPhone 6s, iPhone 7) sollten schwere Animationen oder Effekte deaktiviert werden. \n
- Funktionale Einschränkungen: Nicht alle Modelle unterstützen ARKit, LiDAR, 120-Hz-Display oder MagSafe. \n
- Analytik: Das Verständnis, welche Modelle Ihre Benutzer verwenden, hilft bei Produktentscheidungen. \n
Stufe 1: UIDevice (einfach, aber begrenzt)
\nDer einfachste Weg ist die Verwendung der integrierten Klasse UIDevice. Sie gibt allgemeine Informationen über das Gerät zurück, leider jedoch nicht das genaue Modell.
import UIKit\n\nlet device = UIDevice.current\nprint("Gerätename: \\(device.name)")\nprint("Modell: \\(device.model)") // "iPhone" oder "iPad"\nprint("System: \\(device.systemName)") // "iOS"\nprint("Version: \\(device.systemVersion)") // "17.0"\n\n\nWas Sie erhalten: device.model gibt einfach "iPhone" oder "iPad" zurück. Dies ist nützlich, um zu verstehen, dass es sich um ein mobiles Gerät handelt, jedoch nicht für eine genaue Identifizierung.
Wann verwenden: Wenn Sie nur überprüfen müssen, ob die App auf einem iPhone und nicht auf einem iPad oder iPod touch läuft. Zum Beispiel zum Ausblenden von iPad-spezifischen Funktionen.
\n\nStufe 2: sysctlbyname (professioneller Ansatz)
\nUm das genaue iPhone-Modell zu erhalten, müssen Sie den Systemaufruf sysctlbyname verwenden. Er gibt eine Zeichenfolge wie "iPhone14,2" zurück (dies ist das iPhone 13 Pro). Mit diesen Identifikatoren können Sie sie menschenlesbaren Namen zuordnen.
Hier ist der funktionierende Swift-Code:
\n\nimport UIKit\n\nfunc getDeviceModelCode() -> String {\n var size = 0\n sysctlbyname("hw.machine", nil, &size, nil, 0)\n var machine = [CChar](repeating: 0, count: size)\n sysctlbyname("hw.machine", &machine, &size, nil, 0)\n return String(cString: machine)\n}\n\n// Verwendung\nlet modelCode = getDeviceModelCode()\nprint("Modellcode: \\(modelCode)") // Zum Beispiel: "iPhone14,2"\n\n\nJetzt haben Sie "iPhone14,2". Aber um welches Modell handelt es sich? Sie benötigen eine Zuordnungstabelle.
iPhone-Modellliste (Stand 2024)
\nNachfolgend finden Sie eine unvollständige, aber für die meisten Aufgaben ausreichende Liste. Die vollständige Liste finden Sie in offenen Quellen oder können Sie als separate Datei pflegen.
\n\nfunc getDeviceModelName() -> String {\n let modelCode = getDeviceModelCode()\n \n let modelMap: [String: String] = [\n // iPhone 15 Serie\n "iPhone15,4": "iPhone 15",\n "iPhone15,5": "iPhone 15 Plus",\n "iPhone16,1": "iPhone 15 Pro",\n "iPhone16,2": "iPhone 15 Pro Max",\n \n // iPhone 14 Serie\n "iPhone14,7": "iPhone 14