插件干跛,腳本和命令

目錄

  1. 入門

    1. 插件基礎(chǔ)
    2. 您的第一個(gè)插件
    3. 開發(fā)環(huán)境
    4. 調(diào)試
    5. Action API
    6. 發(fā)布插件
  2. 高級(jí)

    1. 插件捆綁
    2. 插件糟趾,腳本和命令
    3. 插件位置
    4. 更多關(guān)于CocoaScript
    5. SketchTool

Sketch中的插件定義了一個(gè)或多個(gè)命令帝蒿,其中Sketch將顯示菜單項(xiàng)。

這些命令中的每一個(gè)實(shí)際上都是作為一個(gè)JavaScript函數(shù)實(shí)現(xiàn)的(我們稱之為處理程序),位于該包中的腳本文件中钓瞭。

每個(gè)腳本可以包含盡可能多的處理程序,并且每個(gè)命令都可以由不同的處理程序?qū)崿F(xiàn)淫奔,因此山涡,無(wú)論您是按照每個(gè)命令安排一個(gè)腳本,還是將所有命令處理程序放在單個(gè)腳本文件中,都由您決定鸭丛。

因此竞穷,要了解如何制作插件,首先需要了解如何編寫Sketch腳本鳞溉。

教你如何編寫JavaScript代碼超出了這些頁(yè)面的范圍瘾带,所以我們假設(shè)你已經(jīng)知道了這一點(diǎn)。如果沒有熟菲,互聯(lián)網(wǎng)上有很多好的學(xué)習(xí)資源看政!

腳本語(yǔ)法

Sketch中的腳本使用CocoaScript編寫。

這是一個(gè)橋梁抄罕,可讓您編寫可調(diào)用本機(jī)Objective-C / Cocoa的JavaScript腳本允蚣。

使用它,你可以用JavaScript編寫你的插件的邏輯贞绵,但是當(dāng)你想讓它做某事時(shí)厉萝,可以調(diào)用實(shí)現(xiàn)Sketch的實(shí)際類和方法恍飘。

基礎(chǔ)如下:

  • 你會(huì)像往常一樣編寫JavaScript代碼
  • 使用橋接器榨崩,您可以從主機(jī)應(yīng)用程序(在本例中為Sketch)或從系統(tǒng)本身獲取Objective-C對(duì)象
  • 基本的Objective-C對(duì)象具有等同的JavaScript(如字符串和數(shù)字),通痴履福可以以與JS版本相同的方式使用
  • 您可以像在JS中一樣讀取和寫入自定義Objective-C對(duì)象的屬性
  • 您可以使用熟悉的JavaScript語(yǔ)法或Objective-C方括號(hào)語(yǔ)法來(lái)調(diào)用自定義Objective-C對(duì)象的方法母蛛。

(有關(guān)更多詳細(xì)信息,請(qǐng)參閱更多關(guān)于CocoaScript頁(yè)面乳怎。)

當(dāng)您的腳本被Sketch調(diào)用時(shí)彩郊,您會(huì)傳遞一些上下文,包括表示當(dāng)前Sketch文檔和選擇的Objective-C對(duì)象蚪缀。

然后秫逝,您可以讀取屬性,執(zhí)行計(jì)算并調(diào)用這些對(duì)象的方法询枚,以完成腳本的目的违帆。

腳本上下文

當(dāng)用戶選擇插件菜單命令時(shí),Sketch會(huì)查找要調(diào)用的處理程序(CocoaScript函數(shù))以及調(diào)用它的腳本文件金蜀。

當(dāng)處理程序被調(diào)用時(shí)刷后,它會(huì)傳遞一個(gè)上下文變量。這包含一些重要的屬性渊抄,您可以使用它們?cè)L問(wèn)您需要的對(duì)象尝胆。

例如,selection屬性為您提供當(dāng)前文檔中選定圖層的列表:

var onRun = function(context) {
  var selection = context.selection
  for (var i = 0; i < selection.count(); i++) {
    var layer = selection[i]
    log('layer ' + layer.name + ' is selected.')
  }
}

Sketch中的所有插件都可以訪問(wèn)以下默認(rèn)變量:

  • commandMSPluginCommand表示當(dāng)前正在執(zhí)行的腳本命令的對(duì)象
  • 文檔MSDocument代表當(dāng)前文檔的對(duì)象
  • pluginMSPluginBundle表示包含當(dāng)前正在執(zhí)行的腳本的插件包的對(duì)象
  • scriptPathNSString包含當(dāng)前正在執(zhí)行的腳本的完整路徑
  • scriptURL:與scriptPath類似护桦,但是作為NSURL對(duì)象
  • 選擇NSArray當(dāng)前文檔中選擇的一個(gè)或多個(gè)圖層; 這個(gè)數(shù)組中的每一項(xiàng)都是一個(gè)MSLayer對(duì)象

嘗試腳本

嘗試簡(jiǎn)單腳本的最簡(jiǎn)單方法是通過(guò)插件>自定義插件...菜單項(xiàng)含衔。

這給你一個(gè)文本字段,你可以輸入你的腳本。

點(diǎn)擊運(yùn)行按鈕將執(zhí)行腳本并在下面板顯示任何輸出或錯(cuò)誤抱慌。

您可以使用此界面進(jìn)行探索和實(shí)驗(yàn)逊桦。

創(chuàng)建一個(gè)插件

一旦你有一個(gè)你想要開發(fā)成適當(dāng)?shù)牟寮哪_本,你可以使用Run Custom Script ...表單中的Save ...按鈕抑进。

這將創(chuàng)建一個(gè)Plugin文件夾(稱為Plugin Bundle)并將腳本保存到其中强经。

生成的插件將具有單個(gè)命令和單個(gè)腳本文件。執(zhí)行該命令將調(diào)用onRun腳本中的函數(shù)寺渗,該函數(shù)將包含您輸入的代碼匿情。

從這個(gè)起點(diǎn)開始,您可以通過(guò)直接編輯文件夾中的文件來(lái)擴(kuò)展您的插件信殊。

你可以添加更多的代碼到你的onRun函數(shù)炬称,添加更多的功能,甚至更多的腳本文件涡拘。

通過(guò)編輯manifest.json插件文件夾中的文件玲躯,您可以自定義命令的名稱,輸入描述鳄乏,甚至可以展開插件以定義多個(gè)命令跷车。

有關(guān)更多信息,請(qǐng)參閱插件包橱野。

原文:https://developer.sketchapp.com/guides/plugin-scripts/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朽缴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子水援,更是在濱河造成了極大的恐慌密强,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜗元,死亡現(xiàn)場(chǎng)離奇詭異或渤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奕扣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門薪鹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人成畦,你說(shuō)我怎么就攤上這事距芬。” “怎么了循帐?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵框仔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拄养,道長(zhǎng)离斩,這世上最難降的妖魔是什么银舱? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮跛梗,結(jié)果婚禮上寻馏,老公的妹妹穿的比我還像新娘。我一直安慰自己核偿,他們只是感情好诚欠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漾岳,像睡著了一般轰绵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尼荆,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天左腔,我揣著相機(jī)與錄音,去河邊找鬼捅儒。 笑死液样,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的巧还。 我是一名探鬼主播鞭莽,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狞悲!你這毒婦竟也來(lái)了撮抓?” 一聲冷哼從身側(cè)響起妇斤,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摇锋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后站超,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荸恕,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年死相,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了融求。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡算撮,死狀恐怖生宛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肮柜,我是刑警寧澤陷舅,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站审洞,受9級(jí)特大地震影響莱睁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一仰剿、第九天 我趴在偏房一處隱蔽的房頂上張望创淡。 院中可真熱鬧,春花似錦南吮、人聲如沸琳彩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汁针。三九已至,卻和暖如春砚尽,著一層夾襖步出監(jiān)牢的瞬間施无,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工必孤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猾骡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓敷搪,卻偏偏與公主長(zhǎng)得像兴想,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赡勘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345