Core Motion framework'ü, Apple cihazlarında ivmeölçer, jiroskop, manyetometre ve pedometre verilerine erişim sağlayan bir iOS sistem bileşenidir. Apple Developer Documentation, 2025'e göre, framework sensörlerin ham verilerini işler ve bunları anlaşılır metrikler — ivme, açısal hız, yön ve adım sayısına dönüştürür. Tüm hareket sensörleri için tek bir API, geliştiricilerin pedometreler, fitness uygulamaları ve cihaz eğme kontrollü oyunlar oluşturmasına olanak tanır.
Önemli Noktalar
Core Motion, cihazın hareket sensörleriyle çalışmak için iOS 4'te tanıtılan bir Apple sistem framework'üdür. İvmeölçer, jiroskop, manyetometre ve pedometreye erişim için birleşik bir arayüz sağlayarak geliştiriciyi düşük seviyede donanım sürücüleriyle çalışma zorunluluğundan kurtarır.
Core Motion'ın temel avantajı, verilerin donanım filtrelemesidir. Framework, ivmeölçer ve jiroskop okumalarını otomatik olarak birleştirerek yerçekimi bileşeni olmadan saf userAcceleration'ı hesaplar ve ayrıca cihazın uzaydaki yönünü kuaterniyonlar ve Euler açıları şeklinde sağlar.
Apple WWDC 2023'e göre, Core Motion App Store'daki fitness uygulamalarının %80'inden fazlasında kullanılmaktadır. Framework, güç tüketimi için optimize edilmiştir — abone olmadığında sensör yoklama frekansı otomatik olarak düşer ve cihazın pil ömrünü uzatır.
Önemli bir mimari özellik, ana A serisi işlemciden bağımsız olarak hareket sensörü verilerini işleyen M serisi yardımcı işlemcinin (Motion coprocessor) kullanılmasıdır. M7 çipinden (iPhone 5S) başlayarak, yardımcı işlemci sürekli olarak ivmeölçer ve jiroskop verilerini toplar ve CMPedometer ile CMAltimeter'ın 1 mW'den az tüketimle kilitli ekranda arka planda çalışmasına olanak tanır. Bu, donanım izolasyonu sayesinde mümkün olmuştur: yardımcı işlemcinin kendi kalıcı olmayan belleği ve ana sistemden bağımsız veri yolu vardır.
Core Motion mimarisi, CMMotionManager aracılığıyla tekil nesne modeli (singleton) üzerine kurulmuştur. Uygulama, yöneticinin tek bir örneğini alır ve bu sayede güncelleme frekansını yapılandırır, her sensör türü için veri toplamayı başlatır veya durdurur. Veriler, belirtilen aralıkta closure blokları aracılığıyla gelir.
Framework, veri alımında iki mod kullanır: pull (startAccelerometerUpdates ile aktif yoklama) ve push (startAccelerometerUpdatesToQueue ile pasif alma). Push modu, UI uygulamaları için tercih edilir çünkü veriler ana iş parçacığını bloke etmeden belirtilen kuyruğa teslim edilir.
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ört sensör kategorisine erişim sağlar: ivmeölçer üç eksen boyunca doğrusal ivmeyi ölçer, jiroskop açısal dönüş hızını ölçer ve manyetometre pusula için manyetik alan gücünü ölçer. Dördüncü kategori, tüm sensörlerden filtrelenmiş okumaları içeren birleşik CMDeviceMotion verileridir.
CMDeviceMotion geliştirme için en değerli sınıftır. userAcceleration (yerçekimsiz ivme), rotationRate (dönüş hızı), magneticField (manyetik alan vektörü) ve attitude (kuaterniyon veya Euler açıları olarak cihaz yönü) sağlar. Attitude'ı hesaplamak için Core Motion, tamamlayıcı filtreye benzer bir algoritma kullanarak jiroskop ve ivmeölçerin sensör füzyonunu yapar.
Manyetometre, jiroskop sürüklenme düzeltmesi için kullanılır. Saf bir jiroskop, zamanla sıcaklık sürüklenmesi ve gürültü nedeniyle hata biriktirir — manyetometre ve ivmeölçer bu hatayı düzelterek statik konumda 1–2 dereceye kadar yön doğruluğu sağlar.
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 — adım sayısı, kat edilen mesafe ve hareket temposunu saymak için sınıftır. M serisi hareket yardımcı işlemcisinde (M7/M8/M9/M10/M11) donanım işleme ile ivmeölçer verilerini kullanır. Bu, minimum güç tüketimiyle arka planda çalışmasına olanak tanır — sürekli 8 saatlik takipte yaklaşık %1 pil.
CMAltimeter — iPhone 6 ve sonrasında bulunan barometreye dayalı olarak göreceli yüksekliği belirlemek için sınıftır. Başlangıç noktasına göre yükseklik değişimini yaklaşık 1 metre doğrulukla gösterir. Fitness uygulamalarında kat saymak ve navigasyon uygulamalarında yükseklik değişimlerini belirlemek için kullanılır.
CMPedometer verileri, mevcut okumalar için en fazla 5 saniye gecikmeyle kullanılabilir. Geçmiş veriler için, queryPedometerData aracılığıyla 7 güne kadar veri alınabilir. Pedometre otomatik olarak yürüme, koşma ve bisiklete binmeyi tanır — bu aktivite türleri, türe göre filtreleme ile queryPedometerData aracılığıyla kullanılabilir.
CMPedometer'ın doğruluğu normal yürüyüşte yaklaşık %95 olup koşuda %90'a düşer. Doğruluk şunlardan etkilenir: telefonun cepte veya sırtta konumu, ayakkabı türü ve yüzey. Apple, açık havada mesafe belirleme için Core Location ile birlikte CMPedometer kullanılmasını önerir — GPS daha doğru mesafe sağlarken Core Motion adım sayımını yönetir.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Adımlar: \(pedData.numberOfSteps)")
print("Mesafe: \(pedData.distance)")
}
// Altimetre erişimi
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Yükseklik: \(data?.relativeAltitude)")
}
Core Motion entegrasyonu özel izinler veya entitlement gerektirmez — sadece framework içe aktarımını ekleyin ve bir CMMotionManager örneği oluşturun. Ancak, iOS 11'den itibaren CMPedometer için CMStepCounter aracılığıyla veya sistem izin diyaloğu ile CMPedometer kullanarak yetkilendirme gerekir.
Entegrasyon süreci şunları içerir: CMMotionManager oluşturma, isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable ile sensör kullanılabilirliğini kontrol etme, güncelleme aralığını ayarlama ve veri toplamayı başlatma. Verilere ihtiyaç kalmadığında stopAccelerometerUpdates ile güncellemeleri durdurmak önemlidir — bu güç tüketimi için kritiktir.
Arka plan işlemi için CMPedometer ve CMAltimeter ek yapılandırma gerektirmez — hareket yardımcı işlemcisini kullanırlar. CMMotionManager için arka plan işlemi mevcut değildir — veriler yalnızca uygulama etkin ve ön plandayken toplanır. CMPedometer için tek koşul, iOS'tan arka plan güncellemeleri aboneliğini başlatmak için uygulamanın kurulumdan sonra kullanıcı tarafından en az bir kez başlatılmış olmasıdır.
Core Motion uyarlanabilir yoklama frekansını destekler: uygulama gerçek zamanlı veriye ihtiyaç duymuyorsa, 100 Hz yerine 1–5 Hz aralığı ayarlamak yeterlidir. Fitness uygulamaları için optimum frekans, CMMotionManager için 10 Hz ve CMPedometer için 1 Hz'dir. Apple, doğru çalışma için gereken minimum frekansa düşürmeyi önerir.
Eğme kontrollü oyunlar için yumuşak yanıt sağlamak amacıyla 60–100 Hz frekans gereklidir. Bu durumda, ayrı bir kuyrukla startDeviceMotionUpdates kullanmak ve verileri mümkün olduğunca hızlı işlemek önemlidir. Apple'a göre, 60 Hz, 30 Hz'den yaklaşık 2 kat daha fazla güç tüketir.
Core Motion ile çalışırken cihaz uyumluluğunu dikkate almak önemlidir: jiroskop iPhone 3GS ve 1. nesil iPad'de bulunmaz, manyetometre hücresel modülü olmayan tüm iPad'lerde bulunmaz. Sensör kullanılabilirliğini kontrol etmek için CMMotionManager sınıfının statik yöntemleri isAccelerometerAvailable, isGyroAvailable ve isDeviceMotionAvailable kullanılır. Simülatörde Core Motion test verileri döndürür — gerçek bir sensörde hata ayıklama için her zaman fiziksel bir Apple cihazı gereklidir.
// Fitness uygulaması için optimum ayar
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()
}
}
Sıkça Sorulan Sorular
Evet, Core Motion gerekli sensörlere sahip tüm Apple cihazlarında çalışır. İvmeölçer tüm iPhone, iPad ve iPod touch'ta bulunur. Jiroskop tüm iPhone 4 ve sonrası, iPad 2 ve sonrasında bulunur. Manyetometre yalnızca iPhone'da bulunur, iPad'de bulunmaz. Barometre iPhone 6 ve sonrasında bulunur.
Pil üzerindeki etki yoklama frekansına bağlıdır. 100 Hz'de Core Motion saatte yaklaşık %5–7 pil tüketir. 10 Hz'de — saatte yaklaşık %1–2. Hareket yardımcı işlemcisindeki CMPedometer, 8 saatlik çalışmada %1'den az tüketir. Apple, veri gerekmediğinde güncellemeleri durdurmayı önerir.
Evet, CMPedometer ivmeölçerin ham verilerini işlemeden pedometre için hazır bir çözüm sunar. Sınıf, yürüyüşte yaklaşık %95 ve koşuda %90 doğrulukla adımları otomatik olarak tanır. Özel bir adım dedektörü için kendi algoritmanızla CMMotionManager kullanabilirsiniz.
Core Motion sistem düzeyinde iOS'a entegre edilmiştir ve düşük enerjili işleme için M serisi yardımcı işlemci kullanır. Android, donanım sürücülerine doğrudan erişimle SensorManager kullanır ancak özel bir yardımcı işlemciye sahip değildir, bu da arka plan takibi sırasında güç tüketimini artırır.
iOS 11 ve sonrasında CMPedometer için kullanıcı izni gereklidir. İstek, CMPedometer oluşturulurken otomatik olarak yapılır ve bir sistem diyaloğu görüntüler. Info.plist'e, uygulamanın hareket verilerine neden erişmesi gerektiğini açıklayan NSMotionUsageDescription anahtarı eklenmelidir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun