ما هو CoreLocation ولماذا تحتاجه؟
CoreLocation هو إطار عمل مدمج من Apple لمنصات iOS وmacOS وwatchOS وtvOS. يوفر للمطورين إمكانية الوصول إلى الأجهزة والبرامج لتحديد موقع الجهاز. على عكس المكتبات الخارجية، لا يتطلب CoreLocation التثبيت عبر مديري الحزم (CocoaPods, SPM) — فهو جزء من SDK القياسي.
الإمكانيات الرئيسية للإطار:
- تحديد الإحداثيات الجغرافية الحالية (خط العرض وخط الطول).
- تتبع تغيير الموقع في الوقت الفعلي.
- المناطق الجغرافية (Geofencing) — تلقي إشعارات عند الدخول/الخروج من منطقة محددة.
- تحديد الاتجاه (البوصلة) وسرعة الحركة.
- الترميز الجغرافي العكسي (تحويل الإحداثيات إلى عنوان) والترميز الجغرافي المباشر (العنوان إلى إحداثيات).
هذه المكتبة لا غنى عنها لتطبيقات الملاحة وخدمات التوصيل ومتتبعات اللياقة البدنية والشبكات الاجتماعية ذات العلامات الجغرافية وأي تطبيقات أخرى تحتاج إلى معرفة موقع المستخدم.
تثبيت CoreLocation
نظرًا لأن CoreLocation جزء من نظام التشغيل، فلا تحتاج إلى تثبيته عبر pip أو npm. للاستخدام، يكفي استيراد الوحدة في الكود.
هام: للعمل مع الموقع الجغرافي، يجب إضافة وصف الاستخدام في ملف Info.plist الخاص بمشروعك. بدون ذلك، سيتعطل التطبيق عند محاولة طلب الإذن.
أضف أحد المفاتيح التالية (حسب الوقت الذي تحتاج فيه إلى الموقع):
NSLocationWhenInUseUsageDescription— للوصول فقط أثناء استخدام التطبيق بنشاط.NSLocationAlwaysAndWhenInUseUsageDescription— للوصول الدائم (حتى في الخلفية).
كقيمة، اكتب نصًا سيظهر للمستخدم في مربع حوار طلب الإذن (مثل: "التطبيق يحتاج إلى الوصول إلى الموقع الجغرافي لعرض أقرب المقاهي").
بداية سريعة مع مثال برمجي
لنلقِ نظرة على مثال بسيط للحصول على الإحداثيات الحالية للمستخدم.
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
// MARK: - CLLocationManagerDelegate
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
print("خط العرض: \(location.coordinate.latitude)")
print("خط الطول: \(location.coordinate.longitude)")
// إيقاف التحديث لتوفير البطارية
locationManager.stopUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("خطأ في الحصول على الموقع: \(error.localizedDescription)")
}
}
يقوم هذا الكود بإنشاء مدير، وطلب الإذن من المستخدم، وبدء التتبع. بمجرد الحصول على الإحداثيات، يتم طباعتها في وحدة التحكم.
الدوال الأساسية في CoreLocation
فيما يلي الدوال والخصائص الرئيسية للفئة CLLocationManager، بالإضافة إلى الفئات المساعدة.
1. requestWhenInUseAuthorization()
الوصف: يطلب من المستخدم الإذن للوصول إلى الموقع الجغرافي فقط أثناء استخدام التطبيق (عندما يكون التطبيق نشطًا على الشاشة).
المعلمات: لا يوجد.
مثال:
let manager = CLLocationManager()
manager.requestWhenInUseAuthorization()
2. requestAlwaysAuthorization()
الوصف: