【问题标题】:NSUserScriptTask: accepted file types?NSUserScriptTask:接受的文件类型?
【发布时间】:2013-03-24 19:40:37
【问题描述】:

我正在使用 NSUserScriptTask 运行用户放置在 Application Scripts 目录中的脚本。但是,我发现很难找出 NSUserScriptTask 接受哪些已知类型的脚本,而 docs 也无济于事......有什么想法吗?

到目前为止,我已经尝试过这些:

  • .sh
  • .applescript
  • .scpt
  • .scptd
  • .txt

并且无法让它们中的任何一个工作(initWithURL:error: 方法返回 nil)

编辑: 我忘了包括错误!傻我...这是打印在日志上的内容:

Error Domain=NSCocoaErrorDomain Code=259 "The file “Untitled.applescript” couldn’t be opened because it isn’t in the correct format." UserInfo=0x100121f50 {NSURL=file://localhost/Users/path to file/Untitled.applescript, NSFilePath=/Users/path to file/Untitled.applescript}

【问题讨论】:

  • “无法让……他们工作”是什么意思?
  • @PeterHosey 我用我得到的错误更新了问题

标签: objective-c cocoa appstore-sandbox


【解决方案1】:

The documentation for NSUserScriptTask 声称直接实例化该类将适用于任何有效文件并返回适当类型的任务:

返回的对象将属于特定子类之一(NSUserUnixTaskNSUserAppleScriptTaskNSUserAutomatorTask),如果文件似乎与任何已知类型都不匹配,则为 nil

如果从子类调用,结果将是该类或nil

实际上,我发现(从 10.8.2 开始)NSUserScriptTask 无条件返回 nil 和“这是什么我什至不知道”错误。看来您需要自己实例化正确的任务子类。可能值得filing a bug

要测试文件是否可用作脚本任务(例如,在打开面板验证方法中),我所能建议的就是尝试实例化三个类中的每一个,如果其中任何一个成功,则返回 YES 和 @ 987654330@ 如果全部失败。

【讨论】:

  • 太棒了!这成功了,除了我们现在必须找到接受哪些文件类型......我发现这些是:.applescript .scpt .scptd .workflow,但 .sh 不被 NSUserUnixTask 接受,我不知道是什么。 ..
  • @Alex:见我的最后一段。
  • 是的,我知道,但我想提前告诉用户支持哪些文件类型,我只是想知道您对此是否有任何想法。当然,我将使用您的方法以编程方式测试文件。
  • @Alex:对于 AppleScript 和 Automator 脚本,这很容易。对于 shell 脚本,它可能会简单地接受您有权执行的任何内容,无论是 Mach-O 可执行文件还是具有 shebang,在这种情况下,您可能需要做一些小问题并建议您自己设计的小得多的列表(例如, “.sh, .command, .py, .rb”) 在 Open panel delegate 中进行真正的测试。
  • 我得到一个以 sh 结尾的文件的 NSUserUnixTask 对象,前提是该文件已被标记为可执行文件 (chmod + x)
猜你喜欢
  • 2019-02-10
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多