Ở phần trước mình đã hướng dẫn các bạn các cách để fake GPS location trên Simulator của iPhone. Nếu các bạn muốn tìm hiểu thêm thông tin thì có thể tham khảo ở đường link: HƯỚNG DẪN CÁCH FAKE GPS TRÊN SIMULATOR
Trong bài này mình sẽ hướng dẫn các bạn Fake GPS location on Xcode nhằm mục đích giúp các bạn có thêm các cách để giảm thời gian và dễ dàng test các ứng dụng liên quan tới GPS, location services. Đặc biệt hữu dụng với các ứng dụng yêu cầu người dùng phải di chuyển kiểu như app chạy bộ, đạp xe, chỉ đường, hướng dẫn … v.v.
Giải thích về ý tưởng
Để dễ dàng cho việc test các tính năng yêu cầu người dùng ứng dụng phải di chuyển, chúng ta sẽ sử dụng cách Fake GPS location bằng cách sử dụng GPX file trên Xcode. GPX file cho phép chúng ta thêm các vị trí và thời gian di chuyển đến vị trí đó, từ đó ta có thể tạo ra một danh sách các điểm cần di chuyển đến để thực hiện test ứng dụng mà không cần di chuyển thực tế. GPX file cho phép ta có thể tạo ra các kịch bản test di chuyển một cách dễ dàng và tiết kiệm thời gian và công sức. Ngoài ra ta có thể sử dụng lại được nhiều lần và dễ dàng chỉnh sửa theo các kịch bản test.
Từ các tính năng như trên chúng ta có thể tạo ra một ứng dụng chuyên để Fake GPS Location từ đó giả lập vị trí của iPhone.
NOTE
Đây là fake GPS location của thiết bị luôn, và nó hoạt động và ảnh hưởng lên tất cả các ứng dụng đang sử dụng Map, Location Services. Vậy nên các bạn lưu ý khi sử dụng nha.
Hướng dẫn Fake Location GPS trên XCode sử dụng GPX file
Để tiện cho việc demo các bạn có thể tải xuống source ở link dưới đây:
Bước 1: Tạo file GPX để fake GPS Location trên Xcode
Sử dụng Xcode mở project DemoGPXMapKit lên -> Bấm chuột phải vào tạo new file…
Khi của sổ mở lên, ở ô tìm kiếm bạn điền từ khoá “GPX” thì sẽ được kết quả như hình dưới đây
Bấm Next và đặt tên cho file, ở ví dụ này mình sẽ đặt là mydinh-hanoi. Đặt tên xong Xcode sẽ tạo cho các bạn một file và có sẵn nội dung là một điểm.
Các bạn có thể thay đổi file GPX tuỳ theo trường hợp mà bạn muốn. Ở đây mình muốn Fake GPS Location về Sân vận động Mỹ Đình nên mình sửa lại file như sau:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="21.02025349623149" lon="105.76408736691972">
<name>My-dinh</name>
<time>2014-09-24T14:55:37Z</time>
</wpt>
</gpx>
Về toạ độ lat, lon các bạn có thể sử dụng Google Map để lấy -> bấm chuột phải vào vị trí bạn muốn lấy vị trí sẽ hiển thị như hình và bạn chọn vào hàng có toạ độ là nó tự copy toạ độ cho các bạn, rồi các bạn paste vào file GPX để thay đổi vị trí một cách dễ dàng.
Bước2: Chỉnh sửa scheme để file GPX fake GPS Location tự động ăn khi chạy ứng dụng
Chọn Scheme -> Edit Scheme như hình dưới
Một popup hiển thị lên, lúc này bạn chọn Run -> Options.
– Ở mục CoreLocation tích vào Allow Location Simolation.
– Ở mục Default Location chọn file gpx của các bạn, trường hợp này của mình là mydinh-hanoi. Nếu không chọn thì mặc định nó sẽ là None và khi đó nó sẽ ăn vào location của Simulator
Thực hiện Build(Command + R) ứng dụng để ứng dụng sử dụng file GPX.
Khi này ở thanh Debug chúng ta sẽ có thêm icon Location để cho phép chúng ta thay đổi vị trí Fake GPS location một cách dễ dàng và nhanh chóng hơn.
Kết quả thu được như sau:
Các bạn có thể tạo ra nhiều file GPX với nhiều vị trí khác nhau để thuận tiện cho việc test, hoặc có thể sửa trực tiếp file GPX rồi chọn lại mà không cần build lại ứng dụng.
Fake GPS Location di chuyển theo đường đi bằng file GPX
Chúng ta sẽ tạo mới một file như các bước mình đã hướng dẫn ở đầu bài. Nội dung thì sửa lại như sau:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="21.02186996901372" lon="105.7645261741194">
<name>Cupertino</name>
<time>2014-09-24T14:05:<strong>30Z</strong></time>
</wpt>
<wpt lat="21.021606653375308" lon="105.76616386527535">
<name>Cupertino</name>
<time>2014-09-24T14:05:<strong>40Z</strong></time>
</wpt>
<wpt lat="21.019302621702572" lon="105.76618737280388">
<name>Cupertino</name>
<time>2014-09-24T14:05:<strong>50Z</strong></time>
</wpt>
</gpx>
Ở đây mình có thêm vào 3 waypoints để fake GPS location, nhằm giả lập việc di chuyển qua các điểm này. Các bạn để ý kỹ thì mình có thay đổi thời gian của các waypoint tăng dần và cách nhau 10s. Các bạn có thể tính toán vận tốc và quãng đường để thực hiện giả lập một cách chân thực nhất, ví dụ như tốc độ của ô tô với máy bay thì sẽ khác nhau vì vậy cùng quãng đường thời gian cũng sẽ khác nhau.
Giờ khi các bạn chọn icon location sẽ hiển thị ra file bạn mới tạo và có thể thay đổi luôn mà không cần phải build lại nữa, như mình mới tạo file ride-mydinh-hanoi
Kết quả chúng ta sẽ thu được như sau
Tuy nhiên ta có thể thấy nó cứ lặp đi lặp lại vô hạn mà không dừng lại tại điểm cuối cùng. Để cho nó dừng lại ở điểm cuối cùng thì chúng ta sẽ sử dụng thêm một waypoint nữa và thay đổi vị trí không đáng kể và tăng thời gian di của điểm này cách xa so với điểm gần cuối như sau:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="21.02186996901372" lon="105.7645261741194">
<name>Cupertino</name>
<time>2014-09-24T14:05:30Z</time>
</wpt>
<wpt lat="21.021606653375308" lon="105.76616386527535">
<name>Cupertino</name>
<time>2014-09-24T14:05:40Z</time>
</wpt>
<wpt lat="21.019302<strong>621</strong>702572" lon="105.76618737280388">
<name>Cupertino</name>
<time>2014-09-<strong>24T14</strong>:05:50Z</time>
</wpt>
<wpt lat="21.019302<strong>611</strong>702572" lon="105.76618737280388">
<name>Cupertino</name>
<time>2014-09-<strong>24T15</strong>:05:50Z</time>
</wpt>
</gpx>
Bạn để ý kĩ chỗ mình bôi đậm sẽ hiểu rõ nguyên lý hoạt động của nó.
Từ đây bạn có thể mở rộng ra bằng cách tạo thêm nhiều file GPX với các cung đường đa dạng để phục vụ cho việc test ứng dụng của các bạn khi cần.
Mình hi vọng bài viết có thể giúp mọi người làm việc một cách dễ dàng và hiệu quả hơn.