Apple Binary被拒绝(2.16)

时间:2015-04-02 06:41:55

标签: ios objective-c iphone ios8

我的应用需要用户当前位置向他显示指向Google地图中特定位置的路线

以下是在网络视图上显示位置的代码 -

[self.getDirectionsWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude,self.projectLatitude,self.projectLongitude]]]];

该应用使用 NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription

宣布支持.plist中的位置
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        [locationManager requestAlwaysAuthorization];
    }
    [locationManager startUpdatingLocation];

Apple拒绝了该应用,原因如下

  

2.16详细信息

     

您的应用声明在UIBackgroundModes键中声明了对位置的支持   您的Info.plist文件,但仍然没有声明任何功能   需要持久的位置。声明支持位置的应用程序   Info.plist文件中的UIBackgroundModes键必须具有功能   这需要持久的位置。

     

具体来说,我们注意到Directions功能不需要   持久的位置信息,因为它不包括   转弯导航。

任何帮助将不胜感激,在此先感谢。

3 个答案:

答案 0 :(得分:9)

您只需从info.plist

中的UIBackgroundModes键中删除位置支持

因为当您的应用处于后台时想要获取位置时,您只能使用UIBackgroundModes作为位置。

NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription的应用声明中就足够了。

答案 1 :(得分:4)

基于:

  • 我的应用要求用户将当前位置向他展示方向到谷歌地图中的特定位置。
  • NSLocation 始终 UsageDescription和NSLocationWhenInUseUsageDescription
  • 我们注意到路线功能不需要持久的位置信息,因为不包含精细导航

看起来他们说你不应该需要位置信息,除非应用程序实际上是活动的。由于位置信息用于向用户显示他们需要进入的方向,当你的应用程序脱颖而出时,应该能够简单地调整(当然有一点延迟)。

来自Apple's documentation

  

UIBackgroundModes (Array - iOS)指定应用提供特定的后台服务,并且必须允许它在后台继续运行。

     

这些密钥应该谨慎使用,并且只能由提供指定服务的应用程序使用。如果存在在后台运行的替代方案,则应使用这些替代方案。

     

例如,应用可以使用重要的位置更改界面来接收位置事件,而不是注册为后台位置应用。


这是我的分析,虽然同样可能的是,审稿人那天早上刚与其他重要人物争吵,并且只是反复无常:-) Nah,只是在开玩笑,但有时似乎外人认为这些决定我们说,他们所做的不完全一致。

答案 2 :(得分:1)

没有必要请求后台模式来请求用户的当前位置。

如果您不需要在后台使用用户的位置,我建议您使用 NSLocationWhenInUseUsageDescription 。用户在看到 NSLocationAlwaysUsageDescription 时更倾向于拒绝用户位置授权,因为他们认为减少了设备的电池