2016-07-21 14 views
8

xcode > simulate locationコマンドを制御するプログラム的な方法はありますか?私は実行したい外部ロケーションテストスクリプトを持っており、理想的にはテストスイートはxcodeに接続された電話の位置を自由に変更させることができます。Xcodeのデバッグを自動化する>位置をシミュレートするコマンド

これは可能でしょうか?

+0

「外部の場所のテストスクリプト」は何ですか?彼らはXcodeユニットテストですか? – InsertWittyName

+0

@InsertWittyNameこれは、文字通り、xcode以外で実行されているスクリプトです。私がautomatorやxctoolなどでxcodeを起動することができれば理想的です。 私は、iPhoneを動かす必要があるシステム全体を自動化しています。異なる時間帯のポジションに配置されています。 –

答えて

5

Pokemon-Go-Controllerと呼ばれるGitHubプロジェクトがあります。ソリューションの

概要:

  1. gpxファイルことを参照して空のプロジェクト(コピーしない)を作成し、あなたのデバイス上で常にクリックします
  2. 実行オートクリッカーを、それを実行
  3. gpxファイルを作成します。 update location(Xcode内)
  4. gpxスクリプトを使用してファイルを更新すると、デバイスの場所が自動的に更新されます
  5. 代わりに、あなたは、このアップルスクリプトを使用することができ、オートクリッカーの

#Will continue update the location to the location name below from Xcode: 

property locationName : "pokemonLocation" #name of your gpx filex 

########################### 
tell application "System Events" 
    tell process "Xcode" 
     repeat while true 
      click menu item locationName of menu 1 of menu item "Simulate Location" of menu 1 of menu bar item "Debug" of menu bar 1 
      delay 0.2 
     end repeat 
    end tell 
end tell 
7

正確にはわかりませんが、別の単体テストバンドルでは別の場所(GPXファイル)を使用することができます。

次に、各バンドルでユニットテストを行い、その特定の場所について必要なテストを行うことができます。

Scheme

xctoolもちょうどのみのオプションを使用して、特定のターゲットでユニットテストを実行することができます。

path/to/xctool.sh \ 
    -workspace YourWorkspace.xcworkspace \ 
    -scheme YourScheme \ 
    test -only SomeTestTarget 
+0

これはうまくいくかもしれません...私が書いた固定gpxファイルを持っていて、デバイスのxctoolを使って単体テストを実行することができました。それは完璧な解決策ではありませんが、部分的な解決策です。 –

2

はい、それは可能です。 1. @InsertWittyNameの答え、またはas described in this blog postの説明に従って、GPXファイルを設定します。 2. Instrumentsを使用して、異なるGPXファイルを使用してSimulatorでアプリを実行します。

私はプロセス全体を書きますが、someone more eloquent than myself already hasです。

熱心なS/Oユーザーとして、私は基本的にはシングルリンクの回答であることを忘れてしまいます。だからここにいくつかの特別なボーナス情報があります。

  1. 間違いなくsecurity testing your location aware featuresを調べる必要があります。私は今年ブラックハットにいますので、もしあなたがそこにいたら、それについて話しましょう!

  2. 以前にリンクされた解答の種類が気に入らない場合は、XCTestコードを使用して別の場所をシミュレートすることができます(like this)。

  3. アップルスクリプトソリューションlike this oneがあるようです。

私は少なくとも、怠惰なリンクのみの回答以上の資格を得るのに十分な情報を提供していたと思います。楽しんで、幸運!

0

idevicelocationは、iOSデバイスでジオロケーションを模擬するためのコマンドラインツールです。

使用:

$ idevicelocation 77.432332 -- -7.008373564

場所シミュレーションを停止:

負の値を渡す

$ idevicelocation 48.856614 2.3522219000000177

2つの引数、緯度と経度を通る位置に設定
$ idevicelocation [OPTIONS] LATITUDE LONGITUDE

$ idevicelocation --stop

オプション:

-d enable connection debug messages.<br/> -u specify device UDID.<br/> -h help.<br/> -s stop location simulation on device.

また、同じ目的のために内部のXcodeによって使用されるプロセスcom.apple.dt.simulatelocationと通信するlibimobiledeviceライブラリを使用します。
ビルド手順はREADMEファイルにあります。
ランダムな場所に移動する前に、正しい現像剤イメージをマウントしてください。
この素晴らしいユーティリティを書いてくれたAnguloに感謝します。

このツールは現在、libimobiledeviceパッケージに同梱されていませんが、長い間保留中のPull Requestがあります。

関連する問題