我正在计划一个需要多个用户的游戏,我想知道是否有办法启动 iPhone Simulator 的多个实例。我没有在菜单或 Google 搜索结果中看到任何内容,但我只是想确保我没有遗漏任何内容。
10 回答
这是可能的,但仅限于多个用户。
阅读: 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,开始调试。
不幸的是,PITA 不得不时不时地更换用户,但到目前为止我还没有找到更好的解决方案。希望这可以帮助。
有一种方法可以轻松地做到这一点,而无需使用多个用户。请记住,您不会连接到调试器。请记住,下面的解释是针对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 现在将支持多个模拟器。等待看看这一切将如何运作。
据我所知,您不仅不能运行多个模拟器实例,而且当需要进行实际设备测试时,您也不能运行多个调试器实例。
这意味着要执行多设备应用程序,您需要将一台 Mac 分配给每个运行您的应用程序的单个 iPhone/触摸设备(或模拟器实例)。
我已经开始研究是否可以以某种方式将 VMWare 或 Parallels 引入其中,但是如果不破解操作系统,就没有什么可以做的了。
如果您拥有 Mac OS X 服务器许可证,另一个选择(尽管可能有点过分)是虚拟化 Mac OS X 服务器实例,并在 VM 中运行第二个模拟器。
嗯...我认为您在这里没有遗漏任何东西。据我所知,SDK 中没有能够模拟多个设备的技术——尽管这将是一个有用的功能。我认为您唯一的选择是获得第二台 iPhone OS 设备,或者找一个也拥有 iPhone OS 设备的朋友让您使用它进行测试。
请按照以下步骤测试您的应用。
您必须首先为整个过程做一件事:转到项目 - > 编辑项目设置 - > 勾选选项 - 并行构建独立目标。
- 调试将在模拟器中创建您的应用程序的代码 例如,您的应用程序名称是 - 实例
- 关闭模拟器
- 转到 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...
现在您在模拟器中有两个应用程序,您可以在所有实例上测试应用程序。
希望它会帮助你:)
在 XCode 4 中,您可以运行多个实例,同时让它们都处于调试模式。
我所做的是创建我的目标的副本并运行原始和副本。如果您使用的是输出窗口,您可以切换您正在查看的输出。
从 Xcode 9 开始支持。
(来源:WWDC 2017)
是的,现在这是可能的,也很容易。您唯一需要的是xctool
来自 Facebook 的构建工具和一个 ruby gem。ruby gem 有助于创建/销毁测试期间所需的模拟器。
您可以阅读此链接上的完整文档:
https://github.com/plu/parallel_ios_tests
我正在使用这种方法,同时在 4 个 iOS 模拟器上运行我的测试。