web-dev-qa-db-ja.com

xcode / iphone simを使用して複数のiphoneをシミュレートする方法はありますか?

私は複数のユーザーを必要とするゲームを計画していて、iPhoneシミュレーターの複数のインスタンスを起動する方法があるかどうか疑問に思っていました。メニューやGoogle検索結果には何も表示されませんでしたが、見落としがないようにしたかっただけです。

42
Abel

私が知る限り、シミュレータの複数のインスタンスを実行できないだけでなく、実際のデバイステストの時間になると、デバッガの複数のインスタンスも実行できなくなります。

つまり、マルチデバイスアプリを実行するには、それぞれがアプリを実行する単一のiPhone /タッチデバイス(またはシミュレーターインスタンス)に単一のMacを割り当てる必要があります。

VMWareかParallelsをどうにかしてこれに組み込むことができるかどうかを調べ始めましたが、OSをハッキングせずにできることはあまりありません。

http://bugreporter.Apple.com で機能リクエストを提出することをお勧めします。

11
Ramin

可能ですが、複数のユーザーでのみ可能です。

これを読んでください: http://www.coderebel.com/2010/08/31/iphone_simulator

同時にデバッグする2つのプロジェクト(P1、P2)があるとすると、次のようにします。

セットアップの手順:

  1. Macで新しいユーザー(U2)を作成する
  2. 特にビルドフォルダーへのP2へのR/Wアクセスを与えます。
  3. 上記のサイトからランチャーアプリをダウンロードし、アプリケーションにコピーします。

デバッグする手順:

  1. 実行中の場合はXcodeとシミュレータを閉じます
  2. U1でiPhone Launcher.appを起動します。
  3. U1でXcodeを開始し、P1をロードしてデバッグを開始します。
  4. U2でiPhone Launcher.appを起動します。
  5. U2でXcodeを開始し、P2をロードして、デバッグを開始します。

残念ながらそれはP.I.T.Aです。ユーザーを時々変更する必要がありますが、これまでのところ、これ以上の解決策はありません。お役に立てれば。

61
lvsti

複数のユーザーを使用せずにこれを簡単に行う方法があります。ただし、デバッガには接続しません。以下の説明はXCode 6 +に関するものであることに注意してください。この説明をスキップして、下の「wrapping-it-up」セクションまでスクロールダウンできます。

答えから ここ コマンドラインから任意のシミュレータを起動できることがわかります。

open -a "iOS Simulator" --args -CurrentDeviceUDID

コンソールでxcrun simctl listコマンドを実行すると、deviceID(およびすべてのシミュレータ)を見つけることができます。このようなリストが生成されます。デバイスIDは中括弧で囲まれたコードです。

== Runtimes ==
iOS 8.3 (8.3 - 12F69) (com.Apple.CoreSimulator.SimRuntime.iOS-8-3)
== Devices ==
-- iOS 8.3 --
    iPhone 4s (99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8) (Shutdown)
    iPhone 5 (K262AF11-ADD2-4FDA-ACBA-8C80DD9D4AA1) (Shutdown)
    iPhone 5s (337KDC51-0A4B-47DB-8966-83562FD92C93) (Shutdown)
    iPhone 6 Plus (9GK714E2-F713-4F98-A96E-C72ACD6571A8) (Shutdown)
-- iOS 8.2 --
    etc continued....

したがって、上記の例を使用してシミュレータを実行するには、コンソールで次のコマンドを実行します。

open -n /Applications/Xcode.app/Contents/Developer/Applications/iOS\ Simulator.app/ --args -CurrentDeviceUDID '99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8'

-nフラグは、ファイルを開くために使用するアプリケーションを指定するため、代わりに-aフラグを使用します。一方、-nフラグは、アプリケーションの新しいインスタンスを開く場合でも既に実行中。 man openコマンドを使用して、これらすべてを把握します。

また、シミュレータのパスが正しいことを確認してください。

もう1つ注意する必要があるのは、このようにシミュレータを実行すると、シミュレータの数が限られている可能性があります。また、制限があるため、すでに画面に表示されているものを中断せずに起動することもできます。私たちはこの答えからこれを解決できます here ここで、彼はcreate a new simulator and delete one.の方法を示します

まとめると、次のように起動します

A)起動する前に、まずシミュレータを作成します。

使用法:simctl create "name" "device type id" "runtime id"

xcrun simctl create "mynewsimulator" "iPhone 6" "com.Apple.CoreSimulator.SimRuntime.iOS-8-3"

上記で実行したコマンドxcrun simctl listコマンドからランタイムIDがわかります。上記のコマンドを実行すると、deviceIDがコンソール画面に表示されます。以下に示すシミュレーターを起動する最後の引数として必要になるので、それをメモしてください。このIDが99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8であったとしましょう

B)それを起動する

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ --args -CurrentDeviceUDID '99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8'

C)シミュレータでの作業が終了したら削除します

xcrun simctl delete 99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8

これらすべてを単一の.shファイルに配置して、簡単に実行できます。これらすべてをshファイルに入れる場合は、各コマンドの後にwaitまたはsleepコマンドを置くことに注意してください。

[EDIT 2017]XCode 9が複数のシミュレータをサポートするようになりました。それがどのように機能するかを確認するために待っています。

Mac OS Xサーバーライセンスを持っている場合のもう1つのオプション(おそらくやり過ぎですが)は、Mac OS X Serverのインスタンスを仮想化し、VMで2番目のシミュレーターを実行することです。

1
Mike

Xcode 9以降でサポートされます。

(出典:WWDC 2017)

0
julien_c

次の手順に従ってアプリをテストします。

最初に、プロセス全体に対して1つのことを行う必要があります。[プロジェクト]-> [プロジェクト設定の編集]-> [オプション]にチェックマークを付け、独立したターゲットを並行してビルドします。

  1. シミュレーターでアプリを作成するデバッグコードたとえば、アプリ名は-インスタンス
  2. シミュレータを閉じる
  3. Project-> New Target-> Instance2に移動し、Instance2.info.plistファイルに「Bundle display name:Instance2」を追加します。実行可能ファイル名を設定:Instance2 Instance2 Targetを選択->プロジェクトに移動-> Set Active Target-> Instance2 Build with Instance2

注:慎重に行ってください。そうしないと、シミュレータをリセットする必要があります。リセットシミュレータ->シミュレータを実行-> iPhoneシミュレータ->コンテンツと設定をリセット...

これで、シミュレーターに2つのアプリがあり、すべてのインスタンスでアプリをテストできます。

それがあなたを助けることを願っています:)

0
Ravikant Nagar

XCode 4では、両方をデバッグモードにしたまま、複数のインスタンスを実行できます。

私がしたことは、ターゲットの複製を作成し、元の複製と複製の両方を実行することでした。出力ウィンドウを使用している場合は、表示している出力を切り替えることができます。

0
the_e

Ivsty による回答と this one を組み合わせてうまく機能させることができました。

基本的に、2人のユーザー(AとB)を作成し、各ユーザーでシミュレーターを実行し、ユーザーBでVNCサーバーを実行し、ユーザーAから画面Bに接続して、ユーザーを切り替える必要はありません。

0
Andrej Karadzic

うーん...あなたはここで何かを見逃しているとは思わない。私の知る限り、SDK内に複数のデバイスをエミュレートできるテクノロジーはありませんが、これは便利な機能です。私の唯一の選択肢は、2台目のiPhone OSデバイスを入手するか、iPhone OSデバイスを持っている友人にテストのために使用してもらうことだと思います。

0
RexOnRoids