有没有一种方法来模拟多个iPhone使用Xcode / iPhone的SIM卡?
我计划了一个游戏,需要多个用户,我想知道是否有一种方法来触发iPhone模拟器的多个实例。 我没有看到菜单或Googlesearch结果中的任何内容,但我只是想确保我没有遗漏任何东西。
就我所知,不仅可以不运行模拟器的多个实例,而且在实际设备testing的时候,不能让debugging器的多个实例也运行。
这意味着要执行多设备应用程序,您需要将一台Mac分配给每个运行您的应用程序的单个iPhone /触摸设备(或模拟器实例)。
我已经开始研究VMWare或者Parallels是否能够被引入到这个领域,但是没有黑客攻击操作系统,没有什么可以做的。
这是可能的,但只有多个用户。
阅读: http : //www.coderebel.com/2010/08/31/iphone_simulator
假设您有两个想要同时debugging的项目(P1,P2),请执行以下操作。
设置步骤:
- 在Mac上创build一个新用户(U2)
- 给它的R / W访问P2,特别是它的生成文件夹。
- 从上面的网站下载启动器应用程序,并将其复制到应用程序。
debugging步骤:
- closuresXcode和模拟器如果运行
- 用U1启动iPhone Launcher.app。
- 用U1启动Xcode,加载P1,开始debugging。
- 用U2启动iPhone Launcher.app。
- 用U2启动Xcode,加载P2,开始debugging。
不幸的是,这是一个PITA必须时不时更换用户,但迄今为止我还没有find更好的解决scheme。 希望这可以帮助。
有一种方法可以轻松地做到这一点,而无需使用多个用户。 请记住,您将不会连接到debugging器。 请记住下面的解释是针对XCode 6+的 。 你可以跳过这个解释,然后向下滚动到下面的包装部分。
从这里的答案我们可以看到,你可以从命令行启动任何模拟器:
打开-a“iOS模拟器”–args – CurrentDeviceUDID
您可以通过在控制台上运行xcrun simctl list
命令来finddeviceID(以及所有的模拟器)。 它会产生一个像这样的列表。 设备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
命令来了解所有这些东西。
还要确保你的模拟器有正确的path。
还有一点要注意的是,如果你这样运行模拟器,很有可能你的模拟器有限。 而且由于它的有限,你可能想要启动它,而不会中断已经在屏幕上的一个。 我们可以从这个答案解决这个问题, 在这里他向你展示了如何create a new simulator and delete one.
所以把它包起来,这是你做什么来启动它们。
A)首先在启动之前创build一个模拟器。
用法:simctl创build“名称”“设备typesID”“运行时ID”
xcrun simctl create "mynewsimulator" "iPhone 6" "com.apple.CoreSimulator.SimRuntime.iOS-8-3"
你会从我上面运行的命令xcrun simctl list
命令中find运行时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
命令。
[编辑2017]我看到,XCode 9现在将支持多个模拟器。 等待看看它是如何工作的。
如果您拥有Mac OS X服务器许可证,另一种select(尽pipe可能是矫枉过正)是虚拟化Mac OS X Server的实例,然后在虚拟机中运行第二个模拟器。
嗯…我不认为你在这里错过了什么。 据我所知,SDK中没有任何技术能够模拟多个设备 – 尽pipe这将是一个有用的function。 我认为你唯一的select是获得第二个iPhone OS设备,或者让一个也有iPhone OS设备的朋友让你使用它来testing。
在XCode 4中,您可以在debugging模式下运行多个实例。
我所做的是创build一个我的目标的副本,并运行原始和重复。 如果您正在使用输出窗口,则可以切换您正在查看的输出。
按照以下步骤testing您的应用程序。
你必须先为整个过程做一件事:进入项目 – >编辑项目设置 – >打勾选项 – 并行构build独立的目标。
- debugging代码,将在模拟器中创build您的应用程序例如,您的应用程序名称是 – 实例
- closures模拟器
- 转到Project-> New Target – > Instance2在Instance2.info.plist文件中添加“Bundle display name:Instance2”Set可执行文件名称:Instance2selectInstance2 Target – >转到Project – > Set Active Target – > Instance2 Build with Instance2
注意:做所有仔细,否则你必须重置您的模拟器重置模拟器 – >运行模拟器 – > iPhone模拟器 – >重置内容和设置…
现在你有两个模拟器的应用程序,你可以testing应用程序的所有实例。
希望它会帮助你:)
我设法把它和Ivsty的答案结合起来。
基本上,你要做的是创build两个用户(A和B),在他们每个中运行模拟器,在用户B上运行VNC服务器,然后从用户A连接到访问屏幕B,而不需要切换用户。
从Xcode 9支持。
(来源:WWDC 2017)
是的,现在这是可能的,也很容易。 你唯一需要的是xctool
,来自Facebook的构build工具和一个ruby的gem。 ruby有助于创build/销毁testing过程中所需的模拟器。
你可以阅读这个链接的完整文档:
https://github.com/plu/parallel_ios_tests
我正在使用这种方法,并在同一时间在4个iOS模拟器上运行我的testing。