背景
像饿了么、口碑这样的LBS应用,在平时业务测试过程中经常会遇到需要修改定位信息的时候,有的时候可能修改一下应用内的地址定位即可满足,但有的时候需要mock手机本身的GPS信息,今天来分享一下如何在iOS真机上模拟GPS定位信息。
方案
由于iOS系统获取定位的方式依赖于系统统一接口,所以模拟的位置会在整个手机生效,不过有些应用具有定位矫正功能比如会根据当前网络IP或者其他手段来做校验,这类应用就需要通过内部集成相应的模拟工具来实现了。
Xcode模拟
苹果的Xcode本身就提供了定位的模拟方案,如下先创建一个空的App项目
然后在根目录下新建一个gpx文件,文件名可以命名为要模拟的地址
在谷歌或者百度地图上找到你想要模拟位置的经纬度信息
将经纬度信息填到gpx文件中即可
这时候连接真机运行工程,选择对应想要模拟的地址即可
此时手机上的定位信息以及被修改,随便打开一个地图应用可以看到修改后的位置
idevicelocation模拟
idevicelocation是一个命令行工具,可以通过USB或者WIFI连接设备然后直接修改定位信息,而且可以很方便的用于自动化。
GitHub地址:https://github.com/JonGabilondoAngulo/idevicelocation
依赖软件
libimobiledevice libusbmuxd libplist openssl
usbmuxd make autoheader automake autoconf libtool pkg-config gcc
安装
先把GitHub仓库clone下来,然后执行下面的命令:
./autogen.sh make sudo make install
这个过程中可能会遇到找不到openssl库的问题以及libimobiledevice的编译错误,可以执行下面的命令来解决:
If the compiler cant find the openssl libs try this: export PATH=/usr/local/opt/openssl/bin:$PATH export LD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$LD_LIBRARY_PATH export CPATH=/usr/local/opt/openssl/include:$CPATH export LIBRARY_PATH=/usr/local/opt/openssl/lib:$LIBRARY_PATH export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
brew update brew uninstall --ignore-dependencies libimobiledevice brew uninstall --ignore-dependencies usbmuxd brew install --HEAD usbmuxd brew unlink usbmuxd brew link usbmuxd brew install --HEAD libimobiledevice
完成后既可以在命令行中输入经纬度信息执行:
$ idevicelocation 48.856614 2.3522219000000177