在我的Swift项目中加载本地.scpt文件会导致错误

时间:2018-06-18 04:04:51

标签: swift macos applescript

我正在测试一个Mac应用,尝试加载我的Xcode项目中的test.scpt文件。

let path = Bundle.main.path(forResource: "test", ofType: "scpt")
let url = URL(fileURLWithPath: path!)
let scriptObject = try? NSUserAppleScriptTask(url: url)
scriptObject?.execute { handler in
     print(handler)
}

错误:

  

可选(错误域= NSCocoaErrorDomain代码= 257“该文件   由于您没有权限,“test.scpt”无法打开   看吧。“   的UserInfo = {NSURL =文件:///Users/me/Library/Developer/Xcode/DerivedData/app-gidwjssyedvwuyfcncsjkfroqdjp/Build/Products/Debug/app.app/Contents/Resources/test.scpt,   NSLocalizedFailureReason =脚本文件不在应用程序脚本中   文件夹。})

我尝试创建一个scripts文件夹,在那里移动我的文件并从/scripts/test加载资源,但这也不起作用。

如何加载AppleScript?感谢。

1 个答案:

答案 0 :(得分:1)

错误很明显:

  

脚本文件不在应用程序脚本文件夹中

来自documentation of NSUserAppleScriptTask

  

NSUserAppleScriptTask类旨在从您的应用程序运行AppleScript脚本。它旨在执行用户提供的脚本,并在应用程序的沙箱之外执行它们(如果有的话)。

     

该类不用于执行应用程序中内置的脚本;为此,使用其中一个NSTask类。 如果应用程序是沙盒,则脚本必须位于NSApplicationScriptsDirectory文件夹中。沙盒应用程序可以读取但不写入此文件夹。

     

如果您只需要执行脚本而不考虑输入或输出,请使用NSUserScriptTask,它可以执行任何特定类型。如果您需要对脚本的输入或输出进行特定控制,请使用此类。