有没有一种方法可以使用xcode / iphone sim模拟多个iphone?

Is there a way to simulate multiple iphones using xcode/iphone sim?

我正在计划一款需要多个用户的游戏,我想知道是否有办法启动多个iPhone Simulator实例。 我没有在菜单或Google搜索结果中看到任何内容,但我只是想确保自己没有遗漏任何内容。


可能,但仅适用于多个用户。

阅读此:http://www.coderebel.com/2010/08/31/iphone_simulator

假设您有两个项目(P1,P2)要同时调试,请执行以下操作。

设置步骤:

  • 在Mac上创建一个新用户(U2)
  • 向其授予对P2的R / W访问权限,尤其是对其构建文件夹的访问权限。
  • 从上面的网站下载启动器应用程序,然后将其复制到"应用程序"中。
  • 调试步骤:

  • 关闭Xcode和模拟器(如果正在运行)
  • 使用U1启动iPhone Launcher.app。
  • 用U1启动Xcode,加载P1,开始调试。
  • 使用U2启动iPhone Launcher.app。
  • 用U2启动Xcode,加载P2,开始调试。
  • 不幸的是,这是P.I.T.A.不得不不时更改用户,但是到目前为止,我还没有找到更好的解决方案。希望这可以帮助。


    有一种无需使用多个用户即可轻松完成此操作的方法。请记住,虽然您不会连接到调试器。请记住,以下说明适用于XCode 6+。您可以跳过此说明,而向下滚动到下面的"包装起来"部分。

    从这里的答案中,我们可以看到您可以从命令行启动任何模拟器:

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

    通过在控制台上运行xcrun simctl list命令,可以找到deviceID(以及所有模拟器)。它将生成一个这样的列表。设备ID是大括号中的代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    == 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....

    因此,要以上面的示例为例运行模拟器,请在控制台上运行以下命令:

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

    我们使用-n标志代替,因为-a标志指定了用于打开文件的应用程序,而-n标志则打开了该应用程序的新实例(即使已经在运行)。使用man open命令了解所有这些知识。

    另外,请确保您具有正确的模拟器路径。

    还有一点需要注意的是,如果您以这种方式运行模拟器,则可能是模拟器数量有限。并且由于它的局限性,您可能希望在不中断屏幕上已经启动的情况下启动它。我们可以从这里的答案中解决这个问题,在那里他向您展示了如何create a new simulator and delete one.

    总结一下,这就是启动它们的方法。

    A)首先创建一个模拟器,然后再启动它。

    用法:simctl创建"名称""设备类型ID""运行时ID"

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

    您可以从上面运行的命令xcrun simctl list中找到运行时ID。运行上述命令后,设备ID将打印在控制台屏幕上。记下它,因为它是启动下面显示的模拟器的最后一个参数。假设此ID为99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8

    B)启动

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

    C)完成模拟器后将其删除

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

    所有这些都可以放在一个.sh文件中,以便于运行。
    如果决定将所有这些内容放入sh文件,请注意在每个命令之后放置waitsleep命令。

    [编辑2017]
    我看到XCode 9现在将支持多个模拟器。等待看一切如何工作。


    据我所知,不仅不能运行模拟器的多个实例,而且在进行实际设备测试时,您也不能运行调试器的多个实例。

    这意味着要执行多设备应用程序,您需要将单个Mac分配给单个iPhone /触摸设备(或模拟器实例),每个Mac / iPhone都可以运行您的应用程序。

    我已经开始研究可以通过某种方式将VMWare或Parallels引入其中,但是如果不对OS进行黑客攻击,将无法完成很多工作。

    我建议通过http://bugreporter.apple.com提交功能请求。


    如果您拥有Mac OS X服务器许可证,另一种选择(尽管可能会过大)是虚拟化Mac OS X服务器的实例,然后在VM中运行第二个模拟器。


    从Xcode 9开始受支持。

    (来源:WWDC 2017)


    我设法使它结合Ivsty的答案和它一起工作。

    基本上,您要做的是创建两个用户(A和B),在每个用户中运行模拟器,在用户B上运行VNC服务器,然后从用户A连接到访问屏幕B,而无需切换用户。


    在XCode 4中,您可以同时运行多个实例并使其处于调试模式。

    我要做的是创建目标的副本,并同时运行原始副本和副本。如果使用输出窗口,则可以切换要查看的输出。


    请按照以下步骤测试您的应用。

    您必须首先为整个过程做一件事:
    转到项目->编辑项目设置->勾选选项-并行构建独立目标。

  • 将在模拟器中创建您的应用程序的调试代码例如,您的应用程序名称为-实例
  • 关闭模拟器
  • 转到项目->新目标->实例2
    在Instance2.info.plist文件中添加"捆绑显示名称:Instance2"
    设置可执行名称:Instance2
    选择Instance2目标->转到项目->设置活动目标-> Instance2
    使用Instance2进行构建
  • 注意:请仔细进行所有操作,否则必须重置模拟器
    对于重置模拟器->运行模拟器-> iPhone模拟器->重置内容和设置...

    现在,您在模拟器中有两个应用程序,您可以在所有实例上测试该应用程序。

    希望它能对您有所帮助:)


    嗯...我不认为您在这里没有任何遗漏。据我所知,SDK中没有能够模拟多个设备的技术-尽管这将是一个有用的功能。我认为您唯一的选择是购买第二台iPhone OS设备,或者找一个也拥有iPhone OS设备让您使用它进行测试的朋友。


    是的,现在有可能,而且也很容易。
    您唯一需要的是xctool,来自Facebook的构建工具和一个ruby gem。红宝石宝石有助于创建/销毁测试期间所需的模拟器。

    您可以阅读此链接上的完整文档:

    https://github.com/plu/parallel_ios_tests

    我正在使用这种方法,并且同时在4个iOS模拟器上运行测试。