ios8-gps1

이 내용은 WWDC 2014 발표내용을 기준으로 정리한 내용입니다.

iOS8에서 위치정보를 얻는 방법이 변경된 것 같습니다.

ioS 8 : Location Services not working (stackoverflow)

My app that worked fine in iOS 7 does not work with the iOS 8 SDK.

CLLocationManager does not return a location, and I do not see my app under> Settings> Location Services either. I did a Google search on the issue but nothing> came up, what could be wrong?

확인사항

  • 위치정보에 대한 개인정보를 사용자가 보다 상세히 설정할 수 있게 되었습니다. (WhenInUse-사용중인 경우만 허용/Always-항상허용/Never-허용안함)
  • 위치 정보를 사용하는 이유를 설정하는 것이 필수가 되었습니다.
  • 위치 정보 인증요청 방법이 늘어났습니다.

어떻게 대처해야 하나?

우선 Info.plist에 위치정보를 사용하는 목적을 추가합니다. 이 항목은 지금까지는 사용하지 않았지만 iOS8에서는 필수항목이 되었습니다.

ios8-gps2

키 이름은 개인정보 보호정책에 따라 다르지만, 사용중인 경우에만 허용한다면 NSLocationWhenInUseUsageDescription, 항상 허용은 NSLocationAlwaysUsageDescription에 설정합니다.

인증 상태 확인

인증 상태 종류가 늘어났습니다.

  • kCLAuthorizationStatusNotDetermined
  • kCLAuthorizationStatusRestricted
  • kCLAuthorizationStatusDenied
  • kCLAuthorizationStatusAuthorized ( deprecated )
  • kCLAuthorizationStatusAuthorizedAlways
  • kCLAuthorizationStatusAuthorizedWhenInUse

kCLAuthorizationStatusAuthorized는 비추천되었고, kCLAuthorizationStatusAuthorizedAlways, kCLAuthorizationStatusAuthorizedWhenInUse를 사용하도록 권고합니다.

ioS8에서 위치 정보가 잡히지 않는 경우 인증상태가 kCLAuthorizationStatusNotDetermined로 되어 있을 가능성이 있습니다. 현재 인증 상태는 다음 델리게이트에서 확인할 수 있습니다.

[objc]

// CLLocationManager 객체에 위임객체를 설정하면 처음호출
– (void)locationManager:(CLLocationManager *)manager
didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if (status == kCLAuthorizationStatusNotDetermined) {
// 사용자 위치정보 사용 허용않음
}
}

[/objc]

사용자가 위치정보를 허용하지 않으면, 다음에 설명하는 인증요청 사용을 통해 위치정보 사용권한을 요청합니다.

인증 요청

iOS8 CLLocationManager에 다음 메소드가 추가되었습니다.

  • requestAlwaysAuthorization :  위치정보 사용을 항상 허용해달라고 요청
  • requestWhenInUseAuthorization : 위치정보 사용을 앱시작시에만 허용해달라고 요청

단, iOS7 환경에서는 이 메소드를 호출하면 당연히 충돌나기 때문에 주의해야 합니다. 이 메소드를 호출하여 인증대화창이 표시됩니다. 대화창에는 처음에 설정한 위치 정보 사용 목적도 표시됩니다.

ios8-gps3

이 메소드는 여러번 호출할 수 있지만, 인증대화창이 표시되는 것은 인증 상태가 kCLAuthorizationStatusNotDetermined으로 되어 있을때만 가능합니다. 이렇게 하여 위치정보를 가져올 수 있게 됩니다.

참고자료: What’s New in Core Location – WWDC 2014 발표자료

 

 

 

 

Facebook Comments

You may be interested

모바일 앱 아키텍처
Swift
shares11 views
Swift
shares11 views

모바일 앱 아키텍처

MJ Kim - 4월 22, 2017

이 내용은 나름대로 개발해본 내용을 토대로 정리해본 모바일 앱 아키텍처에 대한 내용이다. 이를 정리한 이유는 오래된 아키텍처부터 최근 아키텍처까지 정리해보고…

시간차를 얻는 Date Extension
Swift 3.0
shares6 views
Swift 3.0
shares6 views

시간차를 얻는 Date Extension

MJ Kim - 4월 12, 2017

사용자가 남길 내용에 대한 시간표시를 할 때 일정한 시간차를 표현해주는 경우가 있어 이에 대한 Date Extention을 정리해 보았다. [crayon-58fc5341943b7075205891/]  

Swift 3.1에서 없어진 문법 정리
Swift 3.0
shares34 views
Swift 3.0
shares34 views

Swift 3.1에서 없어진 문법 정리

MJ Kim - 3월 31, 2017

Swift언어는 무엇인가 나올때마다 없어지는 것들이 있어, Swift 3.1에서 컴파일할 수 없게 된 문법내용을 정리했다. switch문을 사용하여 enum에서 protocol을 여러가지 패턴으로…