目錄
-
入門
-
高級(jí)
插件是一個(gè)或多個(gè)腳本的集合刨仑。每個(gè)腳本定義一個(gè)或多個(gè)以某種方式擴(kuò)展Sketch的命令怯邪。
在磁盤上,插件是具有.sketchplugin
文件擴(kuò)展名的文件夾盹靴,包含文件和子文件夾玛歌。
嚴(yán)格來說乌逐,插件實(shí)際上是一個(gè)OS X軟件包,被安排為OS X軟件包膨桥。
包是Finder向用戶呈現(xiàn)的任何目錄蛮浑,就好像它是單個(gè)文件一樣(您可以使用Finder中的“ 顯示包內(nèi)容”命令查看內(nèi)部)。
一個(gè)包是一個(gè)具有標(biāo)準(zhǔn)化層次結(jié)構(gòu)的目錄只嚣,該目錄包含可執(zhí)行代碼和該代碼使用的資源陵吸。
Sketch插件不允許本機(jī)編譯代碼,但我們確實(shí)使用標(biāo)準(zhǔn)包布局(例如介牙,資源位于包中的資源/文件夾中)壮虫,特定于插件的文件位于Sketch /目錄中。
插件捆綁文件夾結(jié)構(gòu)
Bundles包含一個(gè)manifest.json
文件,一個(gè)或多個(gè).cocoascript
文件(包含用CocoaScript或JavaScript編寫的腳本)囚似,它們實(shí)現(xiàn)Plugins菜單中顯示的命令以及任意數(shù)量的共享庫腳本和資源文件剩拢。
這是一個(gè)例子:
mrwalker.sketchplugin
Contents/
Sketch/
manifest.json
shared.js
Select Circles.cocoascript
Select Rectangles.cocoascript
Resources/
Screenshot.png
Icon.png
最關(guān)鍵的文件是manifest.json
文件,它告訴Sketch其他所有內(nèi)容饶唤。
表現(xiàn)
清單是一個(gè)JSON文件徐伐,其中包含有關(guān)插件,其命令和資源的元數(shù)據(jù)募狂。
它描述了諸如全名办素,描述和作者姓名等內(nèi)容。它列出了插件定義的任何命令的名稱祸穷,并告訴Sketch調(diào)用相應(yīng)的菜單項(xiàng)以及將它們放入哪個(gè)菜單性穿。
這是一個(gè)例子:
{
"name": "Select Shapes",
"description": "Plugins to select and deselect shapes",
"author": "Joe Bloggs",
"homepage": "https://github.com/example/sketchplugins",
"version": "1.0",
"identifier": "com.example.sketch.shape-plugins",
"appcast": "https://excellent.sketchplugin.com/excellent-plugin-appcast.xml",
"compatibleVersion": "3",
"bundleVersion": 1,
"commands": [
{
"name": "All",
"identifier": "all",
"shortcut": "ctrl shift a",
"script": "shared.js",
"handler": "selectAll"
},
{
"name": "Circles",
"identifier": "circles",
"script": "Select Circles.cocoascript"
},
{
"name": "Rectangles",
"identifier": "rectangles",
"script": "Select Rectangles.cocoascript"
}
],
"menu": {
"items": ["all", "circles", "rectangles"]
}
}
這個(gè)插件被稱為“選擇形狀”。它定義了三個(gè)命令“全部”雷滚,“圓”和“矩形”需曾,它們將被放置在“選擇形狀”菜單中。
這個(gè)插件可以通過Sketch進(jìn)行更新祈远。Sketch將在指定的位置下載文件appcast
并使用它來確定是否有更新呆万。
將此文件進(jìn)一步解壓縮,以下是支持的密鑰及其用途:
name
這個(gè)插件的名稱车份。默認(rèn)情況下谋减,它將用作插件菜單命令出現(xiàn)的子菜單的名稱。
description
描述此插件的命令(或命令)所做的字符串扫沼。
author
指定插件作者的字符串出爹。
authorEmail
指定如何通過電子郵件與插件作者聯(lián)系的可選字符串。
homagepa
可選字符串充甚,指定用戶在線資源以查找更多信息或?yàn)椴寮峁┓答仭?/p>
version
例如以政,一個(gè)字符串,指定插件的語義版本伴找。1.0``1.1.1
identifier
一個(gè)字符串盈蛮,指定插件的唯一標(biāo)識(shí)符。
例如技矮,強(qiáng)烈建議使用反向域語法com.example.sketch.shape-plugins
抖誉。
Sketch在內(nèi)部使用該字符串來跟蹤插件,為其存儲(chǔ)設(shè)置等衰倦。
appcast
指定appcast文件的URL的字符串袒炉。appcast文件包含有關(guān)插件更新的信息,例如可用更新的版本以及可從中下載更新的位置樊零。Sketch下載此文件以確定是否有可用的插件更新我磁。
compatibleVersion
和 maxCompatibleVersion
一個(gè)字符串孽文,指定版本素描在其中作者已測試了插件,例如3
夺艰,3.1
芋哭,3.2.2
。
目前(Sketch3.4)這是一個(gè)可選鍵郁副,但我們可以在插件頁面的某個(gè)時(shí)刻將它用作過濾選項(xiàng)减牺。
它在內(nèi)部使用BCCompareVersions函數(shù)來分割字符串.
,然后比較每個(gè)組件的整數(shù)值存谎。
bundleVersion
元數(shù)據(jù)包的布局版本拔疚。如果排除,則假定值為1既荚。
這只是我們面向未來的機(jī)制稚失。如果將來我們看到bundleVersion> 1的插件,我們就會(huì)知道我們可以以不同的方式處理元數(shù)據(jù)中的其他值固以。
現(xiàn)在可以忽略它墩虹。
disableCocoaScriptPreprocessor
這是一個(gè)高級(jí)設(shè)置嘱巾,默認(rèn)為false
憨琳。設(shè)置true
為時(shí),它將禁用CocoaScript自己的預(yù)處理器旬昭。這樣篙螟,您就可以使用諸如browserify或ES6模塊語法的構(gòu)建系統(tǒng)來開發(fā)您的插件。
將此選項(xiàng)設(shè)置為true
執(zhí)行以下操作:
- 禁用
@import
支持问拘,您必須手動(dòng)處理您的導(dǎo)入 - 禁用括號(hào)語法(即
[obj msg:]
:)遍略,則只能使用點(diǎn)語法
commands
插件定義的一組命令。
數(shù)組中的每個(gè)項(xiàng)目都是一個(gè)字典骤坐,用于指定命令的名稱绪杏,快捷方式和其他屬性。有關(guān)更多詳細(xì)信息纽绍,請參閱插件命令蕾久。
menu
描述此插件中命令的菜單布局的字典。
請參閱插件菜單以獲取有關(guān)該詞典內(nèi)容的更多詳細(xì)信息拌夏,以及如何構(gòu)建每個(gè)插件的菜單僧著。
插件命令
插件定義一個(gè)或多個(gè)用戶執(zhí)行的命令。
清單中的命令數(shù)組描述了這些障簿。數(shù)組中的每個(gè)條目都是一個(gè)字典盹愚,具有以下屬性:
name
命令的顯示名稱。該值在插件菜單中使用站故。
identifier
一個(gè)字符串皆怕,用于指定插件捆綁中命令的唯一標(biāo)識(shí)符。這用于一致地將命令映射到操作,而不考慮命令名稱的變化愈腾。
shortcut
一個(gè)可選的字符串朗兵,指定了該命令的默認(rèn)快捷鍵,例如:ctrl t
顶滩,cmd t
余掖,ctrl shift t
。
script
Sketch
實(shí)現(xiàn)此命令的腳本的插件包文件夾內(nèi)的相對路徑礁鲁。
handler
用腳本調(diào)用此命令的函數(shù)的名稱盐欺。該函數(shù)必須采用單個(gè)context
參數(shù),這是一個(gè)帶有當(dāng)前文檔和選擇項(xiàng)等鍵的字典仅醇。如果未指定冗美,則該命令預(yù)期為onRun
:
var onRun = function (context) {
var doc = context.document;
var selection = context.selection;
…
}
插件菜單
當(dāng)它加載插件時(shí),Sketch為它創(chuàng)建一個(gè)菜單析二,并使用清單文件中“菜單”字典中的信息填充該菜單粉洼。
該字典可以包含以下鍵。
title
指定用于子菜單的標(biāo)題的字符串叶摄。
items
這是一個(gè)列出要包含在菜單中的項(xiàng)目的數(shù)組属韧。
它可以包含兩種類型的項(xiàng)目:
- 一個(gè)給出命令標(biāo)識(shí)符的字符串
- 描述子菜單的字典(包含“標(biāo)題”和“項(xiàng)目”)
isRoot
默認(rèn)情況下,此字典中列出的菜單項(xiàng)將顯示在菜單中蛤吓,其名稱由標(biāo)題鍵指定宵喂。
如果指定了isRoot鍵,并且值為true会傲,則這些項(xiàng)目將插入到插件菜單的根級(jí)別锅棕,而不是插入到子文件夾中。在這種情況下淌山,標(biāo)題密鑰將被忽略裸燎。
這個(gè)鍵在子菜單中被忽略。
菜單示例
這是一個(gè)例子泼疑。它在名為“My Plugin Menu”的菜單中定義了三個(gè)命令德绿。菜單的前兩項(xiàng)對應(yīng)于插件的兩個(gè)命令,但第三項(xiàng)是名為“My Plugin Submenu”的子菜單王浴。這個(gè)子菜單中有一個(gè)項(xiàng)目(插件命令的第三個(gè)項(xiàng)目):
{
"menu": {
"title": "My Plugin Menu",
"items": [
"command1-identifier",
"command2-identifier",
{
"title": "My Plugin Submenu",
"items": ["command3-identifier"]
}
]
}
}
處理程序
插件命令由處理程序?qū)崿F(xiàn)脆炎。
這些只是生活在.cocoascript
Plugin包中的一個(gè)文件中的JavaScript函數(shù),它包含一個(gè)包含某個(gè)上下文的參數(shù)氓辣。
這里有一個(gè)簡單的例子:
var doMyCommand = function(context) {
context.document.currentPage().deselectAllLayers()
}
在清單文件中秒裕,您可以指定一個(gè)描述插件定義的每個(gè)命令的字典。
在這本詞典中钞啸,腳本和處理程序鍵告訴Sketch要查看哪個(gè)腳本文件几蜻,以及要運(yùn)行哪個(gè)處理程序喇潘。
您可以自由地將每個(gè)命令實(shí)現(xiàn)放入其自己的腳本文件中,或?qū)⑺鼈內(nèi)糠湃雴蝹€(gè)文件中梭稚。
您必須為每個(gè)命令指定腳本密鑰颖低。
如果將每個(gè)命令放入其自己的腳本文件中,則可以省略處理程序密鑰弧烤。在這種情況下忱屑,Sketch將默認(rèn)調(diào)用onRun
處理程序。
如果將多個(gè)命令處理程序放入同一個(gè)腳本文件中暇昂,則需要為每個(gè)腳本文件使用處理程序密鑰莺戒,因?yàn)樗鼈儾荒苋渴褂?code>onRun處理程序!