0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SwiftUIでGPSロケーションを指定した場所にする方法

Posted at

SwiftUIでXCodeを使ってGPSロケーションの偽装方法を説明していこうと思います。iOS17でも動作確認済み

自分はProject名をGPSSpooferとしたのと、開発者であればコードを見ればわかると思うので、実行時のコードを載せてご自分なりに変更して頂ければと思っております。本当に基本中の基本なことだけだと思います。

1.XCodeで新規プロジェクトを作成

今回私はSwiftUIで実装しました。実装理由はStoryBoard使った解説している方は何人かいらっしゃるので、まだだれもしてない内容で書こうと思った次第です。でも特殊な事はしてないので、コピーして活用してくれると嬉しいな。

2.iOSの位置情報はアプリ内で共通で、Simulate Locationはアプリがサスペンドされると機能しなくなるので、AppDelegateで処理する内容を追記してあげます。SwiftUIだとAppDelegateっていうファイル名がないので、先ほど作成したGPSSpoofer.swiftに以下の様に追記してあげます。

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
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ファイルを用意するだけで、自動で歩いてくれますし、素材集めなどに便利かなと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?