42

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

4

10 回答 10

61

这是可能的,但仅限于多个用户。

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

假设您有两个要同时调试的项目(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,开始调试。

不幸的是,PITA 不得不时不时地更换用户,但到目前为止我还没有找到更好的解决方案。希望这可以帮助。

于 2010-09-15T11:09:55.137 回答
19

有一种方法可以轻松地做到这一点,而无需使用多个用户。请记住,您不会连接到调试器。请记住,下面的解释是针对XCode 6+的。您可以跳过此说明,只需向下滚动到下面的总结部分。

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

open -a "iOS 模拟器" --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命令了解所有这些内容。

还要确保您的模拟器具有正确的路径。

还有一点需要注意,如果你像这样运行模拟器,你的模拟器很可能是有限的。而且由于它的限制,您可能希望在不中断屏幕上已经存在的情况下启动它。我们可以从这里的答案中解决这个问题,他向您展示如何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。运行上述命令后,设备 ID 将打印在控制台屏幕上。请注意它,因为您需要将其作为启动模拟器的最后一个参数,如下所示。假设这个 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 现在将支持多个模拟器。等待看看这一切将如何运作。

于 2015-06-02T22:00:02.853 回答
11

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

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

我已经开始研究是否可以以某种方式将 VMWare 或 Parallels 引入其中,但是如果不破解操作系统,就没有什么可以做的了。

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

于 2009-05-22T14:50:54.543 回答
1

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

于 2010-01-03T04:29:21.440 回答
0

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

于 2009-05-22T05:42:52.980 回答
0

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

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

  1. 调试将在模拟器中创建您的应用程序的代码 例如,您的应用程序名称是 - 实例
  2. 关闭模拟器
  3. 转到 Project->New Target -> Instance2 在 Instance2.info.plist 文件中添加“Bundle display name:Instance2”设置可执行文件名称:Instance2 选择 Instance2 Target -> Go to Project -> Set Active Target -> Instance2 Build with Instance2

注意:请谨慎操作,否则您必须重置模拟器 For Reset Simulator -> Run Simulator -> iPhone Simulator -> Reset Content & Settings...

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

希望它会帮助你:)

于 2011-10-22T13:11:11.510 回答
0

在 XCode 4 中,您可以运行多个实例,同时让它们都处于调试模式。

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

于 2012-03-06T17:00:35.493 回答
0

我设法让它将Ivsty的答案与这个结合起来工作。

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

于 2014-10-25T09:10:33.587 回答
0

从 Xcode 9 开始支持。

(来源:WWDC 2017)

于 2017-06-09T11:18:38.883 回答
-1

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

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

https://github.com/plu/parallel_ios_tests

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

于 2016-04-15T13:02:30.667 回答