作者: | 来源:互联网 | 2023-07-21 18:46
因为App面向的用户为国外用户,所以想在测试时尽量模拟真实用户的位置信息。需要使手机定位的经纬度在国外,然后使用系统API获取到经纬度,再使用系统API进行逆地理编码,以获取详细的位置信息。
例如,我想要模拟定位的经纬度为:-122.030237,37.331705
,然后获取的详细位置信息为:United States CA Cupertino
。
要想实现我的调试目标,需要以下三步:
一、使用Xcode模拟iOS设备的位置;
二、更改地图服务;
三、通过逆地理编码来获取位置信息;
1. 使用Xcode来模拟iOS设备的位置
1.1 准备 gpx 文件
- 新建文件;
- 选择新建文件类型, “
iOS
“选项下的”GPX File
”; - 创建 gpx 文件;
- 确定 gpx 文件中您想要模拟地点的经纬度;
具体操作步骤如下:
新建文件 --> 文件类型 --> 创建文件
gpx文件的内容:
<gpx version&#61;"1.1" creator&#61;"Xcode"><wpt lat&#61;"37.331705" lon&#61;"-122.030237"><name>Cupertinoname>
wpt>gpx>
其中&#xff0c;lat&#61;"37.331705"
为纬度值&#xff0c;lon&#61;"-122.030237"
为经度值。经纬度的值可在 经纬度坐标拾取 中获取&#xff0c;选择你想要模拟的位置&#xff0c;然后复制经纬度数值&#xff0c;填写到gpx文件的lat&#61;
&#xff0c;lon&#61;
位置即可&#xff0c;注意&#xff1a;纬度在前&#xff0c;经度在后。
1.2 gpx文件的使用
在调试App运行起来后&#xff0c;勾选要模拟的位置&#xff0c;勾选后&#xff0c;您在App中获取到的经纬度即为您想要模拟位置的经纬度了。如下图&#xff1a;
以上这种勾选方式需要在调试App每次运行起来后&#xff0c;都勾选一下&#xff0c;有点麻烦。
裤裆里冒烟&#xff0c;当然啦&#x1f604;&#xff0c;有另外一种简单的方式&#xff0c;那就是设置默认的模拟位置&#xff0c;把您想要模拟的位置设置为默认模拟位置就行了。这样&#xff0c;调试App每次运行起来后都会选择您的模拟位置&#xff0c;不用每次都去勾选一下&#xff0c;非常方便。设置方式&#xff1a;在Xcode
的Edit Scheme
中进行设置&#xff0c;如下图&#xff1a;
1.3 模拟位置后的效果
在iPhone真机上把调试App运行起来&#xff0c;并设置模拟位置后&#xff0c;你的iPhone真机定位位置就是你设置的模拟位置了&#xff0c;结果如下&#xff1a;
你也可以打开百度地图、高德地图等地图App&#xff0c;查看你当前的位置&#xff0c;可以看到同样为&#xff1a;Cupertino - 库比蒂诺&#xff0c;这样你就可以随意模拟你想要的定位位置了&#x1f60e;。
2. 更改地图服务
由于Apple在中国使用的是高德的地图服务&#xff0c;所以我们使用系统API进行逆地理编码国外的经纬度时获取不到位置信息&#xff0c;因此我们还需要把地图服务改为Apple在国外的地图服务。
2.1 更改地图服务
操作步骤&#xff1a;
- 关闭 蜂窝移动数据&#xff1b;
- 打开 无线局域网&#xff0c;连接一个WiFi&#xff1b;
- 打开 飞行模式&#xff1b;
- 打开 VPN 360 或其他VPN应用&#xff0c;连接VPN&#xff1b;
- 杀掉Apple自带的“地图”应用&#xff1b;
- 重新打开Apple自带的“地图”应用&#xff0c;可以看到地图应用界面中的“高德地图”logo不见了。
2.2 更改后的效果对比图
- 使用高德的地图服务时
- 使用Apple在国外的地图服务时
3. 通过逆地理编码获取位置信息
- 准备一个demo项目&#xff0c;导入您想要模拟定位的
gpx
文件&#xff0c;并在Xcode
的Edit Scheme
中设置为默认模拟位置&#xff1b; - 运行demo项目到您使用的调试真机上&#xff0c;运行成功后&#xff0c;调试真机的定位位置就是您想要模拟定位的位置了&#xff1b;
- 再打开您真正想要测试的App&#xff08;不要停止第二步运行的demo项目&#xff09;&#xff0c;则在该App中获取的经纬度就是您模拟的定位位置的经纬度&#xff0c;然后利用系统API逆地理编码出来的位置也是您模拟定位的位置信息。
我的测试中&#xff0c;想要模拟定位位置的经纬度为&#xff1a;-122.030237&#xff0c;37.331705
&#xff0c;最后获取的详细位置信息为&#xff1a;United States CA Cupertino
。