2017-05-24 110 views
0

macOS Sierra,Xcode 8.2。在沙箱中运行iOS模拟器

我想在沙盒中运行Xcode iOS模拟器,这样我就可以限制正在测试的应用程序的网络连接。

Based on what I saw here,我创建了一个沙箱文件是这样的:

(version 1) 
(allow default) 
(deny network*) 

然后我跑这样的模拟器:sandbox-exec -f ~/Desktop/block_network.sb /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator

看来,这并不正确模拟器连接到任何其他进程管理它。该模拟启动,但说该设备无法找到,并在Xcode运行只是打开了一个不同的模拟器。我在终端上也看到这个错误:CoreSimulatorService connection became invalid. Simulator services will no longer be available.有什么想法?

我也尝试从sb文件中删除(deny network*),所以一切都是允许的;同样的问题。

回答

1

这是非常不受支持的,但问题很可能是所需的mach端口正在被沙箱阻止。

你可以试试:

(allow mach-lookup) 
(allow mach-register) 
(allow distributed-notification-post) 
(allow file-read* (regex #";^/[^/]+/CoreSimulator/[^/]+$")) 

查看日志的沙箱侵犯然后根据需要添加例外。

+0

谢谢,但是当我把它附加到我的沙盒文件时,它给了我相同的错误。日志中没有任何沙箱违例。由于即使我在沙箱中没有“拒绝”规则,它也不起作用,似乎只是在沙箱中运行它会破坏它。 – sudo

+1

可能无法找到所需的一些文件,因为路径会重新插入到沙箱目录中。您可以检查'fs_usage'来查看它在沙箱下尝试访问的路径。 – russbishop

+0

这很有道理,但是查看'fs_usage',每行包含“Simulator”,“Xcode”或“sandbox”的行都是从'/'中访问的东西,而不是'〜/ Library/Containers/',那里的沙箱根目录是(我看到iWork应用程序访问)。 – sudo