CoreLocation - 通过 authorizedWhenInUse 授权在后台持续更新位置

CoreLocation - Continuous location update in background with authorizedWhenInUse authorization

我需要在后台跟踪用户位置,例如位智和苹果地图中的导航功能。

但是,我想在 authorizedWhenInUse 权限下使用它。

据我所知,即使有 authorizedWhenInUse 权限,应用程序也可以跟踪用户位置,因为在这种状态下,应用程序被认为是 foreground (状态栏顶部出现蓝线 - 表示用户知道该应用程序正在执行定位工作)

当我授予 authorizedAlways 权限时一切正常。

但是,当权限为authorizedWhenInUse,并且我将应用程序发送到后台时,出现蓝线,但应用程序在大约一分钟后终止,并出现以下消息在日志中:
来自调试器的消息:由于信号 9

而终止

以下是我在进入后台之前跟踪位置更新的方式:

locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.delegate = self
locationManager.startUpdatingLocation()

我的 plist 包含后台模式:

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

尝试将 showsBackgroundLocationIndicator 属性 设置为 true

https://developer.apple.com/documentation/corelocation/choosing_the_location_services_authorization_to_request 说:

Location services are available to apps with CLAuthorizationStatus.authorizedWhenInUse only while the app is “in use”. On all platforms that support When In Use authorization, an app is considered in use:

  • When the app runs in the foreground.

  • In the few seconds after an app leaves the foreground, a short grace period for your app to finish any current location tasks the user initiated.

  • When the app shows the background location usage indicator (showsBackgroundLocationIndicator). On iOS, the indicator is a blue bar or pill at the top of the screen; on watchOS it’s a small icon.

阅读整篇文章会很好:)

如果您不想在顶部看到蓝色条,请使用 authorizedAlways 身份验证类型。

这可能与核心位置无关。信号 9 表示您已因使用过多内存或类似情况而被杀。您可能需要在进入后台之前释放资源。或者您可能正在尝试在您没有告诉我们的背景下做其他事情。