https://developer.apple.com/documentation/corelocation/adding_location_services_to_your_app
"Implement features that can access information about a user’s location."
사용자의 위치에 대한 정보에 접근할 수 있는 기능을 구현합니다.
앱에 위치 서비스를 추가하려면 CLLocationManager
를 사용해야 하며, 이 객체의 딜리게이트를 구현하고, 앱이 요구하는 권한 모드를 결정해야 합니다. 앱이 동작할 떄 앱은 기기가 위치 서비스를 지원하는지 확인해야 하며, 원하는 위치 서비스를 설정 및 시작하고, 사용자의 위치를 받기 위해 권한을 요청해야 합니다. 권한을 받으면 앱은 코어 로케이션이 요청하는 코어 로케이션 서비스에 대한 위치 이벤트를 받습니다.
코어 로케이션 서비스는 모든 기기가 제공되지는 않는 하드웨어를 요구합니다. 특정 위치 서비스에 의존하기 전에 Table 1에 있는 CLLocationManager
객체의 메소드를 호출해서 기기가 서비스를 지원하는지 확인해야 합니다. 메소드가 false
를 반환하면 기기는 해당 서비스를 지원하지 않습니다.
Table 1 Methods for determining if devices support Core Location services
Method | Description |
---|---|
significantLocationChangeMonitoringAvailable() | 위치 서비스의 중요한 변경사항을 갖는 사용자의 위치 가져오기에 대한 기기의 지원 여부를 나타냅니다. |
isMonitoringAvailable(for:) | 지리적 지역 혹은 비콘 지역으로의 진입 혹은 여기에서 빠져나오는 것을 감지하기 위한 지역 모니터링의 기기 지원 여부를 나타납니다. |
headingAvailable() | 기기가 나침반 관련 헤딩을 제공할 수 있는지 여부를 나타냅니다. |
isRangingAvailable() | iBeacon 기기 주변으로의 상대적 거리 가져오기에 대한 기기의 지원 여부를 나타냅니다. |
Note
앱이 특정 하드웨어 의존 기능이 부족한 기기에서 기능할 수 없으면, 앱의 Info.plist에서 해당 서비스의 요구사항을 나타내야 합니다. 더 많은 정보는 Requiring the Presence of Specific Location Services를 보시기 바랍니다.
Requiring the Presence of Specific Location Services
https://developer.apple.com/documentation/corelocation/adding_location_services_to_your_app/requiring_the_presence_of_specific_location_services
https://velog.io/@panther222128/Requiring-the-Presence-of-Specific-Location-Services
CLLocationManager
클래스의 인스턴스를 생성하고, 앱 어느 곳에서 이 인스턴스에 대한 강한 참조를 저장하시기 바랍니다. 해당 객체에 관여하는 모든 작업이 완료되기까지 위치 매니저 객체에 강한 참조를 유지해야 합니다. 대부분의 위치 매니저 작업은 비동기로 작동하기 때문에 로컬 변수에 위치 매니저를 저장하는 것은 불충분합니다.
CLLocationManagerDelegate
프로토콜을 따르면서 딜리게이트 속성에 커스텀 객체를 할당하시기 바랍니다. 위치 서비스 시작 전에 딜리게이트를 할당하시기 바랍니다. 시스템은 위치 서비스에 상응하는 것을 시작하는 스레드로부터 딜리게이트 객체의 메소드를 호출합니다. 해당 스레드는 앱의 메인 스레드에서 찾을 수 있는 하나처럼 스스로 활성화된 런 루프를 가져야 합니다.
위치 서비스가 기기에서 사용 불가능할 때 실피시키기 위한 실패 관련 메소드를 딜리게이트에서 구현하시기 바랍니다. 사용 불가능한 서비스 시작을 시도하는 경우 CLLocationManager
객체는 자신의 딜리게이트의 실패 관련 메소드 중 하나를 호출합니다. 예를 들어 지역 모니터링이 사용 불가능한 경우 객체는 locationManager(_:monitoringDidFailFor:withError:)
메소드를 호출합니다. 특정 위치 서비스가 사용 불가능할 때 앱에서 UI를 업데이트하길 원할 수도 있습니다.
앱이 필요한 권한 상태를 결정해야 합니다. 사용자가 앱에서 기능에 관련된 위치에 접근할 때, 위치 서비스 사용을 위한 권한을 요청해야 합니다. 더 많은 정보는 Choosing the Location Services Authorization to Request를 보시기 바랍니다.
앱이 위치 매니저를 생성하거나 앱의 권한 상태가 변경되는 순간에 시스템이 호출하는 딜리게티으의 locationManager(_:didChangeAuthorization:)
을 구현해야 합니다. 앱의 권한 상태 변경에 응답하기 위해 이 메소드를 사용하시기 바라며, 각 상태마다 적합한 액션을 수행하시기 바랍니다. 예를 들어 권한 변경 시 적합하게 앱의 위치 기능을 켜거나 끄길 원할 수 있습니다.
CLLocationManager
인스턴스에서 다른 메소드 사용 전에 딜리게이트 객체를 설정해야 합니다.
CLLocationManager
에서 적합한 메소드를 호출해야 합니다.CLLocationManager
에서 적합한 메소드를 호출해야 합니다.사용하는 서비스의 경우 해당 서비스에 관련이 있는 모든 속성을 정확히 설정해야 합니다. 코어 로케이션은 하드웨어가 필요하지 않을 때 하드웨어를 끔으로써 전력을 관리합니다. 예를 들어 위치 이벤트에 대한 원하는 정확도를 1 킬로미터로 설정하는 것은 GPS 하드웨어를 끄기 위한 유연성을 위치 매니저에게 제공하며, 전력을 절약할 수 있는 와이파이 혹은 셀 라디오에만 의존하게 합니다.
앱이 요청하는 위치 서비스를 선언합니다.
https://developer.apple.com/documentation/corelocation/adding_location_services_to_your_app/requiring_the_presence_of_specific_location_services
https://velog.io/@panther222128/Requiring-the-Presence-of-Specific-Location-Services
앱에 위치 관련 이벤트 전달을 시작하거나 중단하기 위해 사용하는 객체입니다.
https://developer.apple.com/documentation/corelocation/cllocationmanager
https://velog.io/@panther222128/CLLocationManager