iOS Simulator: ما هو وكيف يعمل في Xcode

المؤلف: IT Sectr نُشر: 2026-02-09 وقت القراءة: 8 دق

Xcode Simulator هي أداة مدمجة من Apple تقوم بتشغيل تطبيقات iOS على Mac بدون جهاز فعلي. يقوم المحاكي بتجميع الكود لمعمارية x86_64 للمضيف، مما يوفر سرعة اختبار عالية. وثائق Apple تصف دورة التصحيح الكاملة باستخدام المحاكي لأجهزة iPhone و iPad و Apple Watch و Apple TV.

النقاط الرئيسية

  • Xcode Simulator — محاكاة لجهاز iOS على مستوى التطبيق بدون محاكاة كاملة لمعمارية ARM
  • الفرق عن الجهاز الحقيقي — المحاكي لا يدعم الكاميرا و GPU Metal وأجهزة الاستشعار وإشعارات الدفع (قبل Xcode 11.4)
  • TARGET_OS_SIMULATOR — توجيه للتحقق من بيئة التشغيل في كود Objective-C و Swift
  • اختبارات الوحدة واختبارات واجهة المستخدم — المحاكي يدعم مجموعة XCTest الكاملة مع إمكانية التشغيل على خوادم CI
  • منصات متعددة — المحاكي يدعم iPhone و iPad و Apple Watch و Apple TV و Vision Pro

ما هو Simulator في Xcode؟

Xcode Simulator هي أداة لتشغيل وتصحيح تطبيقات iOS مباشرة على Mac. على عكس محاكي Android، لا يقوم محاكي Apple بمحاكاة معالج ARM للجهاز. بدلاً من ذلك، يتم تجميع الكود إلى كود آلة لمعمارية المضيف (x86_64 على Intel Mac أو arm64 على Apple Silicon).

يستخدم المحاكي أُطر عمل iOS مباشرة من SDK، مما يوفر الوصول إلى UIKit و SwiftUI و Foundation و Core Data. وفقًا لـ Apple (WWDC 2024)، يستخدم أكثر من 90% من المطورين المحاكي في مرحلة التطوير، ويقومون بتوصيل الأجهزة الفعلية فقط للاختبار النهائي.

كل إصدار من Xcode يتضمن مجموعة من المحاكيات لنماذج الأجهزة المختلفة وإصدارات iOS. على سبيل المثال، Xcode 16 يحتوي على محاكيات لـ iPhone 16 Pro مع iOS 18 و iPad Pro M4 مع iPadOS 18 و Apple Watch Series 10 و Apple TV 4K.

تثبيت وتشغيل المحاكي

يتم تثبيت المحاكي مع Xcode من Mac App Store. لإضافة إصدارات إضافية من iOS، استخدم القائمة Settings → Platforms. حدد محاكيًا في مخطط البناء (Scheme) واضغط Run. بدلاً من ذلك، قم بتشغيل المحاكي عبر القائمة Xcode → Open Developer Tool → Simulator.

swift
// التحقق من الحد الأدنى لإصدار iOS للمحاكي
if #available(iOS 18.0, *) {
    print("واجهات برمجة iOS 18 متاحة")
}

الاختلافات بين المحاكي والجهاز الحقيقي

فهم الاختلافات بين المحاكي والجهاز الحقيقي أمر بالغ الأهمية للاختبار عالي الجودة. تكمن الاختلافات الرئيسية في معمارية المعالج وقدرات الأجهزة وأداء الرسومات.

الخاصيةالمحاكيالجهاز الحقيقي
معمارية المعالجx86_64 / arm64 (Mac)ARM64 (Apple Silicon)
GPU Metalمحاكاة عبر GPU MacGPU Apple أصلي
الكاميراغير متوفرةكاملة
مقياس التسارع/الجيروسكوبغير متوفرةأجهزة استشعار
Touch ID / Face IDمحاكاة عبر القائمةقياس حيوي للأجهزة
إشعارات الدفعمن Xcode 11.4 (ملف .apns)خادم APNs
Bluetooth LEغير مدعوممكدس كامل

عادة ما يكون الأداء في المحاكي أعلى من الجهاز الحقيقي، لأنه يستخدم معالج Mac القوي. هذا يخلق انطباعًا زائفًا بالسرعة. قد تعمل الرسوم المتحركة وعمليات Core Data وطلبات الشبكة على الجهاز الحقيقي بشكل أبطأ.

متى يجب الاختبار على جهاز

تأكد من تشغيل التطبيق على جهاز حقيقي قبل الإصدار. السيناريوهات الحرجة: الكاميرا و AVFoundation و Bluetooth و CoreBluetooth وإشعارات الدفع عبر APNs وعمليات نظام الملفات في App Sandbox وأداء الرسومات في Metal واستهلاك طاقة البطارية.

التحقق من TARGET_OS_SIMULATOR في الكود

للتجميع الشرطي للكود للمحاكي، توفر Apple TARGET_OS_SIMULATOR في Objective-C و targetEnvironment(simulator) في Swift. يسمح هذا التحقق بإضافة سجلات التصحيح أو الكائنات الوهمية أو تعطيل الكود المعتمد على الأجهزة.

swift
import UIKit

class CameraViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        #if targetEnvironment(simulator)
        showMockCameraPreview()
        print("المحاكي: استخدام كاميرا وهمية")
        #else
        setupRealCameraSession()
        #endif
    }
}

في Objective-C، يعمل التوجيه #if TARGET_OS_SIMULATOR بالمثل. استخدمه لتعطيل الكود الذي يتطلب أجهزة استشعار أو كاميرا. في وقت التجميع للمحاكي، لا يدخل هذا الكود في الملف الثنائي.

objective-c
#if TARGET_OS_SIMULATOR
NSLog(@"التشغيل في المحاكي — الكاميرا غير متوفرة");
self.cameraButton.hidden = YES;
#else
self.cameraButton.hidden = NO;
#endif

حالات الاستخدام النموذجية للتحقق

يستخدم التحقق TARGET_OS_SIMULATOR في ثلاث حالات: استبدال الكاميرا بكائن وهمي أثناء اختبارات واجهة المستخدم، وتعطيل Core Bluetooth لتسريع التطوير، وتسجيل معلومات التصحيح التي يجب ألا تصل إلى إصدار الإنتاج. تجنب استخدام التحقق لتغيير منطق الأعمال — فقد يؤدي ذلك إلى أخطاء على الجهاز الحقيقي.

تشغيل الاختبارات في المحاكي

Xcode Simulator يدعم مجموعة اختبارات XCTest الكاملة: اختبارات الوحدة (XCTestCase) واختبارات واجهة المستخدم (XCUITestCase) واختبارات الأداء. لا يتطلب الاختبار على المحاكي شهادة مطور موقعة، مما يبسط إعداد CI/CD.

swift
import XCTest

final class LoginTests: XCTestCase {
    var app: XCUIApplication!
    
    override func setUp() {
        continueAfterFailure = false
        app = XCUIApplication()
        app.launch()
    }
    
    func testLoginButtonExists() {
        XCTAssertTrue(app.buttons["loginButton"].exists)
    }
    
    func testEmptyEmailValidation() {
        app.textFields["emailField"].tap()
        app.buttons["loginButton"].tap()
        let errorLabel = app.staticTexts["errorMessage"]
        XCTAssertTrue(errorLabel.exists)
    }
}

لتشغيل الاختبارات من سطر الأوامر، استخدم xcodebuild test مع تحديد المخطط والمحاكي. تحدد المعلمة -destination المحاكي المحدد الذي سيتم تشغيل الاختبارات عليه.

bash
# تشغيل اختبارات الوحدة على محاكي iPhone 16، iOS 18
xcodebuild test \
  -scheme "MyApp" \
  -destination "platform=iOS Simulator,name=iPhone 16,OS=18.0" \
  -testPlan "AllTests"

القيود والمزالق

على الرغم من سهولة استخدامه، فإن Xcode Simulator لديه عدد من القيود التي يمكن أن تؤدي إلى أخطاء على الجهاز الحقيقي. الأكثر أهمية هو عدم وجود محاكاة ARM: يتم تجميع الكود لمعمارية المضيف، وقد يختلف سلوك بعض العمليات.

Core Data ونظام الملفات يعملان بشكل أسرع على المحاكي بسبب SSD الخاص بـ Mac. على الجهاز الحقيقي مع ذاكرة NAND، تكون سرعة القراءة/الكتابة أقل. اختبر أداء Core Data على جهاز قبل الإصدار، خاصةً لمجموعات البيانات الكبيرة.

التحقق من استهلاك الطاقة على المحاكي غير ممكن — المحاكي يعمل من طاقة Mac. تتصرف الأوضاع الخلفية، بما في ذلك تحميل المحتوى وعمليات الجلب، بشكل مختلف على الجهاز الحقيقي بسبب قيود البطارية وجدولة المهام الخلفية.

أجهزة الاستشعار والقياسات الحيوية

المحاكي لا يملك access إلى أجهزة استشعار iPhone. يمكن محاكاة Face ID و Touch ID عبر قائمة المحاكي: Features → Face ID → Matching Face. مقياس التسارع والجيروسكوب ومقياس الضغط غير متوفرة — الكود الذي يعتمد على CMDeviceMotion يجب اختباره على جهاز. لـ Core Location، يمكنك تعيين الإحداثيات عبر Debug → Simulate Location باختيار ملف GPX.

التحقق من iCloud و StoreKit على المحاكي محدود أيضًا. StoreKit Test يسمح بمحاكاة المشتريات بدون App Store Connect حقيقي، لكن التحقق من بيئة Sandbox والمشتريات الإنتاجية يتطلب جهازًا فعليًا. مزامنة iCloud Drive و CloudKit على المحاكي تعمل بشكل غير صحيح — توصي Apple باختبار هذه السيناريوهات فقط على الأجهزة الحقيقية.

المحاكي على Apple Silicon Mac

على أجهزة Mac بمعالجات السلسلة M، يعمل المحاكي بشكل مختلف جوهريًا: يتم تجميع الكود إلى ARM64 أصلي، كما هو الحال في iPhone حقيقي، بدلاً من x86_64. هذا يقلص الفجوة بين المحاكي والجهاز بشكل كبير. التطبيقات التي تعمل على محاكي Apple Silicon تستخدم نفس تعليمات ARM كما في iPhone الفعلي، مما يجعل اختبارات الأداء أكثر تمثيلاً. الفرق في أداء Metal و Core Animation بين محاكي السلسلة M و iPhone حقيقي ضئيل مقارنة بمحاكي Intel.

إعداد المحاكي لـ CI

إعداد محاكي لـ CI يتطلب إنشاء الجهاز المطلوب وإصدار iOS مسبقًا. على خوادم التكامل المستمر، لا يتم إنشاء المحاكيات تلقائيًا — يجب إضافتها عبر xcrun simctl create قبل تشغيل الاختبارات.

bash
# إنشاء محاكي لـ CI
xcrun simctl create \
  "iPhone 16 CI" \
  "com.apple.CoreSimulator.SimDeviceType.iPhone-16" \
  "com.apple.CoreSimulator.SimRuntime.iOS-18-0"

# تشغيل الاختبارات على المحاكي الذي تم إنشاؤه
xcodebuild test \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -destination "id=$(xcrun simctl list devices | grep 'iPhone 16 CI' | awk -F'[][]' '{print }')"

لـ الاختبار المتوازي على CI، قم بتكوين عدة محاكيات بإصدارات iOS مختلفة. Xcode Cloud و GitHub Actions و Bitrise تدعم تشغيل الاختبارات بالتوازي، مما يقلل وقت التشغيل بمقدار 2-3 مرات. تأكد من تثبيت جميع محاكيات iOS اللازمة للاختبار على خادم CI.

الأسئلة الشائعة

كيف يختلف Xcode Simulator عن الجهاز الحقيقي؟

المحاكي يعمل على معمارية x86_64 ويستخدم معالج Mac، بينما الجهاز الحقيقي يعمل على ARM64 Apple Silicon. المحاكي لا يحاكي الكاميرا وأجهزة الاستشعار و GPU Metal و Bluetooth LE والبطارية. يتم تجميع الكود لمعمارية المضيف، لذا فإن اختبارات الأداء على المحاكي غير تمثيلية.

كيف أتحقق في الكود مما إذا كان التطبيق يعمل على المحاكي؟

استخدم #if targetEnvironment(simulator) في Swift أو #if TARGET_OS_SIMULATOR في Objective-C. هذه توجيهات تجميع شرطي: الكود في الكتلة يتم تنفيذه فقط على المحاكي. مفيد لكائنات الكاميرا الوهمية وسجلات التصحيح غير المتوفرة على الجهاز الحقيقي.

هل يمكن اختبار إشعارات الدفع على المحاكي؟

نعم، بدءًا من Xcode 11.4، المحاكي يدعم محاكاة إشعارات الدفع عبر ملف .apns بهيكل JSON. اسحب الملف إلى المحاكي قيد التشغيل أو استخدم الأمر xcrun simctl push. تظهر الإشعارات بالكامل كما على الجهاز الحقيقي.

ما هي قيود Xcode Simulator؟

المحاكي لا يدعم الكاميرا والميكروفون ومقياس التسارع والجيروسكوب و TrueDepth و Touch ID (باستثناء المحاكاة) و Face ID (باستثناء المحاكاة) و Bluetooth LE و NFC. يتم محاكاة أداء Metal على GPU Mac، مما لا يعكس أداء iPhone الحقيقي. لا يمكن قياس استهلاك الطاقة.

كيف تشغيل الاختبارات على CI باستخدام المحاكي؟

أنشئ محاكيًا عبر xcrun simctl create، ثم شغّل xcodebuild test مع المعامل -destination محددًا platform=iOS Simulator واسم الجهاز. للاختبار المتوازي، أنشئ عدة محاكيات بإصدارات iOS مختلفة في تكوين CI.

الخلاصة

  • Xcode Simulator — أداة لتشغيل تطبيقات iOS على Mac، تقوم بتجميع الكود لمعمارية المضيف بدون محاكاة ARM
  • الاختلافات عن الجهاز — المحاكي لا يدعم الكاميرا و GPU Metal وأجهزة الاستشعار و Bluetooth و NFC ولا يوفر أداءً تمثيليًا
  • التجميع الشرطي — TARGET_OS_SIMULATOR و targetEnvironment(simulator) يسمحان بإضافة كائنات وهمية وسجلات تصحيح
  • الاختبار — XCTest يدعم اختبارات الوحدة وواجهة المستخدم والأداء على المحاكي بدون شهادة مطور
  • إعداد CI — أنشئ محاكيات عبر xcrun simctl وشغّل اختبارات متوازية على إصدارات iOS متعددة
  • السيناريوهات الحرجة — الكاميرا و Bluetooth وإشعارات الدفع وأداء Metal تتطلب اختبارًا على جهاز حقيقي
  • Apple Silicon Mac — المحاكي على السلسلة M يشغّل تطبيقات iOS بفروق معمارية ضئيلة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا