年轻人的第一个swift:ios 模拟定位打卡
起因
由于最近马上过节了,而我也被这节日的气氛所支配,所以今天完成了未打卡三连成就。公司现在规定每个月只有两次未正常打卡的机会,超过了会有相应的惩罚机制。我感觉自己工作时长接近十个小时,但是因为忘记打卡被处罚的话心里多少有点不爽,所以就想是不是可以补救一下。- -!
模拟定位
很早之前就听说Xcode 提供了模拟定位,方便开发者调试,所以我想这个应该是个切入点,问了一个懂这个大佬,也得到了肯定的答案。
所以主体思路是通过Xcode 模拟定位,然后借助这个模拟定位功能,定位到公司附近,然后钉钉打卡。不过网上找到的方法大多数都不是swift 的,我自己摸索了一个小时找到了具体方案,其实非常的简单。
方法
首先,通过高德/百度地图/腾讯地图获取公司附近经纬度,不过需要注意的是iOS原生坐标为
世界标准地理坐标(WGS-84)
, 百度地图的坐标为BD-09
,高德为中国国测局地理坐标(GCJ-02)
,需要将位置转换为iOS 坐标下的。
坐标转换有比较简单的方法,GitHub上找到一个coordTransform_py(忽略我是一个GIS专业学生 - -!),对应转换:1
2
3from coordTransform_utils import *
lon, lat = 120.177239,30.216698
w_lon, w_lat = gcj02_to_wgs84(lon, lat)Xcode 新建一个项目,项目内新建一个gpx 文件,文件内容里添加对应的经纬度:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<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="39.99200300843388" lon="116.46688673941635">
<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>手机与电脑连接,然后让程序在手机上运行起来,同时保持手机定位打开状态,此时就可以通过模拟位置来修改手机的当前定位了。最终打卡成功。
总结
本文是由于未正常打卡紧缺,我尝试补救的一次探索,由于是第一次接触Xcode ,感觉有点兴奋。不过希望看到这里的你不要用这个方法来做坏事。
关于头图
打卡成功