Swift 从本机osx应用程序调用的Bash脚本产生错误;“不允许操作”; 我想做什么

Swift 从本机osx应用程序调用的Bash脚本产生错误;“不允许操作”; 我想做什么,swift,xcode,bash,macos,Swift,Xcode,Bash,Macos,从本机osx应用程序调用bash脚本,将mac上的本地目录同步到远程服务器 bash脚本使用以下库: 应用程序控制台上的错误消息: watch.sh:第4行:/usr/local/bin/rsync:不允许操作 watch.sh:第6行:/usr/local/bin/fswatch:不允许操作 我所做的 我已经在终端的应用程序外运行了脚本,它工作得很好 我已尝试禁用和启用系统完整性保护,但对错误没有影响 我试着从python脚本调用Bash脚本,它没有任何错误 代码 OSX应用程序代

从本机osx应用程序调用bash脚本,将mac上的本地目录同步到远程服务器

bash脚本使用以下库:

应用程序控制台上的错误消息:

watch.sh:第4行:/usr/local/bin/rsync:不允许操作 watch.sh:第6行:/usr/local/bin/fswatch:不允许操作

我所做的
  • 我已经在终端的应用程序外运行了脚本,它工作得很好
  • 我已尝试禁用和启用
    系统完整性保护
    ,但对错误没有影响
  • 我试着从python脚本调用Bash脚本,它没有任何错误
代码 OSX应用程序代码 Bash脚本
你的应用程序沙盒了吗?@Daskwuff我想这就是问题所在。我不确定如何确切地关闭沙盒模式,但我构建了一个应用程序的发布版本,当在xcode之外运行应用程序时,它似乎可以工作。如果你想发布一个答案,我很乐意接受并结束这个问题。
//////////////////////////////////////////
// FUNCTION - VIEW DID LOAD    
override func viewDidLoad() {
    super.viewDidLoad()

    command(args: "sh","watch.sh")

} // END - FUNCTION


////////////////////////////////////////////
// FUNCTION - COMMAND
func command(args: String...) {

    // GET SCRIPTS PATH
    let scriptsDir = Bundle.main.resourceURL!.appendingPathComponent("scripts").path

    // CREATE A PROCESS INSTANCE
    let process = Process()

    // SET THE PROCESS PARAMETERS
    process.launchPath = "/usr/bin/env"
    process.currentDirectoryPath = scriptsDir
    process.arguments = args

    // CREATE A PIPE AND MAKE THE PROCESS
    // PUT ALL THE OUTPUT THERE
    let pipe = Pipe()
    process.standardOutput = pipe

    // LAUNCH THE PROCESS
    process.launch()

    // GET THE DATA
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)

    print(output!)

} // END - FUNCTION
#!/bin/bash
/usr/local/bin/rsync --rsh="/usr/local/bin/sshpass -p ************* ssh -l username" -azP --delete "/path/to/local" username@111.111.111.111:/path/to/remote

/usr/local/bin/fswatch -o "/path/to/local" | while read f; do

    /usr/local/bin/rsync --rsh="/usr/local/bin/sshpass -p ************* ssh -l username" -azP --delete "/path/to/local" username@111.111.111.111:/path/to/remote

done