Ang Core Motion framework — isang bahagi ng iOS system na nagbibigay ng access sa data ng accelerometer, gyroscope, magnetometer at pedometer sa mga Apple device. Ayon sa Apple Developer Documentation, 2025, pinoproseso ng framework ang raw data ng mga sensor at ginagawang nauunawaang metrics — acceleration, angular velocity, orientation at bilang ng mga hakbang. Nag-iisang API para sa lahat ng sensor ng paggalaw ay nagpapahintulot sa mga developer na lumikha ng mga pedometer, fitness app at laro na kinokontrol sa pamamagitan ng pagtagilid ng device.
Mga pangunahing punto
Core Motion — system framework ng Apple, na ipinakilala sa iOS 4 para sa pagtatrabaho sa mga sensor ng paggalaw ng device. Nagbibigay ito ng pinag-isang interface para sa access sa accelerometer, gyroscope, magnetometer at pedometer, na nagpapalaya sa developer mula sa pangangailangang magtrabaho sa hardware drivers sa mababang antas.
Ang pangunahing bentahe ng Core Motion ay hardware filtering ng data. Awtomatikong pinagsasama ng framework ang mga pagbasa ng accelerometer at gyroscope upang kalkulahin ang purong userAcceleration na walang bahagi ng gravity, at nagbibigay din ng orientation ng device sa espasyo sa anyo ng mga quaternion at Euler angles.
Ayon sa Apple WWDC 2023, ang Core Motion ay ginagamit sa higit sa 80% ng mga fitness app sa App Store. Ang framework ay na-optimize para sa pagkonsumo ng enerhiya — ang dalas ng polling ng mga sensor ay awtomatikong bumababa kapag walang mga subscriber, na nagpapahaba ng buhay ng baterya ng device.
Isang mahalagang tampok ng arkitektura — ang paggamit ng M-series coprocessor (Motion coprocessor), na nagpoproseso ng data ng mga sensor ng paggalaw nang independyente mula sa pangunahing A-series processor. Simula sa M7 chip (iPhone 5S), ang coprocessor ay patuloy na nangongolekta ng data ng accelerometer at gyroscope, na nagpapahintulot sa CMPedometer at CMAltimeter na gumana sa background na may naka-lock na screen na may konsumo ng kuryente na mas mababa sa 1 mW. Ito ay naging posible dahil sa hardware isolation: ang coprocessor ay may sariling non-volatile memory at data bus, na independyente sa pangunahing sistema.
Ang arkitektura ng Core Motion ay binuo ayon sa singleton model sa pamamagitan ng CMMotionManager. Ang app ay tumatanggap ng isang instance ng manager at sa pamamagitan nito ay nagko-configure ng dalas ng pag-update, nagsimula o humihinto sa pagkolekta ng data mula sa bawat uri ng sensor. Ang data ay inihatid sa pamamagitan ng mga bloke na may tinukoy na interval.
Gumagamit ang framework ng dalawang mode ng pagkuha ng data: pull (aktibong polling sa pamamagitan ng startAccelerometerUpdates) at push (passive na pagtanggap sa pamamagitan ng startAccelerometerUpdatesToQueue). Ang push mode ay mas gusto para sa UI apps, dahil ang data ay inihatid sa tinukoy na queue nang hindi hinaharangan ang main thread.
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 ay nagbibigay ng access sa apat na kategorya ng mga sensor: sinusukat ng accelerometer ang linear acceleration sa tatlong axes, gyroscope — angular velocity ng pag-ikot, magnetometer — lakas ng magnetic field para sa compass. Ika-apat na kategorya — pinagsamang data ng CMDeviceMotion, na kinabibilangan ng mga na-filter na pagbasa ng lahat ng sensor.
CMDeviceMotion — ang pinakamahalagang klase para sa pag-unlad. Nagbibigay ito ng userAcceleration (acceleration na walang gravity), rotationRate (bilis ng pag-ikot), magneticField (vector ng magnetic field) at attitude (orientation ng device sa anyo ng quaternion o Euler angles). Para sa pagkalkula ng attitude, ginagamit ng Core Motion ang fusion ng data ng gyroscope at accelerometer ayon sa algorithm na katulad ng complementary filter.
Ang magnetometer ay ginagamit para sa correction ng drift ng gyroscope. Ang purong gyroscope sa paglipas ng panahon ay nag-iipon ng error dahil sa temperatura drift at ingay — itinatama ng magnetometer at accelerometer ang error na ito, na tinitiyak ang accuracy ng orientation hanggang 1–2 degrees sa static na posisyon.
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 — klase para sa pagbilang ng mga hakbang, layo ng nilakbay at tempo ng paggalaw. Gumagamit ito ng data ng accelerometer na may hardware processing sa M-series (M7/M8/M9/M10/M11) motion coprocessor. Ito ay nagpapahintulot sa pagtatrabaho sa background na may minimal na konsumo ng enerhiya — mga 1% na baterya para sa 8 oras ng tuloy-tuloy na pagsubaybay.
CMAltimeter — klase para sa pagtukoy ng relatibong taas batay sa barometer na naka-install sa iPhone 6 at mas bago. Ipinapakita ang pagbabago ng taas kaugnay sa panimulang punto na may accuracy na mga 1 metro. Ginagamit sa fitness app para sa pagbilang ng mga palapag at sa navigation app para sa pagtukoy ng mga pagkakaiba sa taas.
Ang data ng CMPedometer ay magagamit na may pagkaantala na hindi hihigit sa 5 segundo para sa kasalukuyang mga pagbasa. Para sa historikal na data, available ang seleksyon mula sa huling 7 araw sa pamamagitan ng queryPedometerData. Awtomatikong kinikilala ng pedometer ang paglalakad, pagtakbo at pagmamaneho — ang mga uri ng aktibidad na ito ay available sa pamamagitan ng queryPedometerData na may filter ayon sa uri.
Ang accuracy ng CMPedometer ay mga 95% sa normal na paglalakad at bumababa sa 90% sa pagtakbo. Ang accuracy ay apektado ng: pagkakalagay ng telepono sa bulsa o backpack, uri ng sapatos at ibabaw. Inirerekomenda ng Apple ang paggamit ng CMPedometer kasama ng Core Location para sa pagtukoy ng distansya sa labas — ang GPS ay nagbibigay ng mas tumpak na distansya, at ang Core Motion — pagbilang ng mga hakbang.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Mga hakbang: \(pedData.numberOfSteps)")
print("Distansya: \(pedData.distance)")
}
// Access sa altimeter
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Taas: \(data?.relativeAltitude)")
}
Ang pagsasama ng Core Motion ay hindi nangangailangan ng mga espesyal na pahintulot o entitlement — sapat na upang idagdag ang import ng framework at lumikha ng instance ng CMMotionManager. Gayunpaman, para sa CMPedometer simula sa iOS 11 ay kinakailangan ang kahilingan ng awtorisasyon sa pamamagitan ng CMStepCounter o paggamit ng CMPedometer na may kahilingan ng pahintulot sa pamamagitan ng system dialog.
Ang proseso ng pagsasama ay kinabibilangan ng: paglikha ng CMMotionManager, pagsuri ng availability ng sensor sa pamamagitan ng isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, pag-set ng update interval at pagsisimula ng pagtanggap ng data. Mahalagang ihinto ang mga update sa pamamagitan ng stopAccelerometerUpdates kapag hindi kailangan ang data — ito ay kritikal para sa konsumo ng enerhiya.
Para sa background work, ang CMPedometer at CMAltimeter ay hindi nangangailangan ng karagdagang mga setting — ginagamit nila ang motion coprocessor. Para sa CMMotionManager, ang background work ay hindi available — ang data ay kinokolekta lamang kapag ang app ay aktibo at nasa foreground. Ang tanging kondisyon para sa CMPedometer — ang app ay dapat na kahit isang beses na inilunsad ng user pagkatapos ng pag-install para sa initialization ng subscription sa background updates mula sa iOS.
Ang Core Motion ay sumusuporta sa adaptive polling frequency: kung ang app ay hindi nangangailangan ng real-time na data, sapat na upang itakda ang interval na 1–5 Hz sa halip na 100 Hz. Para sa fitness app, ang optimal na frequency ay 10 Hz para sa CMMotionManager at 1 Hz para sa CMPedometer. Inirerekomenda ng Apple na babaan ang frequency sa minimum na kinakailangan para sa tamang operasyon.
Para sa mga laro na kinokontrol sa pamamagitan ng pagtagilid, kinakailangan ang frequency na 60–100 Hz upang matiyak ang kinis ng reaksyon. Sa kasong ito, mahalagang gamitin ang startDeviceMotionUpdates na may hiwalay na queue at iproseso ang data nang mabilis hangga't maaari. Ayon sa Apple, ang frequency na 60 Hz ay kumokonsumo ng mga 2 beses na mas maraming enerhiya kaysa 30 Hz.
Kapag nagtatrabaho sa Core Motion, kailangang isaalang-alang ang compatibility ng device: ang gyroscope ay wala sa iPhone 3GS at iPad 1st generation, ang magnetometer — sa lahat ng iPad na walang cellular module. Para sa pagsuri ng availability ng mga sensor, ginagamit ang mga static na pamamaraan na isAccelerometerAvailable, isGyroAvailable at isDeviceMotionAvailable ng klase na CMMotionManager. Sa simulator, ang Core Motion ay nagbabalik ng test data — para sa debugging sa totoong sensor, palaging kinakailangan ang pisikal na Apple device.
// Optimal na configuration para sa fitness app
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()
}
}
Mga madalas itanong
Oo, gumagana ang Core Motion sa lahat ng Apple device na may kinakailangang mga sensor. Ang accelerometer ay nasa lahat ng iPhone, iPad at iPod touch. Ang gyroscope — sa lahat ng iPhone 4 at mas bago, iPad 2 at mas bago. Ang magnetometer — sa iPhone lamang, wala sa iPad. Ang barometer — sa iPhone 6 at mas bago.
Ang epekto sa baterya ay nakadepende sa polling frequency. Sa 100 Hz, ang Core Motion ay kumokonsumo ng mga 5–7% na baterya bawat oras. Sa 10 Hz — mga 1–2% bawat oras. Ang CMPedometer sa motion coprocessor ay kumokonsumo ng mas mababa sa 1% sa loob ng 8 oras ng trabaho. Inirerekomenda ng Apple na palaging ihinto ang mga update kapag hindi kailangan ang data.
Oo, ang CMPedometer ay nagbibigay ng handa na solusyon para sa pedometer nang hindi kinakailangang iproseso ang raw data ng accelerometer. Awtomatikong kinikilala ng klase ang mga hakbang na may accuracy na mga 95% sa paglalakad at 90% sa pagtakbo. Para sa custom na detector ng hakbang, maaaring gamitin ang CMMotionManager na may sariling algorithm.
Core Motion ay isinama sa iOS sa antas ng system at gumagamit ng M-series coprocessor para sa low-power processing. Ang Android ay gumagamit ng SensorManager na may direktang access sa hardware drivers, ngunit walang specialized coprocessor, na nagpapataas ng konsumo ng enerhiya sa background tracking.
Para sa CMPedometer sa iOS 11 at mas bago, kinakailangan ang pahintulot ng user. Ang kahilingan ay awtomatikong ginagawa kapag lumilikha ng CMPedometer at nagpapakita ng system dialog. Sa Info.plist, dapat idagdag ang key na NSMotionUsageDescription na may paglalarawan kung bakit kailangan ng app ang access sa data ng paggalaw.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din