كيفية تحديد طراز iPhone في Swift: دليل كامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية تحديد طراز 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
\n\n

المستوى 1: UIDevice (بسيط لكن محدود)

\n

أبسط طريقة هي استخدام الفئة المدمجة UIDevice. تُرجع معلومات عامة عن الجهاز، لكنها للأسف لا تُظهر الطراز الدقيق.

\n\n
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". هذا مفيد لفهم أنه جهاز محمول، لكنه ليس للتحديد الدقيق.

\n\n

متى تستخدم: إذا كنت تحتاج فقط للتحقق من أن التطبيق يعمل على iPhone وليس على iPad أو iPod touch. على سبيل المثال، لإخفاء الميزات الخاصة بـ iPad.

\n\n

المستوى 2: sysctlbyname (النهج الاحترافي)

\n

للحصول على الطراز الدقيق لـ iPhone، تحتاج إلى استدعاء النظام sysctlbyname. يُرجع سلسلة نصية مثل "iPhone14,2" (وهو iPhone 13 Pro). بمعرفة هذه المعرفات، يمكنك مطابقتها مع الأسماء القابلة للقراءة البشرية.

\n\n

إليك الكود العملي في Swift:

\n\n
import 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". لكن ما هذا الطراز؟ ستحتاج إلى قاموس مطابقات.

\n\n

قاموس طرازات iPhone (محدث لعام 2024)

\n

فيما يلي قائمة غير كاملة لكنها كافية لمعظم المهام. يمكن العثور على القائمة الكاملة في المصادر المفتوحة أو الاحتفاظ بها كملف منفصل.

\n\n
func 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                

المدونات

توصيات الكتب