Sketch 插件開發(fā)官方文檔合集

  1. 擴展Sketch

  2. 入門

    1. 插件基礎
    2. 您的第一個插件
    3. 開發(fā)環(huán)境
    4. 調試
    5. ActionAPI
    6. 發(fā)布插件
  3. 高級

    1. 插件捆綁
    2. 插件暑劝,腳本和命令
    3. 插件位置
    4. 更多關于CocoaScript
    5. SketchTool
  4. 資源

  5. 參考

我們努力使Sketch成為夢想中的“設計師工具箱”龟再。但是每個人都有不同的需求鸿染,也許你需要一個我們還沒有實現(xiàn)的功能。不要擔心:插件已經可以滿足您的需求庆寺,或者您可以輕松創(chuàng)建一個插件铭腕。

如果您有興趣擴展Sketch银择,那么您就位于正確的位置。在這里累舷,我們展示Sketch可擴展性文檔的概要以及如何快速構建您的第一個Sketch插件浩考。

如果您只想使用現(xiàn)有的插件,請參閱插件目錄被盈。

你可以用插件做什么怀挠?

Sketch中的插件可以做任何用戶可以做的事情(甚至更多!)害捕。例如:

  • 根據(jù)復雜的規(guī)則選擇文檔中的圖層
  • 操作圖層屬性
  • 創(chuàng)建新圖層
  • 以所有支持的格式導出資產
  • 與用戶交互(要求輸入绿淋,顯示輸出)
  • 從外部文件和Web服務獲取數(shù)據(jù)
  • 與剪貼板交互
  • 操作Sketch的環(huán)境(編輯指南,縮放等...)
  • 通過從插件調用菜單選項來自動化現(xiàn)有功能
  • 設計規(guī)格
  • 內容生成
  • 透視轉換

查看Sketch插件的最簡單方法是通過插件目錄尝盼。您可以瀏覽有用的插件吞滞,安裝它們以嘗試它們,并了解如何將Sketch擴展到您自己的設計場景盾沫。

編寫一個擴展

我們創(chuàng)建了一個小工具鏈裁赠,這使得創(chuàng)建一個新插件變得非常簡單。這對開始非常有用赴精,你也可以找到現(xiàn)有的插件示例佩捞。

擴展程序是用JavaScript編寫的。Sketch提供了一個小型REPL式控制臺蕾哟,您可以在嘗試構建插件之前試用其API一忱。

擴展想法

Sketch功能的許多優(yōu)秀社區(qū)創(chuàng)意可以更好地實現(xiàn)為插件而不是核心產品的一部分。這樣用戶就可以通過安裝正確的插件來挑選他們想要的功能谭确。Sketch團隊在插件請求庫中跟蹤可能的插件為GitHub問題帘营。如果你正在尋找一個偉大的插件來構建,請看看這些問題逐哈。

下一步

  • 您的第一個插件 - 嘗試創(chuàng)建一個簡單的Hello World插件芬迄。
  • 擴展API - 了解Sketch可擴展性API。
  • 擴展示例 - 您可以查看和構建的擴展示例列表昂秃。
  • 開發(fā)者論壇 - 一個論壇禀梳,插件開發(fā)者分享他們關于Sketch的所有知識的知識。

插件基礎


在磁盤上肠骆,插件只是以特定布局排列的文件夾算途。

它包含一個或多個腳本。每個腳本定義一個或多個以某種方式擴展Sketch的命令哗戈。它還可以包含命令用于執(zhí)行任何操作的任何其他可選資源(如圖像)郊艘。

插件腳本使用JavaScript編寫荷科。

術語

在我們進一步討論之前唯咬,讓我們定義一些術語纱注。

  • 插件:一組腳本命令和其他資源組合在一起作為一個獨立單元
  • Plugin Bundle:磁盤上的文件夾胆胰,其中包含組成插件的文件
  • 操作:用戶所做的事情(選擇菜單或更改文檔)觸發(fā)命令
  • 命令:一個插件可以定義多個命令; 通常每一個都與不同的菜單或鍵盤快捷鍵相關聯(lián)狞贱,并導致執(zhí)行不同的處理程序。
  • Handler:執(zhí)行一些代碼來實現(xiàn)Command的函數(shù)蜀涨。
  • 腳本:包含一個或多個實現(xiàn)處理程序命令的一個或多個JavaScript文件瞎嬉。

我如何制作插件?

到現(xiàn)在為止厚柳,你可能想知道如何開始寫你自己的氧枣。

開始使用插件最簡單的方法是打開Sketch,打開文檔并control + shift + k打開Run Script面板别垮。你不需要安裝任何東西; 你可以打開它并在那里實驗便监。如果您想使用真實的開發(fā)環(huán)境(您需要為了分發(fā)插件),請查看開發(fā)環(huán)境頁面碳想。

最小的插件示例如下所示:

export default function(context) {
  context.document.showMessage('Hello, world!')
}

它在Sketch文檔底部呈現(xiàn)一個Toast “Hello烧董,world!”胧奔。

接下來的幾個指南將逐漸向您介紹插件的內部工作逊移。我們將檢查插件的構建塊:清單和腳本。一旦你掌握了它們龙填,你可以創(chuàng)建復雜的插件胳泉!

關于JavaScript的說明

Sketch插件是用JavaScript編寫的袜匿,所以我們假設您對JavaScript語言有基本的了解帖旨。如果您覺得不太自信,我們建議您刷新JavaScript知識垂蜗,以便更輕松地進行跟蹤喘先。

我們還在示例中使用了一些ES6語法钳吟。我們盡量少用,因為它還是比較新的窘拯,但我們鼓勵您熟悉箭頭函數(shù)红且,letconst語句。

該腳本不在瀏覽器或節(jié)點環(huán)境中運行涤姊,而是在每個本機MacOS和Sketch API都暴露的特殊環(huán)境中運行暇番。這是一個先進的,但有必要真正理解如何建立更先進的東西思喊。

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

您的第一個插件


本文檔將帶您創(chuàng)建您的第一個Sketch插件(“Hello World”)壁酬,并將解釋Sketch的基本擴展性概念。

在本演練中,您將向Sketch添加一個新命令舆乔,該命令將顯示一個簡單的“Hello World”消息岳服。在稍后的演練中,您將與Sketch畫布交互并查詢用戶當前選定的圖層希俩。

先決條件

您需要安裝Node.js并且可以使用它$PATH吊宋。Node.js包括npm,Node.js包管理器颜武,它將用于安裝Sketch插件開發(fā)人員的工具鏈璃搜。

生成一個新的插件

將自己的功能添加到Sketch的最簡單方法是通過添加命令。一個命令注冊一個回調函數(shù)鳞上,該函數(shù)可以從插件菜單或鍵綁定中調用这吻。

我們編寫了一個小工具鏈,skpm以幫助您入門篙议。安裝skpm并搭建一個新的插件:

$ npm install -g skpm

$ skpm create my-plugin

$ cd my-plugin

運行你的插件

  • 構建插件: npm run build
  • 啟動Sketch橘原,打開文檔
  • 選擇Plugins> my-plugin>My Command
  • 恭喜!您剛剛創(chuàng)建并執(zhí)行了您的第一個Sketch命令涡上!

插件的結構

運行后趾断,生成的插件應該具有以下結構:

.
├── .gitignore
├── README.md
├── src                         # sources
│   ├── manifest.json           # plugin's manifest
│   └── my-command.js           # source code of the command
├── node_modules
│   └── skpm                    # the sketch plugin developer toolchain
├── my-plugin.sketchplugin      # compilation output, the actual plugin
│   └── Contents
│       ├── Resources
│       └── Sketch
│           ├── manifest.json
│           └── my-command.js
└── package.json

讓我們通過所有這些文件的目的,并解釋他們做了什么:

插件清單: manifest.json

  • 每個Sketch插件必須有一個描述它及其功能的manifest.json文件吩愧。
  • Sketch在啟動過程中讀取此文件芋酌。
  • 請閱讀manifest.json 清單參考以獲取更多信息。

package.json

如果您之前查看過nodejs包雁佳,則必須熟悉它package.json脐帝。它描述了你的包(在這種情況下是插件)的依賴關系,并包含一些關于它的元數(shù)據(jù)糖权。

你會注意到一個特殊的領域:skpm堵腹。你可以在這里指定關于你的插件的元數(shù)據(jù)(而不是在這里manifest.json)。作為一個經驗法則星澳,我通常會manifest.json在將所有其他信息放入時將相關命令的信息放入package.json(skpm將在編譯時將這些信息添加到manifest.json中疚顷,以便您不必復制它們)。

src/my-command.js

這是一個插件命令定義的地方禁偎。它被引用manifest.json并且必須導出一個函數(shù)腿堤。

一個簡單的改變

在中src/my-command.js,嘗試替換命令實現(xiàn)以顯示所選圖層的數(shù)量:

export default function(context) {
  const selectedLayers = context.selection
  const selectedCount = selectedLayers.length

  if (selectedCount === 0) {
    context.document.showMessage('No layers are selected.')
  } else {
    context.document.showMessage(`${selectedCount} layers selected.`)
  }
}

通過運行重新構建插件npm run build如暖。打開一個Sketch文檔笆檀,選擇一些圖層。當您運行my-plugin命令時盒至,您現(xiàn)在應該可以看到所選圖層的數(shù)量酗洒。

專業(yè)提示:您可以通過運行自動重建插件 npm run watch

發(fā)布您的擴展

閱讀關于如何共享插件士修。

下一步

在這個演練中,我們看到了一個非常簡單的插件樱衷。

如果您想更詳細地了解插件API棋嘲,請嘗試以下主題:

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

開發(fā)環(huán)境


如果您花費了開發(fā)Plugins for Sketch的不少重要時間封字,則可以使用這些首選項對工作流程進行一些改進黔州。

由于并非所有Sketch用戶都是插件開發(fā)人員耍鬓,因此在“首選項”面板中為這些首選項設置UI并沒有任何意義。您需要使用Terminal.app來啟用/禁用它們流妻。

為插件定義一個代碼編輯器

有最喜歡的代碼編輯器牲蜀?你可以告訴Sketch使用它來編輯插件。例如绅这,如果你使用[Atom]涣达,(https://atom.io/)你可以這樣做:

$ defaults write ~/Library/Preferences/com.bohemiancoding.sketch3.plist "Plugin Editor" "/usr/local/bin/atom"

并重新啟動Sketch,您會看到一些新的菜單項:

  • 轉到首選項>插件并右鍵單擊任何列出的插件证薇。您將看到一個“編輯代碼...”選項度苔,該選項將啟動編輯器并打開所選的插件代碼。
  • 打開插件菜單浑度,你會看到一個'編輯插件...'選項寇窑,它將啟動你的編輯器并打開整個'插件'文件夾。

調整“自定義插件...”編輯器

要更改“運行腳本...”面板中使用的字體(例如箩张,使用SF Mono)甩骏,可以這樣做:

$ defaults write ~/Library/Preferences/com.bohemiancoding.sketch3.plist scriptEditorFont "SF Mono Light"

要回到默認設置(Andale Mono),只需刪除首選項:

$ defaults delete ~/Library/Preferences/com.bohemiancoding.sketch3.plist scriptEditorFont

要更改編輯器的字體大邢瓤丁(默認值為12)饮笛,請使用

$ defaults write ~/Library/Preferences/com.bohemiancoding.sketch3.plist scriptEditorFontSize 14

監(jiān)聽Action API中的所有操作

警告:這是一項非常昂貴的操作,并且會影響Sketch的性能论熙。請僅在您的開發(fā)系統(tǒng)上使用此功能福青,而不要在客戶的計算機上啟用此功能

當與新的合作操作API脓诡,你可能想(試圖找到時專門聽取多個事件素跺, 事件是您要使用的一個)。

為此誉券,請使用actionWildcardsAllowed首選項指厌。如果設置為YES,則允許腳本為事件注冊通配符處理程序踊跟。這是默認關閉的踩验,它可能會對性能產生不利影響鸥诽,因此請小心處理。

$ defaults write ~/Library/Preferences/com.bohemiancoding.sketch3.plist actionWildcardsAllowed -bool YES

一旦你這樣做了箕憾,你可以通過*在你的handlers.actions對象中添加一個鍵來告訴你的插件為每個操作調用一個方法manifest.json

{
  ...
  "handlers": {
+    "actions": {
+      "*": "onActionHandler"
+    }
  }
  ...
}

運行前始終重新加載腳本

出于性能原因牡借,Sketch會緩存Plugins文件夾的內容。這對用戶來說非常方便袭异,因為插件運行速度非衬屏快,但如果您是開發(fā)人員御铃,則會讓您的生活變得艱難碴里。這就是為什么我們添加了一個首選項來禁用此緩存機制并強制Sketch始終從磁盤重新加載插件的代碼:

$ defaults write ~/Library/Preferences/com.bohemiancoding.sketch3.plist AlwaysReloadScript -bool YES

如果啟用此功能,只要保存腳本上真,就可以在Sketch中進行測試了(再見咬腋,只是為了測試一個小小的改變而重新啟動它)!

請注意睡互,此設置決定了當Sketch為腳本創(chuàng)建新的JavaScript上下文時根竿,腳本的來源是否從光盤重新加載。如果是NO就珠,源會被緩存寇壳,如果是YES,源始終會從光盤重新加載妻怎。

然而壳炎,當一個新的JavaScript上下文產生時,它不會做的事情就會改變蹂季。對于長時間運行的腳本冕广,相同的上下文保存在內存中(它必須是 - 正在運行的腳本正在使用它),直到腳本退出偿洁。因此撒汉,如果您正在測試長時間運行的腳本,您仍然必須找到停止腳本的方法涕滋,以避免上下文丟失(通常意味著重新啟動Sketch或設置coscript.setShouldKeepAround(false))睬辐。

檢查WebView

如果你的插件使用webview,很可能你需要在某個時候檢查它宾肺。

為此溯饵,您需要添加首選項:

$ defaults write com.bohemiancoding.sketch3 WebKitDeveloperExtras -bool true

然后你可以簡單地右鍵點擊你的web視圖并點擊Inspect。檢查員應該出現(xiàn)锨用。

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

調試


開發(fā)Sketch插件時丰刊,您可能需要一些方法來了解代碼運行時發(fā)生了什么。

日志

調試JavaScript代碼最常用的方法是console.log在關鍵步驟中添加一堆增拥。不幸的是啄巧,JavaScriptCore(Sketch插件運行上下文)沒有提供console寻歧。相反,調用的特殊方法log是可用的秩仆。

有幾個選項可以查看這些日志:

  • 打開Console.app并查找Sketch日志
  • 看看這個文件~/Library/Logs/com.bohemiancoding.sketch3/Plugin Output.log
  • 運行skpm log它將輸出上面的文件(skpm log -f對日志進行流式處理)

skpm將填充console以便console.log照常使用码泛。除了使用log場景后面的方法之外,它還會將日志轉發(fā)給sketch-dev-tools澄耍。

debugger 和變量檢查

當插件運行時噪珊,Sketch會創(chuàng)建一個與其關聯(lián)的JavaScript上下文∑肓可以使用Safari檢查此上下文痢站。

在Safari中,轉到Develop> name of your machine> Automatically Show Web Inspector for JSContexts铅搓。而且你可能想要啟用瑟押,Automatically Pause Connecting to JSContext否則檢查器將會關閉搀捷,然后才能與之交互(當腳本運行完成后星掰,上下文將被銷毀)。

現(xiàn)在嫩舟,您可以在代碼中使用斷點氢烘,在運行時檢查變量的值等。

Objective-C類內省(Introspection)

Sketch中的插件系統(tǒng)可讓您完全訪問應用程序的內部結構和macOS中的核心框架家厌。Sketch使用Objective-C構建播玖,其類被橋接到JavaScript。知道你正在處理哪些類以及定義了哪些方法通常很有用饭于。

您可以使用由網橋定義的一些自省方法來訪問這些信息蜀踏。例如:

String(context.document.class()) // MSDocument

var mocha = context.document.class().mocha()

mocha.properties() // array of MSDocument specific properties defined on a MSDocument instance
mocha.propertiesWithAncestors() // array of all the properties defined on a MSDocument instance

mocha.instanceMethods() // array of methods defined on a MSDocument instance
mocha.instanceMethodsWithAncestors()

mocha.classMethods() // array of methods defined on the MSDocument class
mocha.classMethodsWithAncestors()

mocha.protocols() // array of protocols the MSDocument class inherits from
mocha.protocolsWithAncestors()

Sketch的開發(fā)工具

我們創(chuàng)建了一個小的Sketch特定工具來幫助您調試插件,并希望讓您的生活更輕松掰吕。它采用Sketch插件的形式果覆,您可以在此下載并隨其啟動cmd + option + j

原文:https://developer.sketchapp.com/guides/debugging-plugins/

ActionAPI


在Sketch 3.8中殖熟,我們引入了Action API:一種讓插件對應用程序中的事件作出反應的方式局待。使用它,插件作者可以編寫在觸發(fā)某些操作時執(zhí)行的代碼菱属,如“打開文檔”钳榨,“保存”,“添加畫板”......

什么是操作纽门?

操作是應用程序中發(fā)生的事件薛耻,通常是用戶交互的結果。操作有名稱CloseDocument赏陵,DistributeHorizontally或者TogglePresentationMode饼齿,你可以告訴你的插件在這些操作被觸發(fā)時運行代碼愤钾。

我如何注冊我的插件來“聆聽”一個操作?

簡單:你只需在manifest.json你的插件已有的文件中添加一個處理程序候醒。

我們將為該OpenDocument操作添加一個新的處理程序:

"commands" : [
  ...
+  {
+    "script" : "my-action-listener.js",
+    "name" : "My Action Listener",
+    "handlers" : {
+      "actions": {
+        "OpenDocument": "onOpenDocument"
+      }
+    },
+    "identifier" : "my-action-listener-identifier"
+  }
  ...
],

我們告訴我們的插件能颁,我們希望onOpenDocument在文檔打開時運行該功能,所以讓我們將其添加到my-action-listener.js

export function onOpenDocument(context) {
  context.document.showMessage('Document Opened')
}

保存所有內容倒淫,構建插件伙菊,現(xiàn)在,無論何時在Sketch中打開文檔敌土,您都應該看到一個小小的吐司(Toast)橫幅镜硕,上面寫著“文檔已打開”。

操作上下文

當一個操作被觸發(fā)時返干,Sketch可以向目標函數(shù)發(fā)送一些關于操作本身的信息(例如選擇改變時選擇的圖層兴枯,或者打開新文檔時的當前文檔)。我們稱之為操作上下文矩欠,并且可以使用context作為目標函數(shù)的參數(shù)發(fā)送的操作context.actionContext财剖。

但請記住,并非所有操作都會設置Action Context癌淮。事實上躺坟,他們中的大多數(shù)目前都沒有,所以如果您認為您想在Action Context中訪問某些內容乳蓄,請向我們發(fā)送便條咪橙,然后盡快添加。

begin/ finish操作

一些操作(如SelectionChanged)實際上發(fā)生在兩個階段:beginfinish虚倒。如果你想調用一個函數(shù)只對其中的一個美侦,你可以添加一個處理程序SelectionChanged.begin,或SelectionChanged.finish魂奥。如果您不添加任何內容菠剩,該操作將被觸發(fā)兩次。

找到正確的操作

有關API中所有可用操作的列表捧弃,請查看操作參考部分赠叼。

專業(yè)提示:有時瀏覽列表的工作量太大,而您只想要更直接一些违霞。對于這些情況嘴办,您可以聽取所有操作以找到您需要的一個。

再次买鸽,如果有任何事件想要添加到列表中涧郊,請告訴我們,我們將嘗試添加它(由于性能原因眼五,某些事件不在列表中妆艘,例如“圖層被拖動”)彤灶。

下一步

如果您想更詳細地了解Action API,請嘗試以下主題:

原文:https://developer.sketchapp.com/guides/action-api/

發(fā)布插件


Sketch插件列在GitHub存儲庫中。本文檔解釋了如何在那里發(fā)布它以及如何讓Sketch接收插件的更新汽煮。

第一次發(fā)布

Sketch插件列在GitHub存儲庫中:https://github.com/sketchplugins/plugin-directory搏熄。

要將您的插件添加到列表中,請使用關于您的插件的信息打開PR暇赤。合并后心例,您的插件將顯示在此處:https://sketchapp.com/extensions/plugins/

如果您使用skpm,第一次使用插件發(fā)布skpm publish鞋囊,它會自動為您創(chuàng)建PR止后。

發(fā)布更新

從Sketch v45起,Sketch提供了官方支持的機制來更新應用程序中的插件溜腐。

如果您的插件已經內置了自己的更新機制译株,我們鼓勵您轉向使用新系統(tǒng)。這將改善用戶體驗逗扒,因為用戶將能夠在應用程序的“首選項”面板中管理選項卡內的所有已安裝插件古戴。

啟動時欠橘,我們檢查所有安裝插件的更新矩肩,如果有任何問題,我們會在Sketch的窗口上顯示一個徽章肃续。點擊它會讓用戶訪問應用程序的首選項黍檩,在那里他們將能夠更新他們的插件。

目前Sketch只允許用戶更新到最新版本始锚。將來的Sketch版本可能會為用戶提供更多的選項來選擇可以下載和安裝哪個插件版本刽酱。

您有兩種解決方案可以選擇使用此更新機制:

1.使用 skpm

通過運行skpm publish,它會自動發(fā)布插件的更新版本瞧捌,并確保Sketch可以提取它棵里。

2.手動

manifest.json包含在您的插件包中的文件中有一個額外的條目,您需要定義更新才能正常工作姐呐。

該條目被調用appcast殿怜,它是一個指定appcast文件的URL的字符串。

appcast.xml文件

appcast文件包含有關插件更新的信息曙砂,例如可用更新的版本以及可從中下載更新的位置头谜。Sketch下載此文件以確定是否有可用的插件更新。

Appcast符合Sparkle文檔發(fā)布更新頁面中描述的Sparkle定義的appcast 鸠澈。對于Sketch插件柱告,僅支持.zip文件作為附件截驮。

當用于插件時,最小和最大系統(tǒng)版本不涉及操作系統(tǒng)的版本际度。究竟如何將它們用于更高版本的Sketch中仍未確定葵袭。

以下Appcast示例列出了插件的三個不同版本。每個版本都有自己的下載鏈接和簡要說明文字乖菱。

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle"  xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Hello World Sketch Test Plugin</title>
    <link>http://sparkle-project.org/files/sparkletestcast.xml</link>
    <description>Brilliant Hello World Plugin</description>
    <language>en</language>
      <item>
        <title>Version 1.1</title>
        <description>
          <![CDATA[
            <ul>
              <li>Minor update v1.1</li>
            </ul>
          ]]>
        </description>
        <enclosure url="https://brillianthello.sketchplugins.com/files/HelloWorldSketchPluginTestv11.zip" sparkle:version="1.1" />
      </item>
      <item>
        <title>Version 1.2</title>
        <description>
          <![CDATA[
            <ul>
            <li>Minor update v1.2</li>
            </ul>
          ]]>
        </description>
        <enclosure url="https://brillianthello.sketchplugins.com/files/HelloWorldSketchPluginTestv12.zip" sparkle:version="1.2" />
      </item>
      <item>
        <title>Version 2.0</title>
        <description>
          <![CDATA[
            <ul>
            <li>Major update v2.0</li>
            </ul>
          ]]>
        </description>
        <enclosure url="https://brillianthello.sketchplugins.com/files/HelloWorldSketchPluginTestv20.zip" sparkle:version="2.0" />
      </item>
  </channel>
</rss>

在您的插件中實現(xiàn)啟動和關閉方法

如果你的插件做了任何需要初始化的事情眶熬,你應該把這個Startup處理器作為插件的一部分。執(zhí)行Shutdown處理程序也是一樣块请,你應該實現(xiàn)你的插件需要的任何清理代碼娜氏。你可能已經在使用這些事件,但是插件更新比以前更重要墩新。

當插件更新時贸弥,正在更新的版本將發(fā)送該Shutdown操作。新版本將發(fā)送一個Startup操作海渊。

例如绵疲,如果您的插件在Sketch中顯示了一些用戶界面元素,則應刪除Shutdown處理程序中的那些元素臣疑。通過這種方式盔憨,新插件將能夠顯示已更新的用戶界面組件以及所有舊用戶界面元素已被刪除。

對于插件所維護的任何持久數(shù)據(jù)也是如此讯沈。任何未保存的信息應在Shutdown調用時寫入磁盤郁岩。

不要在Startup可以稍后運行的處理程序中包含代碼。

故障排除

所以你已經遵循了所有的步驟缺狠,你的插件還沒有更新问慎?試試這些:

  • 刪除PluginsWarehouse居住的文件夾。這是我們緩存插件下載的地方挤茄,如果您已經測試了不同版本的appcast如叼,那么您可能在那里有一些值得清理的舊東西。~/Library/Application Support/com.bohemiancoding.sketch3/
  • 確保manifest.json您下載的ZIP中有與您的appcast中的版本號相匹配的版本號穷劈。如果appcast表示ZIP包含v1.2笼恰,但實際的ZIP表示它是v1.1,則安裝將不起作用歇终。

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

插件捆綁


插件是一個或多個腳本的集合社证。每個腳本定義一個或多個以某種方式擴展Sketch的命令

在磁盤上练湿,插件是具有.sketchplugin文件擴展名的文件夾脆霎,包含文件和子文件夾船侧。

嚴格來說吉挣,插件實際上是一個OS X軟件包谆刨,被安排為OS X軟件包

包是Finder向用戶呈現(xiàn)的任何目錄,就好像它是單個文件一樣(您可以使用Finder中的“ 顯示包內容”命令查看內部)。

一個包是一個具有標準化層次結構的目錄,該目錄包含可執(zhí)行代碼和該代碼使用的資源榴捡。

Sketch插件不允許本機編譯代碼,但我們確實使用標準包布局(例如朱浴,資源位于包中的資源/文件夾中)吊圾,特定于插件的文件位于Sketch /目錄中。

插件捆綁文件夾結構

Bundles包含一個manifest.json文件翰蠢,一個或多個.cocoascript文件(包含用CocoaScript或JavaScript編寫的腳本)项乒,它們實現(xiàn)Plugins菜單中顯示的命令以及任意數(shù)量的共享庫腳本和資源文件。

這是一個例子:

mrwalker.sketchplugin
  Contents/
    Sketch/
      manifest.json
      shared.js
      Select Circles.cocoascript
      Select Rectangles.cocoascript
    Resources/
      Screenshot.png
      Icon.png

最關鍵的文件是manifest.json文件梁沧,它告訴Sketch其他所有內容檀何。

表現(xiàn)

清單是一個JSON文件,其中包含有關插件廷支,其命令和資源的元數(shù)據(jù)频鉴。

它描述了諸如全名,描述和作者姓名等內容恋拍。它列出了插件定義的任何命令的名稱垛孔,并告訴Sketch調用相應的菜單項以及將它們放入哪個菜單。

這是一個例子:

{
  "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"]
  }
}

這個插件被稱為“選擇形狀”施敢。它定義了三個命令“全部”周荐,“圓”和“矩形”,它們將被放置在“選擇形狀”菜單中悯姊。

這個插件可以通過Sketch進行更新羡藐。Sketch將在指定的位置下載文件appcast并使用它來確定是否有更新。

將此文件進一步解壓縮悯许,以下是支持的密鑰及其用途:

name

這個插件的名稱。默認情況下辉阶,它將用作插件菜單命令出現(xiàn)的子菜單的名稱先壕。

description

描述此插件的命令(或命令)所做的字符串。

author

指定插件作者的字符串谆甜。

authorEmail

指定如何通過電子郵件與插件作者聯(lián)系的可選字符串垃僚。

homepage

可選字符串,指定用戶在線資源以查找更多信息或為插件提供反饋规辱。

version

例如谆棺,一個字符串,指定插件的語義版本1.0``1.1.1

identifier

一個字符串改淑,指定插件的唯一標識符碍岔。

例如,強烈建議使用反向域語法com.example.sketch.shape-plugins朵夏。

Sketch在內部使用該字符串來跟蹤插件蔼啦,為其存儲設置等。

appcast

指定appcast文件的URL的字符串仰猖。appcast文件包含有關插件更新的信息捏肢,例如可用更新的版本以及可從中下載更新的位置。Sketch下載此文件以確定是否有可用的插件更新饥侵。

compatibleVersionmaxCompatibleVersion

一個字符串鸵赫,指定版本素描在其中作者已測試了插件,例如3躏升,3.1奉瘤,3.2.2

目前(Sketch3.4)這是一個可選鍵煮甥,但我們可以在插件頁面的某個時刻將它用作過濾選項盗温。

它在內部使用BCCompareVersions函數(shù)來分割字符串.,然后比較每個組件的整數(shù)值成肘。

bundleVersion

元數(shù)據(jù)包的布局版本卖局。如果排除,則假定值為1双霍。

這只是我們面向未來的機制砚偶。如果將來我們看到bundleVersion> 1的插件,我們就會知道我們可以以不同的方式處理元數(shù)據(jù)中的其他值洒闸。

現(xiàn)在可以忽略它染坯。

disableCocoaScriptPreprocessor

這是一個高級設置,默認為false丘逸。設置true為時单鹿,它將禁用CocoaScript自己的預處理器。這樣深纲,您就可以使用諸如browserify或ES6模塊語法的構建系統(tǒng)來開發(fā)您的插件仲锄。

將此選項設置為true執(zhí)行以下操作:

  • 禁用@import支持,您必須手動處理您的導入
  • 禁用括號語法(即[obj msg:]:)湃鹊,則只能使用點語法

commands

插件定義的一組命令儒喊。

數(shù)組中的每個項目都是一個字典,用于指定命令的名稱币呵,快捷方式和其他屬性怀愧。有關更多詳細信息,請參閱插件命令

menu

描述此插件中命令的菜單布局的字典芯义。

請參閱插件菜單以獲取有關該詞典內容的更多詳細信息哈垢,以及如何構建每個插件的菜單。

插件命令

插件定義一個或多個用戶執(zhí)行的命令毕贼。

清單中的命令數(shù)組描述了這些温赔。數(shù)組中的每個條目都是一個字典,具有以下屬性:

name

命令的顯示名稱鬼癣。該值在插件菜單中使用陶贼。

identifier

一個字符串,用于指定插件捆綁中命令的唯一標識符待秃。這用于一致地將命令映射到操作拜秧,而不考慮命令名稱的變化。

shortcut

一個可選的字符串章郁,指定了該命令的默認快捷鍵枉氮,例如:ctrl tcmd t暖庄,ctrl shift t聊替。

script

Sketch實現(xiàn)此命令的腳本的插件包文件夾內的相對路徑。

handler

用腳本調用此命令的函數(shù)的名稱培廓。該函數(shù)必須采用單個context參數(shù)惹悄,這是一個帶有當前文檔和選擇項等鍵的字典。如果未指定肩钠,則該命令預期為onRun

var onRun = function (context) {
  var doc = context.document;
  var selection = context.selection;
  …
}

插件菜單

當它加載插件時泣港,Sketch為它創(chuàng)建一個菜單,并使用清單文件中“菜單”字典中的信息填充該菜單价匠。

該字典可以包含以下鍵当纱。

title

指定用于子菜單的標題的字符串。

items

這是一個列出要包含在菜單中的項目的數(shù)組踩窖。

它可以包含兩種類型的項目:

  • 一個給出命令標識符的字符串
  • 描述子菜單的字典(包含“標題”和“項目”)

isRoot

默認情況下坡氯,此字典中列出的菜單項將顯示在菜單中,其名稱由標題鍵指定毙石。

如果指定了isRoot鍵廉沮,并且值為true,則這些項目將插入到插件菜單的根級別徐矩,而不是插入到子文件夾中。在這種情況下叁幢,標題密鑰將被忽略滤灯。

這個鍵在子菜單中被忽略。

菜單示例

這是一個例子。它在名為“My Plugin Menu”的菜單中定義了三個命令鳞骤。菜單的前兩項對應于插件的兩個命令窒百,但第三項是名為“My Plugin Submenu”的子菜單。這個子菜單中有一個項目(插件命令的第三個項目):

{
  "menu": {
    "title": "My Plugin Menu",
    "items": [
      "command1-identifier",
      "command2-identifier",
      {
        "title": "My Plugin Submenu",
        "items": ["command3-identifier"]
      }
    ]
  }
}

處理程序

插件命令由處理程序實現(xiàn)豫尽。

這些只是生活在.cocoascriptPlugin包中的一個文件中的JavaScript函數(shù)篙梢,它包含一個包含某個上下文的參數(shù)。

這里有一個簡單的例子:

var doMyCommand = function(context) {
  context.document.currentPage().deselectAllLayers()
}

在清單文件中美旧,您可以指定一個描述插件定義的每個命令的字典渤滞。

在這本詞典中,腳本處理程序鍵告訴Sketch要查看哪個腳本文件榴嗅,以及要運行哪個處理程序妄呕。

您可以自由地將每個命令實現(xiàn)放入其自己的腳本文件中,或將它們全部放入單個文件中嗽测。

您必須為每個命令指定腳本密鑰绪励。

如果將每個命令放入其自己的腳本文件中,則可以省略處理程序密鑰唠粥。在這種情況下疏魏,Sketch將默認調用onRun處理程序。

如果將多個命令處理程序放入同一個腳本文件中晤愧,則需要為每個腳本文件使用處理程序密鑰大莫,因為它們不能全部使用onRun處理程序!

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

插件养涮,腳本和命令


Sketch中的插件定義了一個或多個命令葵硕,其中Sketch將顯示菜單項。

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

每個腳本可以包含盡可能多的處理程序,并且每個命令都可以由不同的處理程序實現(xiàn)悄谐,因此介评,無論您是按照每個命令安排一個腳本,還是將所有命令處理程序放在單個腳本文件中爬舰,都由您決定们陆。

因此,要了解如何制作插件情屹,首先需要了解如何編寫Sketch腳本坪仇。

教你如何編寫JavaScript代碼超出了這些頁面的范圍,所以我們假設你已經知道了這一點垃你。如果沒有椅文,互聯(lián)網上有很多好的學習資源喂很!

腳本語法

Sketch中的腳本使用CocoaScript編寫。

這是一個橋梁皆刺,可讓您編寫可調用本機Objective-C / Cocoa的JavaScript腳本少辣。

使用它,你可以用JavaScript編寫你的插件的邏輯羡蛾,但是當你想讓它做某事時漓帅,可以調用實現(xiàn)Sketch的實際類和方法。

基礎如下:

  • 你會像往常一樣編寫JavaScript代碼
  • 使用橋接器痴怨,您可以從主機應用程序(在本例中為Sketch)或從系統(tǒng)本身獲取Objective-C對象
  • 基本的Objective-C對象具有等同的JavaScript(如字符串和數(shù)字)忙干,通常可以以與JS版本相同的方式使用
  • 您可以像在JS中一樣讀取和寫入自定義Objective-C對象的屬性
  • 您可以使用熟悉的JavaScript語法或Objective-C方括號語法來調用自定義Objective-C對象的方法腿箩。

(有關更多詳細信息豪直,請參閱更多關于CocoaScript頁面。)

當您的腳本被Sketch調用時珠移,您會傳遞一些上下文弓乙,包括表示當前Sketch文檔和選擇的Objective-C對象。

然后钧惧,您可以讀取屬性暇韧,執(zhí)行計算并調用這些對象的方法,以完成腳本的目的浓瞪。

腳本上下文

當用戶選擇插件菜單命令時懈玻,Sketch會查找要調用的處理程序(CocoaScript函數(shù))以及調用它的腳本文件。

當處理程序被調用時乾颁,它會傳遞一個上下文變量涂乌。這包含一些重要的屬性,您可以使用它們訪問您需要的對象英岭。

例如湾盒,selection屬性為您提供當前文檔中選定圖層的列表:

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中的所有插件都可以訪問以下默認變量:

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

嘗試腳本

嘗試簡單腳本的最簡單方法是通過插件>自定義插件...菜單項诅妹。

這給你一個文本字段罚勾,你可以輸入你的腳本。

點擊運行按鈕將執(zhí)行腳本并在下面板顯示任何輸出或錯誤吭狡。

您可以使用此界面進行探索和實驗尖殃。

創(chuàng)建一個插件

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

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

生成的插件將具有單個命令和單個腳本文件。執(zhí)行該命令將調用onRun腳本中的函數(shù)弛秋,該函數(shù)將包含您輸入的代碼蚪战。

從這個起點開始牵现,您可以通過直接編輯文件夾中的文件來擴展您的插件铐懊。

你可以添加更多的代碼到你的onRun函數(shù)邀桑,添加更多的功能,甚至更多的腳本文件科乎。

通過編輯manifest.json插件文件夾中的文件壁畸,您可以自定義命令的名稱,輸入描述茅茂,甚至可以展開插件以定義多個命令捏萍。

有關更多信息,請參閱插件包空闲。

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

插件位置


當Sketch啟動時令杈,它會掃描磁盤上的文件夾以查找插件。

~/Library/Application Support/com.bohemiancoding.sketch3/Plugins

(?這里是你的主文件夾的簡寫碴倾,例如/Users/iosdevlog

您可以輕松訪問此插件文件夾Alt逗噩,方法是打開插件菜單并選擇“顯示插件文件夾”。

安裝插件

如果您雙擊.sketchplugin文件跌榔,Sketch會將其復制到您的Plugins文件夾中异雁。它實現(xiàn)的任何命令應立即顯示在插件菜單中。

或者僧须,您可以通過簡單地將它們自己移動到插件文件夾來安裝插件纲刀。

注意:Sketch也支持使用別名和指向單個插件的鏈接,或支持插件文件夾本身担平。這允許您將它們放置在其他地方(例如示绊,Dropbox文件夾以保持Sketch同步的多個安裝)。

刪除插件

要刪除插件暂论,只需選擇插件>管理插件...菜單選項面褐,選擇要從列表中刪除的插件,然后右鍵單擊插件或單擊齒輪圖標空另,然后選擇卸載“插件名稱”

Uninstall

插件提供的任何命令都將立即從插件菜單中刪除盆耽。

或者,您可以取消選中列表中的任何插件扼菠,以在不卸載它的情況下禁用它摄杂。

原文:https://developer.sketchapp.com/guides/installing-plugins/

更多關于CocoaScript


Sketch插件可以通過MochaCocoaScript實現(xiàn),它允許您使用JavaScript編寫的外部腳本使用Objective-C / Cocoa代碼循榆。該橋負責JavaScript和Cocoa之間的翻譯析恢,因此您可以專注于重要的部分(即使Sketch成為可怕的東西)。

來自CocoaScript的README:

CocoaScript建立在Apple的JavaScriptCore之上秧饮,這是與Safari相同的JavaScript引擎映挂。所以泽篮,當你在CocoaScript中編寫代碼時,你確實在編寫JavaScript柑船。

CocoaScript還包含一個橋梁帽撑,可讓您通過JavaScript訪問Apple的Cocoa框架。這意味著除了標準JavaScript庫之外鞍时,您還可以使用許多精彩的類和函數(shù)亏拉。

JavaScript環(huán)境

您的插件腳本不會在瀏覽器中運行,但會在JavaScriptCore上下文中運行逆巍。因此它運行的JavaScript環(huán)境有點不常見及塘。

  • JavaScript的標準庫可用。
  • 其他的都不是锐极。這意味著setTimeout笙僚,fetchconsole等都是不可用灵再。
  • NodeJS核心模塊不可用肋层。

話雖這么說,如果你使用skpm檬嘀,它會自動填充工具有些事情你:console槽驶,setTimeoutsetIntervalfetch鸳兽。

訪問Cocoa和Sketch API

您可以從CocoaScript訪問所有Cocoa和Sketch API掂铐。

Objective-C屬性的行為與在橋的JavaScript端應該一樣。

Objective-C方法作為對象的不透明JavaScript代理的屬性公開揍异。

將選擇器名稱轉換為JavaScript屬性名稱時采取以下步驟:

  • 所有冒號都轉換為下劃線(最新的下劃線是可選的)全陨。
  • 選擇器的每個組件都連接成一個沒有分隔的字符串。

這樣衷掷,一個選擇器如executeOperation:withObject:error:轉換為函數(shù)名稱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中不存在,所以有一種全局方法來創(chuàng)建一個:

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/

SketchTool


SketchTool是一個與Sketch捆綁在一起的命令行實用程序,它允許您使用Sketch文檔執(zhí)行一些操作距帅,例如檢查它們或導出資產右锨。它還允許您從命令行控制Sketch以執(zhí)行一些操作。

安裝

SketchTool 與Sketch(和Sketch Beta)捆綁在一起锥债。你可以找到它陡蝇。

Sketch.app/Contents/Resources/sketchtool/bin/sketchtool

建議您在Sketch中使用它,而不是將其復制到其他位置哮肚,以便始終使用最新版本(更新Sketch時更新SketchTool,并且您需要使用更新后的版本進行閱讀使用最新版本的Sketch保存的文件)广匙。

注意:SketchTool需要OSX 10.11或更高版本允趟。

重要

SketchTool可以免費使用,但它沒有絕對擔保鸦致。這就是說潮剪,如果您發(fā)現(xiàn)任何錯誤或有任何功能請求,請發(fā)送電子郵件給我們分唾,我們將盡我們所能改善它抗碰。

如果所使用的所有字體已安裝在系統(tǒng)上,SketchTool只能導出文檔绽乔。

請注意弧蝇,Sketch的未來版本將更改文件格式,因此請確保始終運行最新版本的工具折砸。

用法

要了解可用的命令看疗,請運行

$ sketchtool help

看到幫助。

以下是您可以使用SketchTool執(zhí)行的一些示例

轉儲文件

$ sketchtool dump path/to/document.sketch

以JSON格式獲取文檔結構的轉儲睦授。

如果您需要查看文檔的元數(shù)據(jù)两芳,但不想完整轉儲,則可以使用

$ sketchtool metadata path/to/document.sketch

你會得到類似的東西:

{
  "commit" : "b8111e3393c4ca1f2399ecfdfc1e9488029ebe7b",
  "pagesAndArtboards" : {
    "E6890372-BE93-4E4C-ACD1-8F8B10862938" : {
      "name" : "Page 1",
      "artboards" : {
        "214B376A-C4A3-47A9-9B87-DFBC49A6EFE0" : {
          "name" : "Artboard 2"
        },
        "F8FE177A-5D6D-4A37-8BD1-B246A83A9C21" : {
          "name" : "Artboard 1"
        }
      }
    }
  },
  "version" : 97,
  "fonts" : [

  ],
  "compatibilityVersion" : 93,
  "app" : "com.bohemiancoding.sketch3",
  "autosaved" : 0,
  "variant" : "NONAPPSTORE",
  "created" : {
    "commit" : "b8111e3393c4ca1f2399ecfdfc1e9488029ebe7b",
    "appVersion" : "48.2",
    "build" : 47327,
    "app" : "com.bohemiancoding.sketch3",
    "compatibilityVersion" : 93,
    "version" : 97,
    "variant" : "NONAPPSTORE"
  },
  "saveHistory" : [
    "NONAPPSTORE.47327"
  ],
  "appVersion" : "48.2",
  "build" : 47327
}

導出資產

您可以使用SketchTool導出Sketch文檔中的資源去枷。SketchTool可以導出預定義的資源(即:在Sketch UI中可導出的圖層和畫板)或任何你想要的圖層怖辆。

導出畫板

運行

$ sketchtool export artboards path/to/document.sketch

將導出文檔中的所有畫板,無論其可導出狀態(tài)如何删顶。如果畫板已設置為可導出竖螃,則SketchTool將導出所有尺寸和格式。否則翼闹,默認情況下斑鼻,它們將以PNG格式以1x導出,您可以使用命令行選項指定自定義格式或大辛攒:

$ sketchtool export artboards path/to/document.sketch --formats=jpg

您可以一次導出多個格式:

$ sketchtool export artboards path/to/document.sketch -formats = jpg坚弱,png蜀备,svg

要查看SketchTool支持哪些格式,請運行sketchtool list formats荒叶。

要定義大小碾阁,你可以這樣做:

$ sketchtool export artboards path/to/document.sketch --scales=1,2

這會給你1x和2x版本的畫板。

默認情況下些楣,文件被導出到當前文檔老速,但您可以像這樣定義輸出路徑:

$ sketchtool export artboards path/to/document.sketch --output=output/path

如果不想導出所有畫板,可以通過使用圖層ID 的item或items選項來告訴SketchTool要導出的畫板:

$ sketchtool export artboards path/to/document.sketch --item=214B376A-C4A3-47A9-9B87-DFBC49A6EFE0

(獲取美工板的ID绞旅,使用sketchtool metadatasketchtool list artboards)村象。

有關導出畫板時可以執(zhí)行的其他操作的更多信息,請參閱sketchtool help export artboard鹅很。

導出圖層嘶居,切片或頁面

圖層,切片和頁面就像畫板一樣工作促煮,所以您可以閱讀前一節(jié)用'圖層'邮屁,'切片'或'頁面'替換'畫板'

獲取文檔預覽

$ sketchtool export preview path/to/document.sketch

將為您提供文檔中最后編輯頁面的PNG預覽,并將其另存為preview.png菠齿。SketchTool將嘗試渲染100%的預覽佑吝,但如果文檔太大,則會縮小預覽绳匀,使其適合2048 x 2048像素的矩形芋忿。

運行一個插件

SketchTool可以告訴Sketch啟動并運行一個插件。如果您正在持續(xù)集成系統(tǒng)上測試插件襟士,或者您需要自動執(zhí)行無聊任務盗飒,這非常有用。

想象一下陋桂,我們有這個代碼的插件:

context.document.showMessage("Remote plugin running!")

我們從Run Script ...面板中將它保存為'Remote Plugin' 逆趣,然后運行:

$ sketchtool run ~/Library/Application\ Support/com.bohemiancoding.sketch3/Plugins/Remote\ Plugin.sketchplugin com.bohemiancoding.sketch.runscriptidentifier

請注意,這com.bohemiancoding.sketch.runscriptidentifier是Sketch在保存插件時使用的默認命令標識符嗜历,但在您的情況下它可能會有所不同宣渗。如果您只想運行包中的第一個命令,則可以使用""而不是標識符梨州。

SketchTool現(xiàn)在將啟動Sketch痕囱,等待文檔打開,然后運行我們的插件暴匠。Sketch將成為最前端的應用程序鞍恢,但如果您希望它保留在后臺(例如,您正在運行代碼編輯器的測試,并且不希望Sketch捕獲焦點)帮掉,則可以使用該--without-activating選項弦悉。

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

參考


Sketch中的插件系統(tǒng)可讓您完全訪問應用程序的內部結構和macOS中的核心框架。所以你有一個強大的能力來構建幾乎任何東西蟆炊。

然而稽莉,強大的能力有很大的責任,所以你需要在每個Sketch版本中留意你的代碼涩搓。我們會在重構時不時更改Sketch的內部結構污秆,因此您的插件可能會調用一些已重命名或刪除的方法。

我們確實意識到這當然不是理想的昧甘。這就是為什么我們支持內部和插件之間的JavaScript API良拼。我們希望它覆蓋了90%的用例。如果沒有疾层,您可以隨時進入內部将饺,風險自擔。

下面的頁面包含插件可以偵聽的所有操作的簡要說明痛黎,以及一些可以與之交互的關鍵Sketch類。這是JavaScript API刮吧,它在Sketch版本中保持穩(wěn)定湖饱。

盡管我們不打算記錄內部信息,但您可以查看3種信息來源:

  • 官方的AppKit文件:這是建立在Apple框架上的Sketch杀捻。
  • 基礎:更重要的蘋果課程和服務井厌。
  • Sketch Headers(Thanks @abynim):這是Sketch使用的所有類的標題。如果您的插件由于使用了已刪除的方法而與新版本分離致讥,則可以檢查差異以查找替換仅仆。

再一次,最后一個環(huán)節(jié)是自負風險垢袱,我們不會記錄或凍結這些墓拜,但我們希望給你做任何事情的權力。

要了解如何使用這些Objective-C類请契,請查看CocoaScript文檔咳榜。

原文:https://developer.sketchapp.com/reference/

資源


JavaScript

徹徹底底的新手

有經驗的開發(fā)者

Cocoa

  • AppKit是Sketch構建的主要Apple框架之一臣樱。
  • 基礎,更重要的蘋果課程和服務。

CocoaScript

示例插件

第三方插件

工具

  • SketchTool - 用于從.sketch文檔中導出頁面和切片的OS X命令行應用程序柬姚。
  • sketchapp-scripter,由Timur Carpeev創(chuàng)建的一個Atom包庄涡,用于從Atom編輯器運行Sketch腳本量承。
  • class-dump。我們盡力記錄所有內容穴店,但如果您喜歡冒險類型撕捍,則可能需要玩這個游戲。
  • sketchpacks-relay泣洞,sketchpacks忧风。將您的Sketch插件發(fā)布到Sketchpacks插件注冊表。自動為您的Appcast Feed提供原生插件更新球凰。
  • skpm - 用于創(chuàng)建狮腿,制作和發(fā)布Sketch插件的實用程序。

原文: https://developer.sketchapp.com/resources/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末呕诉,一起剝皮案震驚了整個濱河市缘厢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甩挫,老刑警劉巖贴硫,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捶闸,居然都是意外死亡夜畴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門删壮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贪绘,“玉大人,你說我怎么就攤上這事央碟∷肮啵” “怎么了均函?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菱涤。 經常有香客問我苞也,道長,這世上最難降的妖魔是什么粘秆? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任如迟,我火速辦了婚禮,結果婚禮上攻走,老公的妹妹穿的比我還像新娘殷勘。我一直安慰自己,他們只是感情好昔搂,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布玲销。 她就那樣靜靜地躺著,像睡著了一般摘符。 火紅的嫁衣襯著肌膚如雪贤斜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天逛裤,我揣著相機與錄音瘩绒,去河邊找鬼。 笑死带族,一個胖子當著我的面吹牛草讶,可吹牛的內容都是我干的。 我是一名探鬼主播炉菲,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坤溃!你這毒婦竟也來了拍霜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薪介,失蹤者是張志新(化名)和其女友劉穎祠饺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汁政,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡道偷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了记劈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勺鸦。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖目木,靈堂內的尸體忽然破棺而出换途,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布军拟,位于F島的核電站剃执,受9級特大地震影響,放射性物質發(fā)生泄漏懈息。R本人自食惡果不足惜肾档,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辫继。 院中可真熱鬧怒见,春花似錦、人聲如沸骇两。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽低千。三九已至配阵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間示血,已是汗流浹背棋傍。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留难审,地道東北人瘫拣。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像告喊,于是被迫代替她去往敵國和親麸拄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容