想去哪就去哪!使用 Xcode 来模拟 iOS 设备的位置


一、前言

相信大家多多少少都有模拟手机位置的需求吧。

而具体是什么需求,相信大家都已经很明确了,这里我就不举例说明了。

如果您是 Android 设备的用户,由于 Android 系统的开放性,您绝对可以找到大量模拟位置的 App。

那 iOS 设备的用户是不是就没戏了?绝对不是!如果您有一台装有 Xcode 的 Mac(Hackintosh 也行),非但能做到,而且效果比 Android 更好!

为什么 iOS 设备模拟位置的效果比 Android 设备更好呢?原因如下:

Xcode 是通过操控 iOS 官方的定位 API 来达到模拟位置的目的。

由于 iOS 系统的封闭性,App 如果需要获取设备位置信息的话,必须使用 iOS 官方的定位 API。

而正是由于 iOS 系统的封闭性,通过 Xcode 模拟位置的方法对所有 iOS App 都有效。

这一点 Android 设备就不一样了。由于 Android 系统是开放的,理论上 App 可以使用任意的定位 API 来获取设备的位置信息。

由此可知,Android 平台上普通的模拟位置 App(需要在开发者选项菜单中进行相关设置)只能作用于使用官方定位 API 的 App。

而对于那些使用私有定位 API 的 App 就需要通过安装 Xposed 框架等修改系统底层文件的操作才能实现模拟位置。

而这种操作一般都需要获取手机的 root 权限。对于普通用户来说,获取手机的 root 权限会给系统增加极大的不确定性。

本文将介绍如何使用 Xcode 来模拟 iOS 设备的位置。


二、系统环境

设备 软件
iPhone X iOS 11.4.1
MacBook Pro macOS 10.13.6、Xcode 9.4.1

三、准备工作

3.1 安装 Xcode

在 Mac 上打开 App Store,搜索 Xcode 安装即可。如下图:

3.2 在 Xcode 上登录您的 Apple ID

打开 Xcode,在顶部菜单中选择「Xcode」->「Preferences…」来打开设置页面。如下图:

然后打开窗口中的「Accounts」标签页,选择「Apple ID」再点击「Continue」。如下图:

接下来根据提示输入 Apple ID 账号密码,登录即可。登录完成后的效果如下图:

3.3 获取需要模拟位置的经纬度信息

由于模拟位置需要目标地点的经纬度信息,所以必须通过某种方式来获取目标地点的经纬度信息。

下面提供一个网站供大家查询经纬度信息。

GPSspg

打开之后可以搜索目标地点的名字,也可以直接在地图上寻找目标地点。

找到目标地点之后,点击它,会弹出一个显示各种经纬度的小窗口。请把「腾讯高德」这一行的经纬度记下来。如下图:

3.4 连接需要模拟位置的 iOS 设备

请将需要模拟位置的 iOS 设备解锁后通过 USB 线连接到 Mac 上。

如果 iOS 设备弹出是否信任此电脑的提示,请点击「信任」。


四、操作步骤

4.1 新建一个 Xcode 项目

打开 Xcode,在顶部菜单中选择「File」->「New」->「Project…」来新建一个项目。如下图:

在新弹出的窗口中选择「Single View App」,然后点击「Next」。如下图:

接下来根据下图提示填写项目的基本信息,然后点击「Next」。

接下来选择一个位置保存项目文件,然后取消勾选「Create Git repository on my Mac」,最后点击「Create」即可完成项目的创建。如下图:

提示
• 在「Organization Identifier」中最好不要使用中文字符。


4.2 在项目中添加一个位置信息文件

项目创建完成后,在顶部菜单中选择「File」->「New」->「File…」。如下图:

在新弹出的窗口中选择「GPX File」,然后点击「Next」来创建一个位置信息文件。如下图:

接着为位置信息文件起一个易于识别的名字,然后在「Targets」中勾选仅包含项目名称的那一项(通常是第一项),最后点击「Create」即可完成位置信息文件的创建。如下图:

4.3 修改位置信息文件

位置信息文件创建完成之后,请在下面的模版中的相应位置填入上面 3.3 所记录的经纬度信息(不要去掉引号):

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
    <wpt lat="<维度>" lon="<经度>">
        <name>Location</name>
    </wpt>
</gpx>

然后把位置信息文件的内容替换为模版的内容。完成之后效果如下图:

4.4 编译 & 安装

点击左侧边栏最上面包含项目名称和蓝色图标的那一行,然后在「Signing」中的「Team」下拉菜单中选择包含您 Apple ID 名字的那一项,来对 App 进行签名操作。

稍等片刻。如果没有出现任何错误提示的话,在窗口左上角选择安装的目标设备为连接到 Mac 的那台 iOS 设备,然后请保持该 iOS 设备为解锁状态。最后点击左上角的三角形按钮即可开始编译安装。

整个过程如下图所示:

在编译的过程中,如果出现以下窗口:

请输入当前用户的密码并点击「始终允许」。

如果出现以下窗口:

请保持 iOS 设备解锁状态,然后插拔下 iOS 设备,再重新编译安装下即可。

4.5 在 iOS 设备上信任应用

如果编译安装成功了,会弹出一个窗口。如下图:

这说明在 iOS 设备上没有信任此证书签名的应用。我们需要在 iOS 设备上设置一下。

在 iOS 设备上打开「设置」->「通用」->「描述文件」,然后在「开发者应用」那一栏中选择有您 Apple ID 的一项。如下图:

进入之后点击信任该开发者应用即可。如下图:

完成之后在 Xcode 中重新执行编译安装即可。

不出意外的话,iOS 设备会启动一个空白界面的应用。如下图:

此时可以将应用置于后台运行,但千万不要关闭它!

4.6 模拟位置

在 Xcode 界面的下方,有一个定位的图标,点进去,然后选择有位置信息文件名字的那一项。如下图所示:

此时,您的设备就已经去往您想模拟的位置了!打开地图即可看到效果!

如果有需要,此时也可编辑位置信息文件的经纬度值。编辑完成之后按「Command」+「s」即可实现实时改变模拟的位置。

4.7 停止模拟位置

如果不需要模拟位置了,可以点击左上角的正方形按钮来让该 App 停止。如下图:

或者直接在 iOS 设备上关闭 App 也可以。


⚠️ 五、注意事项

  1. 由于这里使用的是非付费的 Apple 开发者证书,有效期非常短。所以建议每次需要模拟位置的时候(特别是偶尔用一次的)都在 Xcode 中新建一个项目,然后按照上面的步骤重新操作一遍,避免出现各种奇怪的问题。
  2. 一定要通过 Xcode 来启动上面编译安装的 App,并且在模拟位置的时候一定要保持该 App 在后台运行。否则将起不到任何效果!
  3. 该模拟位置的方法不会修改任何系统文件,也不会对 App 的正常运行造成影响,请放心使用!
  4. 由于系统和软件的功能是随着升级而不断变化的,所以本文所述的方法无法保证长期有效。
  5. 模拟位置之前请三思!如果使用不当可能会造成严重的信任危机!

发表评论

电子邮件地址不会被公开。