sketch

更多关于CocoaScript

2018-03-21  本文已影响0人  iOSDevLog

目录

  1. 入门

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

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

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

来自CocoaScript的自述文件:

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

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

JavaScript环境

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

话虽这么说,如果你使用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/

上一篇下一篇

猜你喜欢

热点阅读