Το πλαίσιο Core Motion — ένα στοιχείο συστήματος iOS που παρέχει πρόσβαση σε δεδομένα επιταχυνσιόμετρου, γυροσκοπίου, μαγνητόμετρου και βηματομετρητή σε συσκευές Apple. Σύμφωνα με το Apple Developer Documentation, 2025, το πλαίσιο επεξεργάζεται ακατέργαστα δεδομένα αισθητήρων και τα μετατρέπει σε κατανοητές μετρήσεις — επιτάχυνση, γωνιακή ταχύτητα, προσανατολισμό και αριθμό βημάτων. Ενιαίο API για όλους τους αισθητήρες κίνησης επιτρέπει στους προγραμματιστές να δημιουργούν βηματομετρητές, εφαρμογές γυμναστικής και παιχνίδια που ελέγχονται με κλίση της συσκευής.
Βασικά σημεία
Core Motion — το πλαίσιο συστήματος της Apple, που εισήχθη στο iOS 4 για εργασία με αισθητήρες κίνησης συσκευής. Παρέχει μια ενοποιημένη διεπαφή για πρόσβαση στο επιταχυνσιόμετρο, γυροσκόπιο, μαγνητόμετρο και βηματομετρητή, απαλλάσσοντας τον προγραμματιστή από την ανάγκη εργασίας με προγράμματα οδήγησης υλικού σε χαμηλό επίπεδο.
Το βασικό πλεονέκτημα του Core Motion είναι το φιλτράρισμα υλικού δεδομένων. Το πλαίσιο συνδυάζει αυτόματα τις μετρήσεις του επιταχυνσιόμετρου και του γυροσκοπίου για να υπολογίσει καθαρό userAcceleration χωρίς τη συνιστώσα βαρύτητας, καθώς και παρέχει τον προσανατολισμό της συσκευής στο χώρο με τη μορφή τετραδονίων και γωνιών Euler.
Σύμφωνα με το Apple WWDC 2023, το Core Motion χρησιμοποιείται σε περισσότερες από το 80% των εφαρμογών γυμναστικής στο App Store. Το πλαίσιο είναι βελτιστοποιημένο για κατανάλωση ενέργειας — η συχνότητα δημοσκόπησης των αισθητήρων μειώνεται αυτόματα απουσία συνδρομητών, παρατείνοντας τη διάρκεια ζωής της μπαταρίας της συσκευής.
Ένα σημαντικό αρχιτεκτονικό χαρακτηριστικό — η χρήση του συνεπεξεργαστή σειράς M (Motion coprocessor), ο οποίος επεξεργάζεται δεδομένα αισθητήρων κίνησης ανεξάρτητα από τον κύριο επεξεργαστή σειράς A. Ξεκινώντας από το τσιπ M7 (iPhone 5S), ο συνεπεξεργαστής συλλέγει συνεχώς δεδομένα επιταχυνσιόμετρου και γυροσκοπίου, επιτρέποντας στο CMPedometer και CMAltimeter να λειτουργούν στο παρασκήνιο με κλειδωμένη οθόνη με κατανάλωση ενέργειας μικρότερη από 1 mW. Αυτό κατέστη δυνατό χάρη στην απομόνωση υλικού: ο συνεπεξεργαστής έχει τη δική του μη πτητική μνήμη και δίαυλο δεδομένων, ανεξάρτητο από το κύριο σύστημα.
Η αρχιτεκτονική του Core Motion είναι χτισμένη σύμφωνα με το μοντέλο singleton μέσω του CMMotionManager. Η εφαρμογή λαμβάνει ένα μοναδικό στιγμιότυπο του διαχειριστή και μέσω αυτού ρυθμίζει τη συχνότητα ενημέρωσης, ξεκινά ή σταματά τη συλλογή δεδομένων από κάθε τύπο αισθητήρα. Τα δεδομένα παραδίδονται μέσω μπλοκ με καθορισμένο διάστημα.
Το πλαίσιο χρησιμοποιεί δύο λειτουργίες λήψης δεδομένων: pull (ενεργή δημοσκόπηση μέσω startAccelerometerUpdates) και push (παθητική λήψη μέσω startAccelerometerUpdatesToQueue). Η λειτουργία push είναι προτιμότερη για εφαρμογές UI, καθώς τα δεδομένα παραδίδονται στην καθορισμένη ουρά χωρίς αποκλεισμό του κύριου νήματος.
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 (προσανατολισμός συσκευής με μορφή τετραδονίου ή γωνιών Euler). Για τον υπολογισμό του attitude, το Core Motion χρησιμοποιεί σύντηξη δεδομένων γυροσκοπίου και επιταχυνσιόμετρου με αλγόριθμο παρόμοιο με συμπληρωματικό φίλτρο.
Το μαγνητόμετρο χρησιμοποιείται για διόρθωση μετατόπισης του γυροσκοπίου. Το καθαρό γυροσκόπιο με την πάροδο του χρόνου συσσωρεύει σφάλμα λόγω θερμοκρασιακής μετατόπισης και θορύβου — το μαγνητόμετρο και το επιταχυνσιόμετρο διορθώνουν αυτό το σφάλμα, εξασφαλίζοντας ακρίβεια προσανατολισμού έως 1–2 μοίρες σε στατική θέση.
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 — κλάση για μέτρηση βημάτων, διανυθείσας απόστασης και ρυθμού κίνησης. Χρησιμοποιεί δεδομένα επιταχυνσιόμετρου με επεξεργασία υλικού στον συνεπεξεργαστή κίνησης σειράς M (M7/M8/M9/M10/M11). Αυτό επιτρέπει την εργασία στο παρασκήνιο με ελάχιστη κατανάλωση ενέργειας — περίπου 1% μπαταρία για 8 ώρες συνεχούς παρακολούθησης.
CMAltimeter — κλάση για τον προσδιορισμό σχετικού ύψους βάσει βαρομέτρου, εγκατεστημένου σε iPhone 6 και νεότερα. Δείχνει αλλαγή ύψους σε σχέση με το σημείο εκκίνησης με ακρίβεια περίπου 1 μέτρου. Χρησιμοποιείται σε εφαρμογές γυμναστικής για μέτρηση ορόφων και σε εφαρμογές πλοήγησης για προσδιορισμό υψομετρικών διαφορών.
Τα δεδομένα 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 δεν απαιτεί ειδικές άδειες ή entitlement — αρκεί να προσθέσετε import του πλαισίου και να δημιουργήσετε ένα στιγμιότυπο CMMotionManager. Ωστόσο, για CMPedometer από iOS 11 απαιτείται αίτημα εξουσιοδότησης μέσω CMStepCounter ή χρήση CMPedometer με αίτημα άδειας μέσω συστήματος διαλόγου.
Η διαδικασία ενσωμάτωσης περιλαμβάνει: δημιουργία CMMotionManager, έλεγχο διαθεσιμότητας αισθητήρα μέσω isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, ρύθμιση διαστήματος ενημέρωσης και έναρξη λήψης δεδομένων. Είναι σημαντικό να σταματάτε τις ενημερώσεις μέσω stopAccelerometerUpdates όταν τα δεδομένα δεν είναι απαραίτητα — αυτό είναι κρίσιμο για την κατανάλωση ενέργειας.
Για εργασία στο παρασκήνιο, τα CMPedometer και CMAltimeter δεν απαιτούν πρόσθετες ρυθμίσεις — χρησιμοποιούν τον συνεπεξεργαστή κίνησης. Για CMMotionManager, η εργασία στο παρασκήνιο δεν είναι διαθέσιμη — τα δεδομένα συλλέγονται μόνο όταν η εφαρμογή είναι ενεργή και βρίσκεται στο προσκήνιο. Η μόνη προϋπόθεση για CMPedometer — η εφαρμογή πρέπει να έχει εκκινηθεί τουλάχιστον μία φορά από τον χρήστη μετά την εγκατάσταση για αρχικοποίηση της συνδρομής σε ενημερώσεις παρασκηνίου από το iOS.
Το Core Motion υποστηρίζει προσαρμοστική συχνότητα δημοσκόπησης: αν η εφαρμογή δεν χρειάζεται δεδομένα σε πραγματικό χρόνο, αρκεί να ορίσετε διάστημα 1–5 Hz αντί για 100 Hz. Για εφαρμογές γυμναστικής, η βέλτιστη συχνότητα είναι 10 Hz για CMMotionManager και 1 Hz για CMPedometer. Η Apple συνιστά τη μείωση της συχνότητας στο ελάχιστο απαραίτητο για σωστή λειτουργία.
Για παιχνίδια που ελέγχονται με κλίση, απαιτείται συχνότητα 60–100 Hz για να εξασφαλιστεί ομαλή απόκριση. Σε αυτή την περίπτωση, είναι σημαντικό να χρησιμοποιείτε startDeviceMotionUpdates με ξεχωριστή ουρά και να επεξεργάζεστε τα δεδομένα όσο το δυνατόν γρηγορότερα. Σύμφωνα με την Apple, η συχνότητα 60 Hz καταναλώνει περίπου 2 φορές περισσότερη ενέργεια από τα 30 Hz.
Κατά την εργασία με Core Motion, πρέπει να λαμβάνεται υπόψη η συμβατότητα συσκευών: το γυροσκόπιο απουσιάζει σε iPhone 3GS και iPad 1ης γενιάς, το μαγνητόμετρο — σε όλα τα iPad χωρίς κυψελωτή μονάδα. Για έλεγχο διαθεσιμότητας αισθητήρων χρησιμοποιούνται οι στατικές μέθοδοι isAccelerometerAvailable, isGyroAvailable και isDeviceMotionAvailable της κλάσης CMMotionManager. Στον προσομοιωτή, το Core Motion επιστρέφει δοκιμαστικά δεδομένα — για εντοπισμό σφαλμάτων σε πραγματικό αισθητήρα απαιτείται πάντα φυσική συσκευή Apple.
// Βέλτιστη ρύθμιση για εφαρμογή γυμναστικής
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()
}
}
Συχνές ερωτήσεις
Ναι, το Core Motion λειτουργεί σε όλες τις συσκευές Apple με απαραίτητους αισθητήρες. Το επιταχυνσιόμετρο υπάρχει σε όλα τα iPhone, iPad και iPod touch. Το γυροσκόπιο — σε όλα τα iPhone 4 και νεότερα, iPad 2 και νεότερα. Το μαγνητόμετρο — μόνο σε iPhone, σε iPad απουσιάζει. Το βαρόμετρο — σε iPhone 6 και νεότερα.
Η επίδραση στην μπαταρία εξαρτάται από τη συχνότητα δημοσκόπησης. Στα 100 Hz, το Core Motion καταναλώνει περίπου 5–7% μπαταρία ανά ώρα. Στα 10 Hz — περίπου 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης