SwiftUIでXCodeを使ってGPSロケーションの偽装方法を説明していこうと思います。iOS17でも動作確認済み
自分はProject名をGPSSpooferとしたのと、開発者であればコードを見ればわかると思うので、実行時のコードを載せてご自分なりに変更して頂ければと思っております。本当に基本中の基本なことだけだと思います。
1.XCodeで新規プロジェクトを作成
今回私はSwiftUIで実装しました。実装理由はStoryBoard使った解説している方は何人かいらっしゃるので、まだだれもしてない内容で書こうと思った次第です。でも特殊な事はしてないので、コピーして活用してくれると嬉しいな。
2.iOSの位置情報はアプリ内で共通で、Simulate Locationはアプリがサスペンドされると機能しなくなるので、AppDelegateで処理する内容を追記してあげます。SwiftUIだとAppDelegateっていうファイル名がないので、先ほど作成したGPSSpoofer.swiftに以下の様に追記してあげます。
GPSSpoofer.swift
import SwiftUI
@main
struct GPSSpooferApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
debugPrint("application:didFinishLaunchingWithOptions:")
application.registerForRemoteNotifications()
return true
}
var backgroundTaskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
func applicationWillResignActive(_ application: UIApplication) {
self.backgroundTaskID = application.beginBackgroundTask(){
[weak self] in
application.endBackgroundTask((self?.backgroundTaskID)!)
self?.backgroundTaskID = UIBackgroundTaskIdentifier.invalid
}
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
debugPrint(deviceToken.base64EncodedString())
}
}
今回はロケーションの偽装なので、アプリ自体は特に何もしません。後述するGPXファイルの座標をここで表示してあげてもいいかもしれないですね。
ConentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
#Preview {
ContentView()
}
3.上記の準備が終われば実機で位置が変わるか確認することができます。
アプリを実行中にDebug
> Simulate Location
で移動先の都市を選択することができます。
Add GPS Exchange to Project
を選択し、自分専用の位置情報を用意します。
以下のサイトでXCodeで使えるGPXファイルが作成できます。
https://www.gpxgenerator.com/
上記サイトで地図上からルートを作成し、Showで該当ルートを動くGPXファイルの内容が表示されます。まだGPXファイルを作成していなければ、ダウンロードを選択し、プロジェクトに追加してください。既存のファイルがあればそのファイルをプロジェクトに追加すれば準備は完了です。
後は自分が歩きたい場所のGPXファイルを用意するだけで、自動で歩いてくれますし、素材集めなどに便利かなと思います。