Core Motion frameworku — Apple cihazlarında akselerometr, giroskop, maqnitometr və addımölçən məlumatlarına girişi təmin edən iOS sistem komponentidir. Apple Developer Documentation, 2025-ə görə, framework sensorların xam məlumatlarını emal edir və onları anlaşılan metrikalara — sürətlənmə, bucaq sürəti, oriyentasiya və addım sayına — çevirir. Bütün hərəkət sensorları üçün Vahid API proqramçılara addımölçənlər, fitnes tətbiqləri və cihazın əyilməsi ilə idarə olunan oyunlar yaratmağa imkan verir.
Əsas məqamlar
Core Motion — Apple-ın iOS 4-də təqdim edilmiş, cihazın hərəkət sensorları ilə işləmək üçün sistem frameworkudur. O, akselerometr, giroskop, maqnitometr və addımölçənə giriş üçün vahid interfeys təmin edir, proqramçını aşağı səviyyədə aparat drayverləri ilə işləmək zərurətindən azad edir.
Core Motion-un əsas üstünlüyü — məlumatların aparat filtrasiyasıdır. Framework avtomatik olaraq akselerometr və giroskop göstəricilərini birləşdirərək qravitasiya komponenti olmadan təmiz userAcceleration hesablayır, həmçinin cihazın fəzada oriyentasiyasını kvaternionlar və Eyler bucaqları şəklində verir.
Apple WWDC 2023-ə görə, Core Motion App Store-dakı fitnes tətbiqlərinin 80%-dən çoxunda istifadə olunur. Framework enerji istehlakı üçün optimallaşdırılıb — abunəçilər olmadıqda sensorların sorğu tezliyi avtomatik azalır, cihazın batareya iş müddətini uzadır.
Əhəmiyyətli memarlıq xüsusiyyəti — əsas A-seriyası prosessorundan asılı olmayaraq hərəkət sensoru məlumatlarını emal edən M-seriyası koprosessorunun (Motion coprocessor) istifadəsidir. M7 çipindən (iPhone 5S) başlayaraq, koprosessor davamlı olaraq akselerometr və giroskop məlumatlarını toplayır, CMPedometer və CMAltimeter-ə bloklanmış ekranda 1 mW-dan az enerji sərfiyyatı ilə fon rejimində işləməyə imkan verir. Bu, aparat izolyasiyası sayəsində mümkün oldu: koprosessorun öz enerji asılı olmayan yaddaşı və əsas sistemdən müstəqil məlumat magistralı var.
Core Motion memarlığı CMMotionManager vasitəsilə sinqlton modeli üzrə qurulub. Tətbiq menecerin tək bir nümunəsini alır və onun vasitəsilə yeniləmə tezliyini konfiqurasiya edir, hər bir sensor növündən məlumat toplanmasını başladır və ya dayandırır. Məlumatlar göstərilən intervalla bloklar vasitəsilə çatdırılır.
Framework iki rejimdə məlumat əldə edir: pull (startAccelerometerUpdates vasitəsilə aktiv sorğu) və push (startAccelerometerUpdatesToQueue vasitəsilə passiv qəbul). Push rejimi UI tətbiqləri üçün daha üstündür, çünki məlumatlar əsas axını bloklamadan göstərilən növbəyə çatdırılır.
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 dörd kateqoriya sensora giriş təmin edir: akselerometr üç ox üzrə xətti sürətlənməni, giroskop — fırlanma bucaq sürətini, maqnitometr — kompas üçün maqnit sahəsinin gərginliyini ölçür. Dördüncü kateqoriya — bütün sensorların filtrasiya olunmuş göstəricilərini özündə birləşdirən CMDeviceMotion məlumatlarıdır.
CMDeviceMotion — inkişaf üçün ən dəyərli sinifdir. O, userAcceleration (qravitasiyasız sürətlənmə), rotationRate (fırlanma sürəti), magneticField (maqnit sahəsi vektoru) və attitude (cihazın oriyentasiyası kvaternion və ya Eyler bucaqları şəklində) təqdim edir. Attitude hesablamaq üçün Core Motion komplementar filtrə oxşar alqoritmlə giroskop və akselerometr məlumatlarının birləşməsindən istifadə edir.
Maqnitometr giroskopun sürüşməsinin korreksiyası üçün istifadə olunur. Təmiz giroskop zamanla temperatur sürüşməsi və səs-küy səbəbindən xəta toplayır — maqnitometr və akselerometr bu xətanı düzəldərək statik vəziyyətdə 1–2 dərəcəyə qədər dəqiqlik təmin edir.
guard motionManager
.isDeviceMotionAvailable else { return }
motionManager.deviceMotionUpdateInterval = 1.0 // 1 Hz
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 — addımların, qət edilən məsafənin və hərəkət tempinin hesablanması üçün sinif. O, M-seriyası (M7/M8/M9/M10/M11) hərəkət koprosessorunda aparat emalı ilə akselerometr məlumatlarından istifadə edir. Bu, minimal enerji sərfiyyatı ilə — 8 saat fasiləsiz izləmə üçün təxminən 1% batareya — fon rejimində işləməyə imkan verir.
CMAltimeter — iPhone 6 və daha yenisində quraşdırılmış barometr əsasında nisbi hündürlüyü təyin etmək üçün sinif. Başlanğıc nöqtəsinə nisbətən hündürlük dəyişikliyini təxminən 1 metr dəqiqliklə göstərir. Fitnes tətbiqlərində mərtəbələrin sayılması və naviqasiya tətbiqlərində hündürlük fərqlərinin təyini üçün istifadə olunur.
CMPedometer məlumatları cari göstəricilər üçün 5 saniyədən çox olmayan gecikmə ilə əlçatandır. Tarixi məlumatlar üçün queryPedometerData vasitəsilə son 7 gün ərzində seçim mövcuddur. Addımölçən avtomatik olaraq yerimə, qaçış və sürməni tanıyır — bu fəaliyyət növləri queryPedometerData vasitəsilə növə görə filtr ilə əlçatandır.
CMPedometer dəqiqliyi normal yerimədə təxminən 95% təşkil edir və qaçışda 90%-ə düşür. Dəqiqliyə təsir edənlər: telefonun cibdə və ya çantada yerləşdirilməsi, ayaqqabı növü və səth. Apple açıq havada məsafəni təyin etmək üçün CMPedometer-i Core Location ilə birlikdə istifadə etməyi tövsiyə edir — GPS daha dəqiq məsafə, Core Motion isə addım hesablamasını təmin edir.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Addımlar: \(pedData.numberOfSteps)")
print("Məsafə: \(pedData.distance)")
}
// Altimetrə giriş
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Hündürlük: \(data?.relativeAltitude)")
}
Core Motion inteqrasiyası xüsusi icazələr və ya entitlement tələb etmir — sadəcə framework importu əlavə etmək və CMMotionManager nümunəsi yaratmaq kifayətdir. Lakin CMPedometer üçün iOS 11-dən etibarən CMStepCounter vasitəsilə avtorizasiya sorğusu və ya sistem dialoqu vasitəsilə icazə sorğusu ilə CMPedometer istifadəsi tələb olunur.
İnteqrasiya prosesi daxildir: CMMotionManager yaratmaq, sensorun əlçatanlığını isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable vasitəsilə yoxlamaq, yeniləmə intervalını təyin etmək və məlumat almağa başlamaq. Məlumat lazım olmadıqda stopAccelerometerUpdates vasitəsilə yeniləmələri dayandırmaq vacibdir — bu, enerji istehlakı üçün kritik əhəmiyyət daşıyır.
Addımölçən CMPedometer və altimetr CMAltimeter fon işi üçün əlavə parametrlər tələb etmir — onlar hərəkət koprosessorundan istifadə edirlər. CMMotionManager üçün fon işi mövcud deyil — məlumatlar yalnız tətbiq aktiv və ön planda olduqda toplanır. CMPedometer üçün yeganə şərt — tətbiq iOS-dan fon yeniləmələrinə abunəliyi işə salmaq üçün quraşdırmadan sonra istifadəçi tərəfindən ən azı bir dəfə işə salınmalıdır.
Core Motion adaptiv sorğu tezliyini dəstəkləyir: tətbiqə real vaxt rejimində məlumat lazım deyilsə, 100 Hz əvəzinə 1–5 Hz interval təyin etmək kifayətdir. Fitnes tətbiqləri üçün optimal tezlik CMMotionManager üçün 10 Hz və CMPedometer üçün 1 Hz-dir. Apple tezliyi düzgün işləmə üçün minimal tələb olunan səviyyəyə endirməyi tövsiyə edir.
Əyilmə ilə idarə olunan oyunlar üçün reaksiyanın hamarlığını təmin etmək üçün 60–100 Hz tezliyi tələb olunur. Bu halda ayrıca növbə ilə startDeviceMotionUpdates istifadə etmək və məlumatları mümkün qədər tez emal etmək vacibdir. Apple-a görə, 60 Hz tezliyi 30 Hz-dən təxminən 2 dəfə çox enerji sərf edir.
Core Motion ilə işləyərkən cihaz uyğunluğunu nəzərə almaq vacibdir: giroskop iPhone 3GS və iPad 1-ci nəslində, maqnitometr isə hüceyrə modulu olmayan bütün iPad-lərdə yoxdur. Sensorların əlçatanlığını yoxlamaq üçün CMMotionManager sinfinin isAccelerometerAvailable, isGyroAvailable və isDeviceMotionAvailable statik metodlarından istifadə olunur. Simulyatorda Core Motion test məlumatları qaytarır — real sensorda debug üçün həmişə fiziki Apple cihazı lazımdır.
// Fitnes tətbiqi üçün optimal konfiqurasiya
motionManager.deviceMotionUpdateInterval = 0.1 // 10 Hz
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()
}
}
Tez-tez verilən suallar
Bəli, Core Motion lazımi sensorları olan bütün Apple cihazlarında işləyir. Akselerometr bütün iPhone, iPad və iPod touch-da var. Giroskop — bütün iPhone 4 və daha yenisində, iPad 2 və daha yenisində. Maqnitometr — yalnız iPhone-da, iPad-də yoxdur. Barometr — iPhone 6 və daha yenisində.
Batareyaya təsir sorğu tezliyindən asılıdır. 100 Hz-də Core Motion saatda təxminən 5–7% batareya sərf edir. 10 Hz-də — saatda təxminən 1–2%. Hərəkət koprosessorunda CMPedometer 8 saat iş ərzində 1%-dən az sərf edir. Apple məlumat lazım olmadıqda həmişə yeniləmələri dayandırmağı tövsiyə edir.
Bəli, CMPedometer akselerometrin xam məlumatlarını emal etmək zərurəti olmadan addımölçən üçün hazır həll təqdim edir. Sinif avtomatik olaraq addımları yerimədə təxminən 95% və qaçışda 90% dəqiqliklə tanıyır. Xüsusi addım detektoru üçün CMMotionManager öz alqoritmi ilə istifadə edilə bilər.
Core Motion iOS səviyyəsində sistemə inteqrasiya olunub və aşağı enerjili emal üçün M-seriyası koprosessorundan istifadə edir. Android SensorManager-dan aparat drayverlərinə birbaşa girişlə istifadə edir, lakin ixtisaslaşmış koprosessora malik deyil, bu da fon izləmə zamanı enerji istehlakını artırır.
iOS 11 və daha yenisində CMPedometer üçün istifadəçi icazəsi tələb olunur. Sorğu CMPedometer yaradılarkən avtomatik yerinə yetirilir və sistem dialoqu çağırır. Info.plist-də tətbiqin hərəkət məlumatlarına girişə niyə ehtiyacı olduğunu izah edən NSMotionUsageDescription açarı əlavə edilməlidir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun