كيفية تحديد طراز iPhone في Swift: تحليل للمبتدئين
\n\nهل تساءلت يومًا لماذا يعمل تطبيقك على Swift بشكل مثالي على iPhone 13، لكنه يبدو على iPhone SE (الجيل الثاني) وكأنه رُسم على عجل؟ أو لماذا بعض الميزات التي أضفتها أصبحت فجأة غير متاحة على الطرازات القديمة؟ الإجابة بسيطة: أجهزة iPhone المختلفة لها إمكانيات مختلفة - من حجم الشاشة إلى وجود Face ID والملاحظات اللمسية.
\n\nفي هذه المقالة، سنشرح كيفية تحديد طراز iPhone في Swift - من الطريقة البسيطة باستخدام UIDevice إلى النهج الاحترافي باستخدام sysctlbyname. ستتعلم ليس فقط الحصول على "iPhone"، بل معرفة بالضبط ما إذا كان أمامك iPhone 14 Pro Max أو iPhone 8. هيا بنا!
\n\nلماذا هذا مهم؟
\nكل مطور iOS يواجه عاجلاً أم آجلاً الحاجة إلى تكييف الواجهة أو المنطق وفقًا لجهاز معين. إليك بعض السيناريوهات الواقعية:
\n- \n
- التصميم المتكيف: على iPhone مع "النتوء" (iPhone X والأحدث) يجب ترتيب العناصر بشكل مختلف عن الطرازات القديمة ذات زر الصفحة الرئيسية. \n
- تحسين الأداء: على الأجهزة القديمة (iPhone 6s, iPhone 7) يُفضل تعطيل الرسوم المتحركة الثقيلة أو التأثيرات. \n
- القيود الوظيفية: ليست كل الطرازات تدعم ARKit أو LiDAR أو شاشة 120 هرتز أو MagSafe. \n
- التحليلات: فهم الطرازات التي يستخدمها مستخدموك يساعد في اتخاذ قرارات المنتج. \n
المستوى 1: UIDevice (بسيط لكن محدود)
\nأبسط طريقة هي استخدام الفئة المدمجة UIDevice. تُرجع معلومات عامة عن الجهاز، لكنها للأسف لا تُظهر الطراز الدقيق.
import UIKit\n\nlet device = UIDevice.current\nprint("اسم الجهاز: \\(device.name)")\nprint("الطراز: \\(device.model)") // "iPhone" أو "iPad"\nprint("النظام: \\(device.systemName)") // "iOS"\nprint("الإصدار: \\(device.systemVersion)") // "17.0"\n\n\nما ستحصل عليه: device.model سيعيد ببساطة "iPhone" أو "iPad". هذا مفيد لفهم أنه جهاز محمول، لكنه ليس للتحديد الدقيق.
متى تستخدم: إذا كنت تحتاج فقط للتحقق من أن التطبيق يعمل على iPhone وليس على iPad أو iPod touch. على سبيل المثال، لإخفاء الميزات الخاصة بـ iPad.
\n\nالمستوى 2: sysctlbyname (النهج الاحترافي)
\nللحصول على الطراز الدقيق لـ iPhone، تحتاج إلى استدعاء النظام sysctlbyname. يُرجع سلسلة نصية مثل "iPhone14,2" (وهو iPhone 13 Pro). بمعرفة هذه المعرفات، يمكنك مطابقتها مع الأسماء القابلة للقراءة البشرية.
إليك الكود العملي في Swift:
\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// الاستخدام\nlet modelCode = getDeviceModelCode()\nprint("رمز الطراز: \\(modelCode)") // على سبيل المثال: "iPhone14,2"\n\n\nالآن لديك "iPhone14,2". لكن ما هذا الطراز؟ ستحتاج إلى قاموس مطابقات.
قاموس طرازات iPhone (محدث لعام 2024)
\nفيما يلي قائمة غير كاملة لكنها كافية لمعظم المهام. يمكن العثور على القائمة الكاملة في المصادر المفتوحة أو الاحتفاظ بها كملف منفصل.
\n\nfunc getDeviceModelName() -> String {\n let modelCode = getDeviceModelCode()\n \n let modelMap: [String: String] = [\n // سلسلة iPhone 15\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\n "iPhone14,7": "iPhone 14