更多关于CocoaScript

目录

  1. 入门

    1. 插件基础
    2. 您的第一个插件
    3. 开发环境
    4. 调试
    5. Action API
    6. 发布插件
  2. 高级

    1. 插件捆绑
    2. 插件,脚本和命令
    3. 插件位置
    4. 更多关于CocoaScript
    5. SketchTool

Sketch插件可以通过Mocha和CocoaScript实现,它允许您使用JavaScript编写的外部脚本使用Objective-C / Cocoa代码。该桥负责JavaScript和Cocoa之间的翻译,因此您可以专注于重要的部分(即使Sketch成为可怕的东西)。

来自CocoaScript的自述文件:

CocoaScript建立在Apple的JavaScriptCore之上,这是与Safari相同的JavaScript引擎。所以,当你在CocoaScript中编写代码时,你确实在编写JavaScript。

CocoaScript还包含一个桥梁,可让您通过JavaScript访问Apple的Cocoa框架。这意味着除了标准JavaScript库之外,您还可以使用许多精彩的类和函数。

JavaScript环境

您的插件脚本不会在浏览器中运行,但会在JavaScriptCore上下文中运行。因此它运行的JavaScript环境有点不常见。

  • 在JavaScript的标准库可用。
  • 其他的都不是。这意味着setTimeoutfetchconsole等都是不可用。
  • NodeJS核心模块不可用。

话虽这么说,如果你使用skpm,它会自动填充工具有些事情你:consolesetTimeoutsetIntervalfetch

访问Cocoa和Sketch API

您可以从CocoaScript访问所有Cocoa和Sketch API。

Objective-C属性的行为与在桥的JavaScript端应该一样。

Objective-C方法作为对象的不透明JavaScript代理的属性公开。

将选择器名称转换为JavaScript属性名称时采取以下步骤:

  • 所有冒号都转换为下划线(最新的下划线是可选的)。
  • 选择器的每个组件都连接成一个没有分隔的字符串。

这样,一个选择器如executeOperation:withObject:error:转换为函数名称executeOperation_withObject_error()

例如,如果你想打开一个File Picker面板,你可以使用NSOpenPanel类:

var openPanel = NSOpenPanel.openPanel()
openPanel.setCanChooseDirectories(false)
openPanel.setCanChooseFiles(true)
openPanel.setCanCreateDirectories(false)
openPanel.setDirectoryURL(NSURL.fileURLWithPath('~/Documents/'))

openPanel.setTitle('Choose a file')
openPanel.setPrompt('Choose')
openPanel.runModal()

如果您需要更多关于Cocoa的信息,请查看参考资料部分。

一些特定的全局变量

指针

对于某些Obj-C选择器,您可能需要传递一个指针。这在JavaScript中不存在,所以有一种全局方法来创建一个:

var ptr = MOPointer.alloc().init()
var ptrToSomething = MOPointer.alloc().initWithValue(something)

长时间运行脚本

如果您的脚本正在进行异步操作,我们需要告诉Sketch保留它并且不要垃圾收集它。

你可以通过访问COScript

COScript.currentCOScript().shouldKeepAround = true

脚本完成其工作后,不要忘记释放它:

COScript.currentCOScript().shouldKeepAround = false

下一步

有关这座桥如何运作的更多信息,请查看Mocha README,它确实是完整的(但需要一些Obj-C的概念)。

原文:https://developer.sketchapp.com/guides/cocoascript/

你可能感兴趣的:(更多关于CocoaScript)