- 开始前的准备
- 要写一个插件,拢共分 10 步
- 1. 在你的 Sketch Plugins 文件夹中,新建一个文件夹,命名为 MyPlugin.sketchplugin
- 2. 在这个文件夹里,新建一个文件夹叫 Contents
- 3. 在 Contents 文件夹里,新建一个文件夹叫 Sketch
- 4. 新建一个 manifest.json 文件
- 5. 复制以下代码到 manifest.json 并保存
- 6. 新建一个 MyScript.js 文件
- 7. 复制以下代码到 MyScript.js 文件中
- 8. 进入 Sketch 应用,打开或新建一个文件
- 9. 在插件菜单里,找到 MyPlugin>Get Page Names
- 10. 进入你的 Console.app 在底部查看是否有一条 log 记录输出了你的页面名称(Page 1)
- 这就完事了
Sketch 是设计师们依赖的利器,除了本身具备很高效的功能外,它还支持我们为它定制一些插件。那么具体如何开发一个 Sketch 插件呢?今天就试着开发一个插件中的 helloworld 吧。
开始前的准备
在你开始写代码之前,应该先配置好一个方便开发和测试的环境。Sketch 插件的开发,没有专门的 IDE,测试过程也非常繁琐,所以提前做好一些准备能大大提高效率。
0. 开发 Sketch 插件的前提条件
- 有一台运行 macOS 的电脑
- 了解基本的 Sketch 使用方法和概念
- 有不错的 JavaScript 基础
- *有一点 Objective-C 基础就更好了
1. 如果你没有编辑器,搞一个。
编辑器方面见仁见智,常用的有 vscode、sublime、atom 等,当然如果熟练的话 vim 之类的也 ok。之所以用编辑器是因为我们在做 Sketch 开发时通常要用到 CocoaScript,基本没有什么 IDE 对其支持特别好。用能够自己配置定制化的编辑器反而方便一些。
2. 然后,打开你的 Console.app,你会在 debugging 的过程中反复用到它。
mac 中的 Console.app
_Console.app 界面
_
3. Console.app 会被你机器用来做所有的 debugging,所以需要创建一个搜索筛选器。
如果你用的是最新的系统,在筛选器(filter)中输入: Sketch
回车,然后左边选择“进程”(Process)。再做一次,选择“库”(library)。
如果你使用的是 MacOS Sierra, 在筛选器(filter)中输入:
process:Sketch <回车>
library:Sketch <回车>
然后将这个筛选器保存为“Sketch”。
Console 中保存筛选器
如果用的是更早的系统,请自行查阅相关方法。
成功后应该会在界面上某位置看到这个 Sketch 筛选器。
快捷筛选器
4. 将你的 Sketch 插件文件夹保存为 Finder 的收藏书签。
你会经常用到这个文件夹,这个文件夹在 Library 中隐藏会让你每次打开都非常抓狂。
~/Library/Application Support/com.bohemiancoding.sketch3/Plugins
打开这个路径,将文件夹拖到 Finder 收藏栏
现在你可以开始写你的第一个插件了!
要写一个插件,拢共分 10 步
本质上,Sketch 的插件就是一个文件夹,只不过名称加上了 .sketchplugin
的拓展名。
在这个 demo 中,我们使用一个基本的脚本来获取 Sketch 中页面(Page)的名称。
Sketch 插件是用 CocoaScript 写的。CocoaScript 其实就是一种 Objective-C/Cocoa 和 JavaScript 的混合体。主要是能在 Js 里穿插写 Objective-C 代码,对于 Js 基础好的同学来说基本问题不大。
1. 在你的 Sketch Plugins 文件夹中,新建一个文件夹,命名为 MyPlugin.sketchplugin
一旦你为文件夹添加了 .sketchplugin
拓展名,再双击它就不是打开文件夹了,而是直接作为插件安装进 Sketch 里。要想打开文件夹,需要右击-打开包内容。
2. 在这个文件夹里,新建一个文件夹叫 Contents
熟悉 Mac 系统的同学应该知道 app 里面一般都是这么个结构。
3. 在 Contents 文件夹里,新建一个文件夹叫 Sketch
路径状态
在这个 Sketch 文件夹里,你可以开始你的编码了。
至少,你需要包含两个必备的文件: manifest.json
和一个脚本文件。
manifest 文件是一个编组清单,它描述了你的插件,以及你配置的快捷键、额外的脚本等。 manifest.json
的格式和文件名都必须固定是这样,不能换。
而脚本文件是你可以写逻辑代码的地方,每个脚本文件会被 manifest 文件所引用。每个脚本文件的命名可以随你,只要它在 manifest 引用时名称一致。
4. 新建一个 manifest.json 文件
可以直接在编辑器里新建,保存到 MyPlugin.sketchplugin>Contents>Sketch 路径下。
5. 复制以下代码到 manifest.json 并保存
{
"name" : "My Plugin",
"identifier" : "my.plugin",
"version" : "1.0",
"description" : "My First Sketch Plugin",
"authorEmail" : "your@email.com",
"author" : "Your Name",
"commands" : [
{
"script" : "MyScript.js",
"handler" : "onRun",
"shortcut" : "command shift y",
"name" : "Get Page Names",
"identifier" : "my.plugin.pagenames"
}
],
}
配置项都是可以顾名思义的,可以针对你的需要稍作修改。
这时候你打开 Sketch 应该已经可以在插件菜单或者插件管理中找到这个插件了。
6. 新建一个 MyScript.js 文件
同样,可以直接在编辑器里新建,保存到 MyPlugin.sketchplugin>Contents>Sketch 路径下。
7. 复制以下代码到 MyScript.js 文件中
var onRun = function(context) {
//reference the Sketch Document
var doc = context.document;
//reference all the pages in the document in an array
var pages = [doc pages];
//loop through the pages of the document
for (var i = 0; i < pages.count(); i++){
//reference each page
var page = pages[i];
//get the name of the page
var pageName = [page name];
//show the page name in the console
log(pageName);
}
}
如果刚才没有在 Sketch 的插件菜单里找到你的插件,现在肯定可以了。
代码的注释基本解释了原理。
8. 进入 Sketch 应用,打开或新建一个文件
随便新建一个什么文件,用来测试你刚才做的插件。
9. 在插件菜单里,找到 MyPlugin>Get Page Names
点击,这时候你的文件 Pages 的名称应该被读取了,如果是新建的文件,应该是只有一个页面叫 Page 1。
10. 进入你的 Console.app 在底部查看是否有一条 log 记录输出了你的页面名称(Page 1)
最后一条结果,输出了页面名称
这就完事了
这样,你的第一个极简的插件就完成了,走通了。你获取到了页面的名称!
参考文献:https://medium.com/@marianomike/the-beginners-guide-to-writing-sketch-plugins-part-1-28a5e3f01c68