我试图支持iOS7& 8个位置服务。当我在iOS8设备上运行时,出现此错误:
"MyApp depending on legacy on-demand authorization, which is not supported for new apps"
我的plist中有一个何时使用的条目。这是我的代码:
if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[_locationManager requestWhenInUseAuthorization];
} else {
[_locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
[_locationManager startUpdatingLocation];
}
}
为什么会出现此错误?
答案 0 :(得分:3)
我正在从位置服务实现一个已弃用的回调,而不是实现新的回调。没有编译器警告,但阅读此内容的开发人员应在其代码中检查位置服务代理的文档。
已弃用它是委托文档中的第一个方法。整个问题是RTFM的一个案例。
答案 1 :(得分:1)
你在swift中遇到这个错误的原因是你没有要求用户明确许可使用位置服务,直到iOS 8才行。 从iOS 8开始,您应该明确要求使用位置服务的权限。
iOS版> = 8
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startMonitoringSignificantLocationChanges()
iOS版< 8
self.locationManager.startMonitoringSignificantLocationChanges()
答案 2 :(得分:0)
在info.plist中添加这两个键,其中包含值字符串“需要位置才能找到您所在的位置”。
NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription