iOS 裝置定位模擬方法研究
2016/08/21 (日)
上週,一行人在開車去吃午餐的路上,同事安妮說前同事寫了 PokemonMapWalker,一個可以任意控制 iOS 裝置上 Pokemon GO 神奇寶貝訓練師位置的程式,讓你想去哪裡就去哪裡。本著工程師要不斷學習、研究新東西的原則,怎能錯過這麼有趣的 作弊工具 研究提目呢。
才一開始就遇到困難,改變 iOS 裝置的定位主要是用 Apple 開發者 IDE Xcode 的 Simulate Location 功能實現,身邊沒有 Mac OS 可以裝 Xcode,立刻想到經濟實惠的 VM 解法,果然有好心人士,提供 step by step 的安裝方法,試了在 VirtualBox 上安裝失敗,又試了在 VMware Workstation Player 安裝,成功了!開始生平第一次 Mac OS 使用體驗,因為不是裝在 Mac 電腦上,快捷鍵或一些操作手勢無法使用,大大減低了使用的方便性,但有一個幾乎跟 Linux shell 一樣的 Terminal 工具,讓整天面對黑底白字畫面敲指令的工程師可以很快上手。
PokemonMapWalker 需要先在 Mac OS 啟動 MapWalker,啟動後會出現一張地圖,可以用方向鍵走動決定位置,接著在 iOS 裝置上執行 LocationSimulation,將 Xcode 的 Simulate Location 設定為 MapWalker 的位置。我又卡住了,在啟動 MapWalker 時出現硬體無法畫地圖的錯誤訊息,VM 上模擬出來的 CPU 沒辦法畫圖,只好先暫停 作弊 研究,另想解決方法。
隔天下班前,搜尋了一下怎麼用一般電腦安裝 Mac OS,要改 BIOS 設定,風險太高,放棄,又去看了 Apple 網站,MacBook 太貴也不會常用,放棄。重讀了一次 PokemonMapWalker 的 README,看到作者說此專案是從另一個 GitHub 專案 Pokemon-Go-Controller 發想而來的,Pokemon-Go-Controller 是將控制定位的程式(相當於 PokemonMapWalker 的 MapWalker)執行在另一台 iOS 裝置上,剛好家裡有兩台 iOS 裝置,太棒了,下班實驗去。
解法常常來自於仔細地重讀一次說明文件,按照 Pokemon-Go-Controller 的說明,我把控制要去哪裡的 Controller 執行在 iPad 上,再連接 iPhone 將 Controller 產生的位置檔(.gpx)加入到專案,執行後啟用 Xcode 的 Simulate Location 功能選擇位置檔的名稱,真的順利改變 iPhone 的位置!
不過在 iPad 上執行的 Controller 閒置一段時間後,會自行關閉,必須連上 Xcode 重新執行,USB 在兩個裝置換來換去有點麻煩。於是,我依樣畫葫蘆,寫了網頁版的 Where-are-you-going,用網頁來操作要走到哪裡。
Where-are-you-going 用 google-map-react 做了簡單的 UI,畫面上的人物圖示代表目前的位置,走動可用方向按鈕或鍵盤的方向鍵,位置移動時會去呼叫更新目前位置的 Restful API,自動產生目前位置的位置檔(.gpx),再利用 Mac OS 的 osascript 指令自動點選 Xcode Simulate Location 選擇位置,如此一來,在網頁上移動等於拿著 iOS 裝置移動,輕輕鬆鬆抓神奇寶貝。
其實類似的專案在 GitHub 上很多,但自己動手做,不斷遇到問題再解決問題,非常有成就感,也因此稍微認識了 Mac OS 與開發者 IDE Xcode。
人生難免會迷失方向,偶爾逃離現實,在遊戲中完全掌握方向的感覺真不錯。不過最想去的地方還是要親自去走走,是時候放下手機,放空腦袋,喝杯咖啡,聽首歌吧。