因为App面向的用户为国外用户,所以想在测试时尽量模拟真实用户的位置信息。需要使手机定位的经纬度在国外,然后使用系统API获取到经纬度,再使用系统API进行逆地理编码,以获取详细的位置信息。

例如,我想要模拟定位的经纬度为: -122.030237,37.331705 ,然后获取的详细位置信息为: United States CA Cupertino

要想实现我的调试目标,需要以下三步:
一、使用Xcode模拟iOS设备的位置;
二、更改地图服务;
三、通过逆地理编码来获取位置信息;

1. 使用Xcode来模拟iOS设备的位置
1.1 准备 gpx 文件
  1. 新建文件;
  2. 选择新建文件类型, “ iOS “选项下的” GPX File ”;
  3. 创建 gpx 文件;
  4. 确定 gpx 文件中您想要模拟地点的经纬度;

具体操作步骤如下:
新建文件 --> 文件类型 --> 创建文件

gpx文件的内容:

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
     Provide one or more waypoints containing a latitude/longitude pair. If you provide one
     waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
     Xcode will simulate a route visiting each waypoint.
    <wpt lat="37.331705" lon="-122.030237">
        <name>Cupertino</name>
         Optionally provide a time element for each waypoint. Xcode will interpolate movement
         at a rate of speed based on the time elapsed between each waypoint. If you do not provide
         a time element, then Xcode will use a fixed rate of speed.
         Waypoints must be sorted by time in ascending order.
<!--        <time>2014-09-24T14:55:37Z</time>-->
    </wpt>
</gpx>

其中,lat="37.331705"为纬度值,lon="-122.030237"为经度值。经纬度的值可在 经纬度坐标拾取 中获取,选择你想要模拟的位置,然后复制经纬度数值,填写到gpx文件的lat=lon=位置即可,注意:纬度在前,经度在后

1.2 gpx文件的使用

在调试App运行起来后,勾选要模拟的位置,勾选后,您在App中获取到的经纬度即为您想要模拟位置的经纬度了。如下图:
确定模拟位置
以上这种勾选方式需要在调试App每次运行起来后,都勾选一下,有点麻烦。

裤裆里冒烟,当然啦😄,有另外一种简单的方式,那就是设置默认的模拟位置,把您想要模拟的位置设置为默认模拟位置就行了。这样,调试App每次运行起来后都会选择您的模拟位置,不用每次都去勾选一下,非常方便。设置方式:在XcodeEdit Scheme中进行设置,如下图:
Edit Scheme中设置默认模拟位置

1.3 模拟位置后的效果

在iPhone真机上把调试App运行起来,并设置模拟位置后,你的iPhone真机定位位置就是你设置的模拟位置了,结果如下:
lat="37.331705" lon="-122.030237"经纬度对应的位置,Cupertino
你也可以打开百度地图、高德地图等地图App,查看你当前的位置,可以看到同样为:Cupertino - 库比蒂诺,这样你就可以随意模拟你想要的定位位置了😎。

2. 更改地图服务

由于Apple在中国使用的是高德的地图服务,所以我们使用系统API进行逆地理编码国外的经纬度时获取不到位置信息,因此我们还需要把地图服务改为Apple在国外的地图服务。

2.1 更改地图服务

操作步骤:

  1. 关闭 蜂窝移动数据;
  2. 打开 无线局域网,连接一个WiFi;
  3. 打开 飞行模式;
  4. 打开 VPN 360 或其他VPN应用,连接VPN;
  5. 杀掉Apple自带的“地图”应用;
  6. 重新打开Apple自带的“地图”应用,可以看到地图应用界面中的“高德地图”logo不见了。
2.2 更改后的效果对比图
  1. 使用高德的地图服务时
  1. 使用Apple在国外的地图服务时
3. 通过逆地理编码获取位置信息
  1. 准备一个demo项目,导入您想要模拟定位的gpx文件,并在XcodeEdit Scheme中设置为默认模拟位置;
  2. 运行demo项目到您使用的调试真机上,运行成功后,调试真机的定位位置就是您想要模拟定位的位置了;
  3. 再打开您真正想要测试的App(不要停止第二步运行的demo项目),则在该App中获取的经纬度就是您模拟的定位位置的经纬度,然后利用系统API逆地理编码出来的位置也是您模拟定位的位置信息。

我的测试中,想要模拟定位位置的经纬度为:-122.030237,37.331705,最后获取的详细位置信息为:United States CA Cupertino

因为App面向的用户为国外用户,所以想在测试时尽量模拟真实用户的位置信息。需要使手机定位的经纬度在国外,然后使用系统API获取到经纬度,再使用系统API进行逆地理编码,以获取详细的位置信息。例如,我想要模拟定位的经纬度为:-122.030237,37.331705,然后获取的详细位置信息为:United States CA Cupertino。要想实现我的调试目标,需要以下三步:一、使用Xc...
闲话不多说,其实很简单。苹果提供了链接接口,传入对应的参数,即可返回json格式的结果先给出苹果的链接,一目了然。其实加上参数就可以进行搜索, https://itunes.apple.com/search?parameterkeyvalue例如,参数term=电台,会返回电台相关的搜索结果 https://itunes.apple.com/search?term=电台再来一个,在中国区搜索应用
App中越来越多的功能依赖用户实际的位置,例如基于用户位置提供推荐数据、基于定位判断某些功能是否可用,但是在开发调试中XCode却没有提供自定义的模拟定位的功能,所以本文主要的目的是现实一个可以在开发调试过程中随时模拟定位的功能。 我们在iOS的app开发中通常采用的是CLLocationManager来获取用户当前的位置,当然也可以采用MKMapView的showUserLocation来获取用户的位置,所以我们分别针对这两种情况分析。 CLLocationManager 采用CLLocationManager获取定位时,是根据CLLocationManagerDele CLLocationManager的常用操作和属性 开始用户定位- (void)startUpdatingLocation; 停止用户定位- (void) stopUpdatingLocation; 说明:当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法   - (void)locationManager:(CLLocationM 解决方法: 在new LocationClient(getApplicationContext());之前加入如下代码来获取权限 //在new LocationClient(getApplicationContext());之前加入如下代码 List<String> permissionList = new ArrayList<>(); if (Conte
一切源于你下载的sdk里面是loc7a.so如图。下载官方demo然后将libs下面的东西都copy过来  因为图中红色框 绿色字体的so文件,sdk中是不存在的,官方demo里面却有, 那么你将这几个jar包,和so文件一一copy过来,问题解决了。    还有官方demo下载下来后,不能使用key验证失败问题呢,官方demo中带了debug.keystore文件,这将导致和本地debug的
1. 首先在Xcode工程里面的info.plist里面根据需要添加下面两个键-值对: NSLocationAlwaysUsageDescription:YES,应用程序不管在前台和后台都支持定位; NSLocationWhenInUseUsageDescription:YES,只有应用程序在前台时定位。 2. 设置模拟器支持定位   iOS Simulator > D
首先请允许我发一个牢骚。苹果地图这个坑。。。 一 、我们要开发一个国外定点展示房屋信息的地图应用。效果图如下: 、二、第一反应用苹果原生地图Mapkit做。我们的坐标点都是从谷歌地图上取出来的。 功能还是比较简单的,很块做完了但是出现了坐标偏移的情况,跟谷歌地图上的坐标点有很大的出入。但是如果开了VPN的话就正常了。问题出在哪。 (1)苹果地图国内用高德数据,国外用tomtom数据,是根据你
解决方法: 首先在 info.plist里加入对应的缺省字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)           NSLocationWhenInUseUsageDescription   //允许在前台获取GPS的描述           NSLocationAlwaysUsageDescription   //允许在前、后台获取GPS的描述  2. 在Xcode中选择模拟器,然后选择Debug -> Location -> Custom Location。 3. 在Custom Location对话框中输入经度和纬度,然后点击OK。 4. 启动应用程序并验证模拟定位是否正常工作。 请注意,模拟定位仅适用于开发者测试和调试应用程序,不应用于非法行为。