إطار عمل Core Motion هو مكون نظام iOS يوفر الوصول إلى بيانات مقياس التسارع والجيروسكوب ومقياس المغناطيسية وعداد الخطوات على أجهزة Apple. وفقًا لـ Apple Developer Documentation, 2025, يقوم الإطار بمعالجة البيانات الخام من المستشعرات وتحويلها إلى مقاييس مفهومة — التسارع والسرعة الزاوية والاتجاه وعدد الخطوات. API موحدة لجميع مستشعرات الحركة تتيح للمطورين إنشاء عدادات خطوات وتطبيقات لياقة بدنية وألعاب مع التحكم بإمالة الجهاز.
النقاط الرئيسية
Core Motion هو إطار عمل نظام من Apple، تم تقديمه في iOS 4 للعمل مع مستشعرات حركة الجهاز. يوفر واجهة موحدة للوصول إلى مقياس التسارع والجيروسكوب ومقياس المغناطيسية وعداد الخطوات، مما يريح المطور من الحاجة إلى العمل مع برامج تشغيل الأجهزة على مستوى منخفض.
الميزة الرئيسية لـ Core Motion هي الترشيح بواسطة الأجهزة للبيانات. يقوم الإطار تلقائيًا بدمج قراءات مقياس التسارع والجيروسكوب لحساب userAcceleration النقي بدون مكون الجاذبية، كما يوفر اتجاه الجهاز في الفضاء على شكل رباعيات quaternions وزوايا أويلر.
وفقًا لـ Apple WWDC 2023, يتم استخدام Core Motion في أكثر من 80% من تطبيقات اللياقة البدنية في App Store. الإطار محسّن لاستهلاك الطاقة — ينخفض تردد استقصاء المستشعرات تلقائيًا عند عدم وجود مشتركين, مما يطيل عمر بطارية الجهاز.
ميزة معمارية مهمة هي استخدام المعالج المساعد من السلسلة M (Motion coprocessor), الذي يعالج بيانات مستشعرات الحركة بشكل مستقل عن المعالج الرئيسي من السلسلة A. بدءًا من شريحة M7 (iPhone 5S), يجمع المعالج المساعد باستمرار بيانات مقياس التسارع والجيروسكوب, مما يسمح لـ CMPedometer و CMAltimeter بالعمل في الخلفية مع شاشة مقفلة باستهلاك أقل من 1 ميجاواط. أصبح هذا ممكنًا بفضل العزل المادي: المعالج المساعد لديه ذاكرة غير متطايرة وناقل بيانات خاص به مستقل عن النظام الرئيسي.
هندسة Core Motion مبنية على نموذج singleton من خلال CMMotionManager. يحصل التطبيق على مثيل واحد من المدير ومن خلاله يضبط تردد التحديث, ويبدأ أو يوقف جمع البيانات لكل نوع من المستشعرات. تصل البيانات من خلال كتل الإغلاق (closures) بالفواصل الزمنية المحددة.
يستخدم الإطار وضعين لاسترجاع البيانات: pull (الاستقصاء النشط عبر startAccelerometerUpdates) و push (الاستقبال السلبي عبر startAccelerometerUpdatesToQueue). وضع push مفضل لتطبيقات واجهة المستخدم حيث يتم تسليم البيانات إلى قائمة الانتظار المحددة دون حظر الخيط الرئيسي.
import CoreMotion
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
guard motionManager
.isAccelerometerAvailable else { return }
motionManager.startAccelerometerUpdates(
to: OperationQueue.current()!
) { data, _ in
guard let accel = data?.acceleration else { return }
print("X: \(accel.x), Y: \(accel.y), Z: \(accel.z)")
}
Core Motion يوفر الوصول إلى أربع فئات من المستشعرات: مقياس التسارع يقيس التسارع الخطي على ثلاثة محاور, والجيروسكوب يقيس سرعة الدوران الزاوية, ومقياس المغناطيسية يقيس شدة المجال المغناطيسي للبوصلة. الفئة الرابعة هي بيانات CMDeviceMotion المدمجة, التي تتضمن قراءات مرشحة من جميع المستشعرات.
CMDeviceMotion هو الفئة الأكثر قيمة للتطوير. يوفر userAcceleration (التسارع بدون جاذبية), rotationRate (سرعة الدوران), magneticField (متجه المجال المغناطيسي) و attitude (اتجاه الجهاز على شكل quaternion أو زوايا أويلر). لحساب attitude, يستخدم CoreMotion دمج مستشعرات الجيروسكوب ومقياس التسارع بخوارزمية مشابهة للمرشح التكميلي.
يستخدم مقياس المغناطيسية لتصحيح انجراف الجيروسكوب. الجيروسكوب النقي يراكم الأخطاء بمرور الوقت بسبب الانجراف الحراري والضوضاء — يقوم مقياس المغناطيسية ومقياس التسارع بتصحيح هذا الخطأ, مما يوفر دقة توجيه من 1 إلى 2 درجة في الوضع الثابت.
guard motionManager
.isDeviceMotionAvailable else { return }
motionManager.deviceMotionUpdateInterval = 1.0 // 1 هرتز
motionManager.startDeviceMotionUpdates(
using: .xArbitraryZVertical,
to: OperationQueue.current()!
) { motion, _ in
guard let attitude = motion?.attitude else { return }
print("Roll: \(attitude.roll)")
print("Pitch: \(attitude.pitch)")
print("Yaw: \(attitude.yaw)")
}
CMPedometer — فئة لحساب الخطوات والمسافة المقطوعة ووتيرة الحركة. يستخدم بيانات مقياس التسارع مع معالجة الأجهزة على المعالج المساعد للحركة من السلسلة M (M7/M8/M9/M10/M11). هذا يسمح له بالعمل في الخلفية مع استهلاك طاقة ضئيل — حوالي 1% من البطارية لكل 8 ساعات من التتبع المستمر.
CMAltimeter — فئة لتحديد الارتفاع النسبي بناءً على البارومتر المثبت في iPhone 6 والإصدارات الأحدث. يُظهر تغير الارتفاع بالنسبة لنقطة البداية بدقة حوالي متر واحد. يُستخدم في تطبيقات اللياقة البدنية لعد الطوابق وفي تطبيقات الملاحة لتحديد تغيرات الارتفاع.
بيانات CMPedometer متاحة بتأخير لا يزيد عن 5 ثوانٍ للقراءات الحالية. للبيانات التاريخية, يتوفر استرجاع 7 أيام عبر queryPedometerData. يتعرف عداد الخطوات تلقائيًا على المشي والجري وركوب الدراجات — هذه الأنشطة متاحة عبر queryPedometerData مع التصفية حسب النوع.
دقة CMPedometer تبلغ حوالي 95% عند المشي العادي وتنخفض إلى 90% عند الجري. تتأثر الدقة بوضع الهاتف في الجيب أو حقيبة الظهر ونوع الأحذية والسطح. توصي Apple باستخدام CMPedometer مع Core Location لتحديد المسافة في الهواء الطلق — GPS يوفر مسافة أكثر دقة بينما Core Motion يتولى حساب الخطوات.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("الخطوات: \(pedData.numberOfSteps)")
print("المسافة: \(pedData.distance)")
}
// الوصول إلى مقياس الارتفاع
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("الارتفاع: \(data?.relativeAltitude)")
}
دمج Core Motion لا يتطلب أذونات خاصة أو entitlements — يكفي إضافة استيراد الإطار وإنشاء مثيل CMMotionManager. ومع ذلك, بالنسبة لـ CMPedometer بدءًا من iOS 11, يلزم الحصول على إذن عبر CMStepCounter أو باستخدام CMPedometer مع حوار إذن النظام.
عملية الدمج تشمل: إنشاء CMMotionManager والتحقق من توفر المستشعر عبر isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable وضبط فاصل التحديث وبدء جمع البيانات. من المهم إيقاف التحديثات عبر stopAccelerometerUpdates عندما لا تكون البيانات مطلوبة — هذا أمر بالغ الأهمية لاستهلاك الطاقة.
للعمل في الخلفية, CMPedometer و CMAltimeter لا يتطلبان تكوينًا إضافيًا — يستخدمان المعالج المساعد للحركة. بالنسبة لـ CMMotionManager, العمل في الخلفية غير متاح — يتم جمع البيانات فقط عندما يكون التطبيق نشطًا وفي المقدمة. الشرط الوحيد لـ CMPedometer هو أن التطبيق يجب أن يكون قد تم تشغيله مرة واحدة على الأقل من قبل المستخدم بعد التثبيت لتهيئة الاشتراك في تحديثات الخلفية من iOS.
Core Motion يدعم تردد استقصاء تكيفي: إذا كان التطبيق لا يحتاج إلى بيانات في الوقت الفعلي, يكفي ضبط الفاصل على 1–5 هرتز بدلاً من 100 هرتز. لتطبيقات اللياقة البدنية, التردد الأمثل هو 10 هرتز لـ CMMotionManager و 1 هرتز لـ CMPedometer. توصي Apple بتقليل التردد إلى الحد الأدنى الضروري للتشغيل الصحيح.
للألعاب ذات التحكم بالإمالة, يلزم تردد 60–100 هرتز لضمان استجابة سلسة. في هذه الحالة, من المهم استخدام startDeviceMotionUpdates مع قائمة انتظار منفصلة ومعالجة البيانات بأسرع ما يمكن. وفقًا لـ Apple, تردد 60 هرتز يستهلك طاقة تعادل ضعف 30 هرتز تقريبًا.
عند العمل مع Core Motion, من المهم مراعاة توافق الأجهزة: الجيروسكوب غير موجود في iPhone 3GS و iPad الجيل الأول, ومقياس المغناطيسية غير موجود في جميع أجهزة iPad بدون وحدة خلوية. تُستخدم الطرق الثابتة isAccelerometerAvailable و isGyroAvailable و isDeviceMotionAvailable من فئة CMMotionManager للتحقق من توفر المستشعرات. على المحاكي, يعيد Core Motion بيانات اختبار — لتصحيح الأخطاء على مستشعر حقيقي, يلزم دائمًا جهاز Apple فعلي.
// الإعداد الأمثل لتطبيق اللياقة البدنية
motionManager.deviceMotionUpdateInterval = 0.1 // 10 هرتز
motionManager.startDeviceMotionUpdates(
to: .main
) { [weak self] motion, error in
guard let self = self,
let motion = motion else { return }
if motion.userAcceleration.magnitude() > 2.0 {
self.detectedSignificantMovement()
}
}
الأسئلة الشائعة
نعم, Core Motion يعمل على جميع أجهزة Apple التي تحتوي على المستشعرات اللازمة. مقياس التسارع متوفر في جميع iPhone و iPad و iPod touch. الجيروسكوب متوفر في جميع iPhone 4 والإصدارات الأحدث و iPad 2 والإصدارات الأحدث. مقياس المغناطيسية متوفر فقط في iPhone وليس في iPad. البارومتر متوفر في iPhone 6 والإصدارات الأحدث.
التأثير على البطارية يعتمد على تردد الاستقصاء. عند 100 هرتز, يستهلك Core Motion حوالي 5–7% من البطارية في الساعة. عند 10 هرتز — حوالي 1–2% في الساعة. CMPedometer على المعالج المساعد للحركة يستهلك أقل من 1% خلال 8 ساعات من التشغيل. توصي Apple دائمًا بإيقاف التحديثات عندما لا تكون البيانات مطلوبة.
نعم, CMPedometer يوفر حلًا جاهزًا لعداد الخطوات دون الحاجة لمعالجة البيانات الخام من مقياس التسارع. تتعرف الفئة تلقائيًا على الخطوات بدقة حوالي 95% عند المشي و 90% عند الجري. لكاشف خطوات مخصص, يمكن استخدام CMMotionManager مع خوارزمية خاصة بك.
Core Motion مدمج في iOS على مستوى النظام ويستخدم المعالج المساعد من السلسلة M للمعالجة منخفضة الطاقة. Android يستخدم SensorManager مع وصول مباشر إلى برامج تشغيل الأجهزة ولكن لا يحتوي على معالج مساعد متخصص, مما يزيد من استهلاك الطاقة أثناء التتبع في الخلفية.
بالنسبة لـ CMPedometer على iOS 11 والإصدارات الأحدث, مطلوب إذن المستخدم. يتم الطلب تلقائيًا عند إنشاء CMPedometer ويظهر حوار النظام. في Info.plist, يجب إضافة المفتاح NSMotionUsageDescription مع وصف لسبب حاجة التطبيق للوصول إلى بيانات الحركة.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا