Framework Core Motion — komponen sistem iOS yang menyediakan akses ke data akselerometer, giroskop, magnetometer, dan pedometer di perangkat Apple. Menurut Apple Developer Documentation, 2025, framework ini memproses data mentah sensor dan mengubahnya menjadi metrik yang dapat dipahami — percepatan, kecepatan sudut, orientasi, dan jumlah langkah. API terpadu untuk semua sensor gerakan memungkinkan pengembang membuat pedometer, aplikasi kebugaran, dan game yang dikendalikan dengan kemiringan perangkat.
Poin penting
Core Motion — framework sistem Apple, diperkenalkan di iOS 4 untuk bekerja dengan sensor gerakan perangkat. Ini menyediakan antarmuka terpadu untuk akses ke akselerometer, giroskop, magnetometer, dan pedometer, membebaskan pengembang dari kebutuhan bekerja dengan driver perangkat keras di tingkat rendah.
Keuntungan utama Core Motion adalah filtrasi perangkat keras data. Framework secara otomatis menggabungkan pembacaan akselerometer dan giroskop untuk menghitung userAcceleration murni tanpa komponen gravitasi, serta memberikan orientasi perangkat di ruang dalam bentuk quaternion dan sudut Euler.
Menurut Apple WWDC 2023, Core Motion digunakan di lebih dari 80% aplikasi kebugaran di App Store. Framework dioptimalkan untuk konsumsi daya — frekuensi polling sensor secara otomatis berkurang saat tidak ada pelanggan, memperpanjang masa pakai baterai perangkat.
Fitur arsitektur penting — penggunaan koprosesor seri M (Motion coprocessor), yang memproses data sensor gerakan secara independen dari prosesor utama seri A. Mulai dari chip M7 (iPhone 5S), koprosesor terus mengumpulkan data akselerometer dan giroskop, memungkinkan CMPedometer dan CMAltimeter bekerja di latar belakang dengan layar terkunci dengan konsumsi daya kurang dari 1 mW. Ini dimungkinkan berkat isolasi perangkat keras: koprosesor memiliki memori non-volatil dan bus data sendiri, independen dari sistem utama.
Arsitektur Core Motion dibangun berdasarkan model singleton melalui CMMotionManager. Aplikasi menerima satu instance manajer dan melaluinya mengkonfigurasi frekuensi pembaruan, memulai atau menghentikan pengumpulan data dari setiap jenis sensor. Data dikirim melalui blok dengan interval yang ditentukan.
Framework menggunakan dua mode pengambilan data: pull (polling aktif melalui startAccelerometerUpdates) dan push (penerimaan pasif melalui startAccelerometerUpdatesToQueue). Mode push lebih disukai untuk aplikasi UI, karena data dikirim ke antrian yang ditentukan tanpa memblokir thread utama.
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 menyediakan akses ke empat kategori sensor: akselerometer mengukur percepatan linier di sepanjang tiga sumbu, giroskop — kecepatan sudut rotasi, magnetometer — kekuatan medan magnet untuk kompas. Kategori keempat — data gabungan CMDeviceMotion, yang mencakup pembacaan terfilter dari semua sensor.
CMDeviceMotion — kelas paling berharga untuk pengembangan. Ini menyediakan userAcceleration (percepatan tanpa gravitasi), rotationRate (kecepatan rotasi), magneticField (vektor medan magnet) dan attitude (orientasi perangkat dalam bentuk quaternion atau sudut Euler). Untuk menghitung attitude, Core Motion menggunakan fusi data giroskop dan akselerometer dengan algoritma yang mirip dengan filter komplementer.
Magnetometer digunakan untuk koreksi drift giroskop. Giroskop murni seiring waktu mengakumulasi kesalahan karena drift suhu dan noise — magnetometer dan akselerometer mengoreksi kesalahan ini, memastikan akurasi orientasi hingga 1–2 derajat dalam posisi statis.
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 — kelas untuk menghitung langkah, jarak tempuh, dan kecepatan gerakan. Menggunakan data akselerometer dengan pemrosesan perangkat keras pada koprosesor gerakan seri M (M7/M8/M9/M10/M11). Ini memungkinkan bekerja di latar belakang dengan konsumsi daya minimal — sekitar 1% baterai untuk 8 jam pelacakan terus menerus.
CMAltimeter — kelas untuk menentukan ketinggian relatif berdasarkan barometer yang terpasang di iPhone 6 dan lebih baru. Menunjukkan perubahan ketinggian relatif terhadap titik awal dengan akurasi sekitar 1 meter. Digunakan dalam aplikasi kebugaran untuk menghitung lantai dan dalam aplikasi navigasi untuk menentukan perbedaan ketinggian.
Data CMPedometer tersedia dengan penundaan tidak lebih dari 5 detik untuk pembacaan saat ini. Untuk data historis, tersedia pilihan dari 7 hari terakhir melalui queryPedometerData. Pedometer secara otomatis mengenali berjalan, berlari, dan berkendara — jenis aktivitas ini tersedia melalui queryPedometerData dengan filter berdasarkan jenis.
Akurasi CMPedometer sekitar 95% saat berjalan normal dan menurun hingga 90% saat berlari. Akurasi dipengaruhi oleh: penempatan telepon di saku atau ransel, jenis alas kaki, dan permukaan. Apple merekomendasikan penggunaan CMPedometer dalam kombinasi dengan Core Location untuk menentukan jarak di luar ruangan — GPS memberikan jarak yang lebih akurat, dan Core Motion — penghitungan langkah.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Langkah: \(pedData.numberOfSteps)")
print("Jarak: \(pedData.distance)")
}
// Akses ke altimeter
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Ketinggian: \(data?.relativeAltitude)")
}
Integrasi Core Motion tidak memerlukan izin khusus atau entitlement — cukup tambahkan import framework dan buat instance CMMotionManager. Namun, untuk CMPedometer mulai iOS 11 diperlukan permintaan otorisasi melalui CMStepCounter atau penggunaan CMPedometer dengan permintaan izin melalui dialog sistem.
Proses integrasi meliputi: membuat CMMotionManager, memeriksa ketersediaan sensor melalui isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, mengatur interval pembaruan dan memulai penerimaan data. Penting untuk menghentikan pembaruan melalui stopAccelerometerUpdates saat data tidak diperlukan — ini sangat penting untuk konsumsi daya.
Untuk kerja latar belakang, CMPedometer dan CMAltimeter tidak memerlukan pengaturan tambahan — mereka menggunakan koprosesor gerakan. Untuk CMMotionManager, kerja latar belakang tidak tersedia — data hanya dikumpulkan saat aplikasi aktif dan berada di latar depan. Satu-satunya syarat untuk CMPedometer — aplikasi harus setidaknya sekali dijalankan oleh pengguna setelah instalasi untuk menginisialisasi langganan pembaruan latar belakang dari iOS.
Core Motion mendukung frekuensi polling adaptif: jika aplikasi tidak memerlukan data real-time, cukup atur interval 1–5 Hz daripada 100 Hz. Untuk aplikasi kebugaran, frekuensi optimal adalah 10 Hz untuk CMMotionManager dan 1 Hz untuk CMPedometer. Apple merekomendasikan untuk menurunkan frekuensi ke minimum yang diperlukan untuk pengoperasian yang benar.
Untuk game yang dikendalikan dengan kemiringan, diperlukan frekuensi 60–100 Hz untuk memastikan kelancaran respons. Dalam hal ini, penting untuk menggunakan startDeviceMotionUpdates dengan antrian terpisah dan memproses data secepat mungkin. Menurut Apple, frekuensi 60 Hz mengkonsumsi sekitar 2 kali lebih banyak energi daripada 30 Hz.
Saat bekerja dengan Core Motion, perlu mempertimbangkan kompatibilitas perangkat: giroskop tidak ada di iPhone 3GS dan iPad generasi 1, magnetometer — di semua iPad tanpa modul seluler. Untuk memeriksa ketersediaan sensor, gunakan metode statis isAccelerometerAvailable, isGyroAvailable, dan isDeviceMotionAvailable dari kelas CMMotionManager. Di simulator, Core Motion mengembalikan data uji — untuk debugging pada sensor nyata, selalu diperlukan perangkat Apple fisik.
// Konfigurasi optimal untuk aplikasi kebugaran
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()
}
}
Pertanyaan yang sering diajukan
Ya, Core Motion berfungsi di semua perangkat Apple dengan sensor yang diperlukan. Akselerometer ada di semua iPhone, iPad, dan iPod touch. Giroskop — di semua iPhone 4 dan lebih baru, iPad 2 dan lebih baru. Magnetometer — hanya di iPhone, tidak di iPad. Barometer — di iPhone 6 dan lebih baru.
Dampak pada baterai tergantung pada frekuensi polling. Pada 100 Hz, Core Motion mengkonsumsi sekitar 5–7% baterai per jam. Pada 10 Hz — sekitar 1–2% per jam. CMPedometer pada koprosesor gerakan mengkonsumsi kurang dari 1% selama 8 jam kerja. Apple merekomendasikan untuk selalu menghentikan pembaruan saat data tidak diperlukan.
Ya, CMPedometer menyediakan solusi siap pakai untuk pedometer tanpa perlu memproses data mentah akselerometer. Kelas secara otomatis mengenali langkah dengan akurasi sekitar 95% saat berjalan dan 90% saat berlari. Untuk detektor langkah khusus, CMMotionManager dapat digunakan dengan algoritma sendiri.
Core Motion terintegrasi di iOS pada tingkat sistem dan menggunakan koprosesor seri M untuk pemrosesan daya rendah. Android menggunakan SensorManager dengan akses langsung ke driver perangkat keras, tetapi tidak memiliki koprosesor khusus, yang meningkatkan konsumsi daya saat pelacakan latar belakang.
Untuk CMPedometer di iOS 11 dan lebih baru, diperlukan izin pengguna. Permintaan dilakukan secara otomatis saat membuat CMPedometer dan memanggil dialog sistem. Di Info.plist, kunci NSMotionUsageDescription harus ditambahkan dengan deskripsi mengapa aplikasi membutuhkan akses ke data gerakan.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga