Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否可以执行macOS应用程序内的二进制文件';s沙箱容器?_Swift_Macos_Process_Appstore Sandbox - Fatal编程技术网

Swift 是否可以执行macOS应用程序内的二进制文件';s沙箱容器?

Swift 是否可以执行macOS应用程序内的二进制文件';s沙箱容器?,swift,macos,process,appstore-sandbox,Swift,Macos,Process,Appstore Sandbox,是否可以执行macOS应用程序沙盒容器中的二进制文件 作为测试,我尝试使用Process()运行PHP二进制文件。当运行在usr/bin/PHP中找到的PHP时,这很好,但是如果我将其复制到应用程序的沙盒容器中,它将不会运行。错误是启动路径不可访问 演示问题的步骤: 将其放入裸沙盒应用程序的ViewController: let path = "/usr/bin/php" let process = Process() process.launchPath = path process.arg

是否可以执行macOS应用程序沙盒容器中的二进制文件

作为测试,我尝试使用
Process()
运行PHP二进制文件。当运行在
usr/bin/PHP
中找到的PHP时,这很好,但是如果我将其复制到应用程序的沙盒容器中,它将不会运行。错误是
启动路径不可访问

演示问题的步骤:

  • 将其放入裸沙盒应用程序的
    ViewController

    let path = "/usr/bin/php"
    
    let process = Process()
    process.launchPath = path
    process.arguments = ["-v"]
    process.launch()
    
  • 控制台中的结果:

    PHP 7.1.16 (cli) (built: Apr  1 2018 13:14:42) ( NTS )
    
  • 将上述代码中的路径更改为:

    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let path = documentsURL.absoluteString + "php"
    print(path)
    
  • 将正确的路径打印到控制台:

  • PHP 7.1.16 (cli) (built: Apr  1 2018 13:14:42) ( NTS )
    
    file:///Users/myuser/Library/Containers/com.domain.SandboxedApp/Data/Documents/php

  • 将PHP二进制文件复制到容器:

    $ cp /usr/bin/php /Users/myuser/Library/Containers/com.domain.SandboxedApp/Data/Documents
    
  • 控制台中产生的错误:

  • PHP 7.1.16 (cli) (built: Apr  1 2018 13:14:42) ( NTS )
    
    2018-07-01 20:08:30.630442+1200沙盒DAPP[43579:20898286]未能在(NSWindow)上设置(contentViewController)用户定义的已检查属性:启动路径不可访问

    为什么
    Process()
    不从容器中运行PHP?为什么会有这么奇怪的错误信息

    (注意,你可能会问我为什么要这样做。有几个原因,例如我想更深入地了解沙箱权限是如何工作的;我想沙箱一个应用程序,它能够运行用户提供的二进制文件,而不是macOS提供的,也不是在应用程序包中分发的-是的,不打算在MAS上分发,我知道这个breaks(他们的条款)