我在2023年也有同样的问题,但是在Apple文档或Google中仍然找不到任何好的答案。我还尝试向ChatGPT询问,答案是:
您代码中的lastLocation变量反映了您的应用程序通过CLLocationManager对象接收到的最后已知位置。这意味着它代表了您的应用程序获取的位置,而不是其他应用程序或iOS可能查询的系统级位置。
但我还想使用iOS模拟器进行测试。我创建了两个具有不同Bundle ID的应用程序。
应用程序A有两个按钮,每个按钮都具有以下功能:
- 第一个按钮:使用
locationManager.requestLocation()
请求位置并在func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
中打印结果
- 第二个按钮:使用
locationManager.location
打印最后一次位置
应用程序B只有一个按钮,具有以下功能:
- 使用
locationManager.requestLocation()
请求位置,并在func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
中打印结果
之后,我按照以下步骤进行:
- 在iOS模拟器中运行应用程序A
- 设置模拟位置(功能>位置>自定义位置)为例如(-10,-20)
- 请求新的位置(第一个按钮)。该应用程序给我以下信息:
新位置:[<-10.00000000,-20.00000000>+/- 5.00米 (速度-1.00 mps / 路线-1.00) @18/04/2023 10:45:53 Horário Padrão de Brasília]。
- 请求最后的位置(第二个按钮)。该应用程序给我以下信息:
上次位置:Optional(<-10.00000000,-20.00000000>+/- 5.00米 (速度-1.00 mps / 路线-1.00) @18/04/2023 10:45:53 Horário Padrão de Brasília)。
在同一个iOS模拟器中运行应用程序B
设置模拟位置(功能>位置>自定义位置)为例如(30,40)
请求新鲜的位置。 应用程序将给我以下信息:
[<+30.00000000,+40.00000000> +/- 5.00m(速度-1.00 mps / 路线-1.00)@ 2023年4月18日10:48:44布拉西利亚标准时间]
再次运行应用程序A
再次请求最后的位置(第二个按钮)。应用程序将给我以下信息:
上次位置:Optional(<+30.00000000,+40.00000000> +/- 5.00m(速度-1.00 mps / 路线-1.00)@ 2023年4月18日10:48:44布拉西利亚标准时间)
将模拟位置(功能>位置>自定义位置)更改为例如(5, 5)。应用程序给出了以下结果:
上次位置:可选(<+30.00000000,+40.00000000> +/- 5.00m(速度-1.00 mps / 路径-1.00)@ 18/04/2023 10:48:44巴西利亚标准时间)
因此,如果设备跟随模拟器,locationManager.location应该给我们一个全局的iOS系统级别的最后位置。