ObjecTips

Swift & Objective-C で iOS とか macOS とか

iOS 8での位置情報のプライバシーアクセス

iOS 7では CLLocationManager を用いて位置情報を利用する際に自動的にシステムのアラートが表示される。

    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    [locationManager startUpdatingLocation];
    self.locationManager = locationManager;

f:id:Koze:20150503231632p:plain

iOS 8では CLLocationManager を使う前にまず

- (void)requestWhenInUseAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);
- (void)requestAlwaysAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);

これらのメソッドを用途に応じて呼ぶ必要がある。 これらを呼ばないとアラートは表示されない。

    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    [locationManager requestWhenInUseAuthorization];
//    [locationManager requestAlwaysAuthorization];
    [locationManager startUpdatingLocation];
    self.locationManager = locationManager;

f:id:Koze:20150503231704p:plain

f:id:Koze:20150503231707p:plain

また、アプリの Info.plist に NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription のキーをそれぞれ設定する必要がある。
これらを設定しないとアラートは表示されない。

f:id:Koze:20150503232831p:plain

Info.plist の編集画面で Privacy の項目に Privacy - Location Usage Description というものがあるけど、これは NSLocationUsageDescription というiOS 6と7用のキーで、NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescriptionXcode でポップアップされるリストに存在しないのでリストからではなくて直接文字列を記入する必要がある事に注意。*Xcode 6.3で確認