実はiOS8.4.1でrequestLocationが使える
さて、今回はたまたま気づいたバグ?の紹介です。
皆様、ご存知の通り, iOS9から requestLocation なるものがCoreLocation.frameworkに追加されました。
これにより、1回だけ現在地を取得する処理を自作せずにframeworkに任せることができるようになりました。
しかし、iOS9からとアナウンスされているものの、実は iOS8.4.1 でも利用できました。
コードは下記になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| // ViewController.m
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController () <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *lm;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.lm = [[CLLocationManager alloc] init];
self.lm.delegate = self;
[self.lm requestWhenInUseAuthorization];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusNotDetermined) {
// ユーザが位置情報の使用を許可していない
NSLog(@"kCLAuthorizationStatusNotDetermined");
} else if(status == kCLAuthorizationStatusAuthorizedAlways) {
// ユーザが位置情報の使用を常に許可している場合
NSLog(@"kCLAuthorizationStatusAuthorizedAlways");
} else if(status == kCLAuthorizationStatusAuthorizedWhenInUse) {
// ユーザが位置情報の使用を使用中のみ許可している場合
NSLog(@"kCLAuthorizationStatusAuthorizedWhenInUse");
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
// 位置情報の取得に成功した場合
NSLog(@"%@", locations.firstObject);
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
// 位置情報の取得に失敗した場合
NSLog(@"%@", error);
}
- (IBAction)getLocation:(id)sender {
if([self.lm respondsToSelector:@selector(requestLocation)]) {
// iOS9.x以上の場合
[self.lm requestLocation];
} else {
// iOS8.x以下の場合
NSLog(@"iOS8.xです");
}
}
|
騙されたと思って試してみてください。
なぜかiOS8.4.1でもrequestLocation
が実行されますので。