iOS 8에서 Core Location 사용하기


CLLocationManager는 iPhone OS 2 에서 처음 소개되었으며..

사용방법은 다음과 같다.


1. 프로젝트 설정에서 Build Phases에서 CoreLocation framework를 추가한다.


2. Location Manager를 생성하고, Location Receiver 콜백에 대한 delegate 설정한후 Location Manager를 시작하기

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()

@property (nonatomic, strong) CLLocationManager *locationManager;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    // Location Manager 생성
    self.locationManager = [[CLLocationManager alloc] init];
    
    // Location Receiver 콜백에 대한 delegate 설정
    self.locationManager.delegate = self;
    
    // Location Manager 시작하기
    [self.locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"%@", [locations lastObject]);
}


하지만, iOS 8에서는 동작하지 않는다. 위치 갱신도 되지 않으며, 앱에서 위치 사용을 위한 사용자 동의 창도 띄워주지 않는다. 


iOS 8에서는 위치 정보를 사용하는 이유를 설정하는 것이 필수가 되었으며, 위치 정보에 대해 상세히 설정 할수 있게 되었다. (사용중인 경우에만 허용/항상 허용/허용 안함)


iOS 8에서는 위치 정보를 이용하려면 추가적으로 두가지 작업이 반드시 필요하다. 

첫번째는 프로젝트 설정파일인 Info.plist에 위치정보를 사용하는 이유를 추가해줘야 한다. 

추가할 항목은 바로 

  • NSLocationAlwaysUsageDescription (항상 허용)
  • NSLocationWhenInUseUsageDescription (사용중인 경우만 허용)

두번째는 startUpdatingLocation 전에 사용자에게 위치 정보 사용 동의 묻는 창 띄우기 


: 사용중에만 위치정보 사용 요청 

    // Location Manager 생성
    self.locationManager = [[CLLocationManager alloc] init];
    
    // Location Receiver 콜백에 대한 delegate 설정
    self.locationManager.delegate = self;
    
    // 사용중에만 위치 정보 요청
    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
    }
    
    // Location Manager 시작하기
    [self.locationManager startUpdatingLocation];

결과는 다음과 같다.


: 항상 위치정보 사용 요청 

    // Location Manager 생성
    self.locationManager = [[CLLocationManager alloc] init];
    
    // Location Receiver 콜백에 대한 delegate 설정
    self.locationManager.delegate = self;
    
    // 항상 위치 정보 사용 요청
    if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
    }
    
    // Location Manager 시작하기
    [self.locationManager startUpdatingLocation];
결과는 다음과 같다.


참 쉽다. 끝..


테스트 소스 다운로드

LocationTest.zip



저작자 표시 비영리 변경 금지
신고
Posted by 까칠코더.


티스토리 툴바