iPhone 실제 기기에서 위치 정보를 시뮬레이션하는 방법

포켓몬 GO에서 위치 정보 위장으로 악성 계정이 BAN되기 시작했지만 BAN되는 방법을 소개합니다.
앞으로 포켓몬 GO 같은 위치 정보 앱을 만들 수 있다고 말했을 때 사용할 수있는 편리한 디버깅 방법입니다.

iPhone의 GPS 위치 정보는 Xcode의 Simulate Location을 사용하여 가장할 수 있습니다.
iOS 위치 정보는 기기의 모든 앱에서 공통이므로 다른 iOS 앱에도 영향을 줄 수 있습니다.

위치 정보를 시뮬레이션하는 방법



1. Xcode로 새로운 프로젝트 만들기



내용은 비어 있기 때문에 Single View Application을 선택하여 프로젝트를 만듭니다.


2.AppDelegate.swift에 백그라운드에서도 처리를 계속하도록 추가



iOS 위치 정보는 앱 내에서 공통적이지만 Simulate Location은 앱이 일시 중단되면 작동하지 않습니다.
따라서 앱에 백그라운드 연속 처리를 추가합니다.

AppDelegate.swift
import UIKit
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    var backgroundTaskID : UIBackgroundTaskIdentifier = 0

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        return true
    }

    func applicationWillResignActive(application: UIApplication) {
        self.backgroundTaskID = application.beginBackgroundTaskWithExpirationHandler(){
            [weak self] in
            application.endBackgroundTask((self?.backgroundTaskID)!)
            self?.backgroundTaskID = UIBackgroundTaskInvalid
        }
    }
}

backgroundTaskID와 applicationWillResignActive 메서드를 추가합니다. 그 이외의 부분은 그대로 OK

3. 실제 기기에서 이 앱 실행



실제 기기의 iPhone을 선택하여 앱을 실행합니다.


4.Simulate Location 사용



앱을 실행하는 동안 Debug > Simulate Location 로 이동할 도시를 선택할 수 있습니다.
시험에 런던을 선택해보십시오.


이 상태에서 지도를 열어보면 런던에 있는 것을 확인할 수 있습니다.


5. 어떤 위치 정보로 가장하는 방법



임의의 위치 정보로 변경하려면 GPX 파일이라고 하는 것을 작성합니다.
XML 형식의 파일로 위도 경도의 정보를 기술할 뿐입니다.

MyLocation.gpx
<?xml version="1.0"?>
<gpx version="1.1">
    <wpt lat="35.6575811" lon="139.7009455" />
</gpx>

이 파일은 시부야 역을 지정했습니다.

그리고 Debug > Simulate Location > Add GPX File to Project 에서 파일을 읽으면,
두 번째로 새롭게 추가된 항목 증가하고 있으므로 선택합니다.



확인하면, 방금전 GPX 파일로 지정한 시부야역에 위치 정보가 바뀌어 있습니다.



위치 정보를 서서히 이동하는 방법



로드할 GPX 파일의 내용을 변경해도 Xcode에서 Simulate Location을 클릭하지 않으면 iPhone 측의 위치 정보는 다시 쓰지 않습니다.

따라서 AppleScript에서 Xcode UI를 조작합니다.

1. 스크립트 편집기의 보조 액세스 허용



AppleScript에서 Mac에서 UI를 조작하려고 하면 "System Events でエラーが起きました:スクリプトエディタ には補助アクセスは許可されません。"라는 내용의 오류 메시지가 표시됩니다.

아직 설정되어 있지 않은 경우는 システム環境設定 > セキュリティとプライバシー > プライバシー > アクセシビリティアプリケーション > ユーティリティ > スクリプトエディタ.app 를 허가해 주세요.


2.GPX 파일을 다시 쓰는 스크립트



이런 식으로 AppleScript에서 GPX 파일을 만듭니다.

changeMyLocation.scpt
set gpxfile to "/Users/{username}/Documents/works/{xcodeproject}/MyLocation.gpx"
set lat to 35.6575811
set lon to 139.7009455

set outputStr to "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
set outputStr to outputStr & "<gpx version=\"1.1\">"
set outputStr to outputStr & "<wpt lat=\"" & lat & "\" lon=\"" & lon & "\" />"
set outputStr to outputStr & "</gpx>"

open for access POSIX file gpxfile with write permission
write outputStr to POSIX file gpxfile as «class utf8»
close access POSIX file gpxfile

gpxfile의 파일 경로를 추가한 GPX 파일의 경로로 다시 작성하십시오.

3.Simulate Location을 클릭하는 스크립트



changeMyLocation.scpt
tell application "System Events" to tell process "Xcode"
    click menu item "MyLocation" of menu 1 of menu item "Simulate Location" of menu 1 of menu bar item "Debug" of menu bar 1
end tell

4. 서서히 위치 정보를 재기록 계속하는 루프 처리를 만든다



repeat로 루프하여 위도와 경도에 1초마다 0.001을 가산하도록 했습니다.
이제 북동쪽으로 진행됩니다.

changeMyLocation.scpt
set gpxfile to "/Users/{username}/Documents/works/{xcodeproject}/MyLocation.gpx"
set lat to 35.6575811
set lon to 139.7009455

repeat
    set lat to lat + 1.0E-3 -- +0.001
    set lon to lon + 1.0E-3 -- +0.001

    set outputStr to "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
    set outputStr to outputStr & "<gpx version=\"1.1\">"
    set outputStr to outputStr & "<wpt lat=\"" & lat & "\" lon=\"" & lon & "\" />"
    set outputStr to outputStr & "</gpx>"

    open for access POSIX file gpxfile with write permission
    write outputStr to POSIX file gpxfile as «class utf8»
    close access POSIX file gpxfile

    tell application "System Events" to tell process "Xcode"
        click menu item "MyLocation" of menu 1 of menu item "Simulate Location" of menu 1 of menu bar item "Debug" of menu bar 1
    end tell

    delay 1
end repeat

이 코드를 스크립트 편집기에서 실행합니다.
▶ 버튼으로 실행, ■ 버튼으로 정지합니다.


실행하여 실제 기계를 확인하면 움직이고 있는 것을 확인할 수 있었습니다.





지속적으로 움직이는 데 익숙하지 않은 AppleScript를 사용해야하지만 iOS 측은 간단했습니다.
어떻게 사용하는지는 자기 책임으로 부탁드립니다.

한가지 문제가 있어, 앱을 종료해도 Simulate Location에서 설정한 위치 정보가 원래대로 돌아오지 않습니다.

좋은 웹페이지 즐겨찾기