Running a script from within swift app (QLExtension)

I am trying to run a simple bash script from within swift. Eventually it should call a python script, but for now, I am just trying to get it to echo hello.

The script is included in the bundle and also included in the targets. The script is called from the QLExtension. The script is correctly found, but I get an error: Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"

    let scriptPath = Bundle.main.path(forResource: "run_local", ofType: "sh")
    if scriptPath == nil {
        print("script not found or other error")
        return nil
    } 
    
    let process = Process()
    process.executableURL = URL(fileURLWithPath: "/bin/bash")
    process.arguments = [scriptPath!]

    do {
        try process.run()
        process.waitUntilExit()
    } catch {
        print("Failed to run the script: \(error)")
    }

The script, run_local.sh is included in the bundle and is just

#!/bin/bash
echo "hi" > /dev/null

Is this possible? Are there any particular entitlements that I need in order for this to work? Everything else works with this app; this is the only error.

-- The reason I am building this:

  • I use google drive to synchronize files locally. A number of those files do not have a local representation. Google "stores" those files locally using a text file with a document ID (one would open something like docs.google.com/docs/<docID>)
  • I want to be able to preview the google drive files using quicklook
  • One very simple way to do this is to fetch the google drive files (using google drive API) at preview time. I have a python script that can do this and wanted to hook it up to the QLExtension for preview
  • Another option is to keep a separate service running (I would use python) that keeps a local copy of all the synchronized google files. (But then I'll probably need to connect to a local sql database or similar that tells the swift extension the local file math: i.e., effectively a mapping from ID => local_file_path. But perhaps access of this kind to a SQL database is allowed?)

Replies

Can't you use google drive API directly from the QLExtension?

Thanks for bouncing over to DevForums.

As I mentioned on Swift Forums, I don’t think you’ll be able to achieve this goal. Lemme start with a simple question: Does this error generate a sandbox violation report, per Discovering and diagnosing App Sandbox violations.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"