Search
Duplicate

위치 사용 허용 했는데 계속 위치 사용 허용 alert 창 뜨는 문제

생성일
2024/08/13 04:42
태그
지혜로운 회사생활
비플페이

위치 사용 허용 했는데 계속 alert 창 뜨는 문제

지금 문제
설정에서 해당 앱에 대해서 위치 허용으로 설정 했음에도, 가끔씩 위치 허용을 하라는 alert 창이 나타나는 점!!
왜 그러는 걸까
일단 몇 가지 가능한 원인과 해결방법을 마련해보자!
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("🐥 error: \(error.localizedDescription)") if let clError = error as? CLError { switch clError.code { case .denied: // 위치 권한이 거부된 경우 locationAuthAlert(messageContent: "위치 정보 접근 권한이 없습니다.\n설정 화면으로 이동하시겠습니까?") self.fetchDataProcess(isNoLocationPermission: true) case .locationUnknown: // 위치 정보를 가져올 수 없는 경우, 네트워크 문제일 수 있음 locationAuthAlert(messageContent: "현재 위치를 가져올 수 없습니다. 네트워크 상태를 확인해주세요.") case .network: // 네트워크 오류 locationAuthAlert(messageContent: "네트워크 연결을 확인해주세요.") default: locationAuthAlert(messageContent: "위치 정보를 가져오는 중에 오류가 발생했습니다. 다시 시도해주세요.") } } else { // 다른 에러 처리 locationAuthAlert(messageContent: "알 수 없는 오류가 발생했습니다.") } }
Swift
복사
일단 여기서 오류가 발생
그리고 로그를 살펴보니
요런 에러 로그가 나왔다.
이 에러를 검색 했더니, 비슷한 사례의 오류를 가진 글을 찾을 수 있었다.
여기서 말한 문제점은 ‘항상’ 권한은 앱이 백그라운드에서도 위치 업데이트를 계속 수신할 수 있도록 해주며, 이 경우 파란색 위치 표시기가 표시되지 않고, iOS가 앱이 종료된 경우에도 이를 다시 시작할 수 있다.
‘항상’ 권한이 없으므로 다른 앱이 메모리를 필요로 할 경우에는 백그라운드에서의 위치 전달이 보장되지 않을 수도 있다.
→ 나는 ‘앱을 사용할 때만’ 으로 위치 허용을 해놓았기 때문에 위치 전달이 보장되지 않을 수도 있었다는 것!

백그라운드에서 위치 업데이트 처리

앱이 foreground에서 실행 중이지 않ㅇ르 때, 위치 업데이트를 받을 수 있도록 앱을 구성하는 법

개요

일부 애플 기기에서는 배터리 수명을 보존하기 위해 운영체제가 백그라운드 앱의 실행을 일시 중지한다.
예를들어, iOS, iPadOS, 그리고 watchOS에서는 시스템이 대부분의 앱이 백그라운드로 이동한 직후에 실행을 중지한다.
이러한 일시 중지 상태에서는 앱이 실행되지 않으며 시스템으로부터 위치 업데이트를 받지 않는다.
대신, 시스템은 위치 업데이트를 큐에 대기시킨 후, 앱이 다시 실행될 때(포그라운드 또는 백그라운드에서) 이를 전달한다.
만약 앱이 더 적시에 업데이트가 필요하다면, 위치 서비스가 활성화된 동안 앱이 중지되지 않도록 시스템에 요청할 수 있다.
앱이 정말로 백그라운드 위치 업데이트가 필요한지 신중히 고려.
대부분의 앱은 사용자가 앱을 적극적으로 사용할 때만 위치 데이터가 필요하다.
실시간으로 업데이트를 받아야 하는 경우에만 백그라운드 업데이트를 고려해야한다.
만약 iOS, iPadOS, watchOS 앱에서 백그라운드 위치 업데이트가 필요하다면, 프로젝트를 업데이트하여 이러한 업데이트를 지원하도록 설정해야한다.
macOS에서는 앱이 백그라운드로 이동할 때 시스템이 앱을 중지하지 않으므로 백그라운드 업데이트를 지원하기 위해 추가로 설정할 필요가 없다.
visionOS에서 실행되는 앱은 백그라운드 업데이트를 받지 않는다.

백그라운드 모드 기능 추가

백그라운드 모드 기능을 사용하면 시스템에 앱이 백그라운드 업데이트를 사용하는지 여부를 알릴 수 있다.
이 기능을 추가하려면, 앱 대상의 Signing & Capabilities 탭으로 이동하여 위치 업데이트 옵션을 활성화 해야한다.
이 기능을 활성화하면 XCode가 앱의 Info.plist 파일을 업데이트하여 앱이 백그라운드 업데이트를 지원 함을 나타내는 키를 추가한다.
XCode의 기능 창에서 백그라운드 모드 기능이 선택된 위치 업데이트 옵션을 보여준다.

요약

Apple 기기에서는 배터리 수명을 보존하기 위해 앱의 실행을 일시 중지할 수 있다.
이 상태에서는 위치 업데이트가 즉시 전달되지 않고, 큐에 저장된 후 앱이 다시 실행될 때 전달된다.
실시간 위치 업데이트가 필요한 경우, 앱이 백그라운드에서도 위치 업데이트를 계속 받을 수 있도록 시스템에 요청할 수 있다.
백그라운드 위치 업데이트가 필요하면, XCode의 Signing & Capabilities 탭에서 “Location updates” 옵션을 활성화하여 백그라운드 모드 기능을 추가하고, CLBackgroundActivitySession을 사용하여 위치 업데이트를 받을 수 있도록 설정한다.
앱이 종료된 후 다시 실행되면 위치 업데이트를 재개할 수 있도록 필요한 서비스를 재시작 해야한다.
중요한 점은 “Always” 권한을 사용하는 경우, 사용자에게 백그라운드에서 위치 업데이트가 이루어지고 있음을 알려야 한다는 것.