選択アートボードのデータを吐き出すプラグインを作るためのメモ
自分用です

APIの仕様

公式のAPIリファレンス:
https://developer.sketchapp.com/reference/api/
Sketch APIのgithub:
https://github.com/BohemianCoding/SketchAPI
Sketch App API(非公式のObj-cクラスダンプ):
パブリックプロパティやメソッドを確認できます
https://github.com/abynim/Sketch-Headers

Pluginから取得できるSketchのオブジェクトについて

  • require('sketch/dom')から取得したオブジェクトは、 Sketch APIのオブジェクト。
  • context.documentや、context.selectionなど、contextから取得したオブジェクトは、Sketch App APIのオブジェクト

オブジェクト

ツール名 クラス名(Sketch App API)
Artboard MSArtboardGroup
Line MSShapeGroup
Arrow MSShapeGroup
Rectangle MSShapeGroup
Rounded MSShapeGroup
Star MSShapeGroup
Polygon MSShapeGroup
Triangle MSShapeGroup
Vector MSShapeGroup
Pencil MSShapeGroup
Oval MSShapeGroup
Text MSTextLayer
Bitmap MSBitmapLayer
Hotspot MSHotspotLayer
Symbol MSSymbolInstance
Slice MSSliceLayer

サンプルコード

レイヤーを取得する

var layers = symbolMaster.layers();
log(layers);

実行結果

(
    "<MSTextLayer: 0x7fc35ffa7c00> input_TEXT BOX (5B1B913C-E914-4E13-B64E-C0B95B5CF981)",
    "<MSShapeGroup: 0x7fc35ffd47f0> shape (F4CAF400-EFEA-49CA-A111-513D221C2184)"
)

オーバーライド元のシンボルを取得する

var parent = symbol.symbolMaster(); // symbolは、MSSymbolInstance 戻り値は、MSSymbolMaster

シンボルのオーバーライド項目を取得する

var overrides = symbol.overrides(); // symbolは、MSSymbolInstance
log(overrides);

実行結果

{
    "41A74F0C-1BB0-45EA-8309-DE9D7C9D1DB5" =     {
        "BB49DFC7-069E-46D8-B998-EFB77658E5A2" = testtest;
        symbolID = "ADCB6E13-3EAC-4159-9991-501017FFBBC8";
    };
    "98CEA3B9-61AE-4756-A858-CC8096E957D6" =     {
        symbolID = "CF9A2621-1462-4803-B6C0-D498EDFDAF5B"; 
        // シンボルをオーバーライドで選択してる時は、symbolIDが表示される、デフォルトのままで、シンボルを変更してない場合は、表示されないので注意
    };
}

シンボルから、オブジェクトIDのオブジェクトを取得

// targetは、MSSymbolInstance
// layers関数があるオブジェクトなら使えるはず
function findObjectByObjectId(target, objectId) {
  var layers = target.layers();
  var count = layers.count();
  for (var i = 0; i < count; i++) {
    var layer = layers[i];
    if (layer.objectID() == objectId) {
        return layer;
    }
  }
  return null;
}

シンボルから、オーバーライドしたオブジェクト名を表示

// symbolは、MSSymbolInstance
var document = require('sketch/dom').getSelectedDocument();
var overrides = symbol.overrides();
for (var key in overrides) {
  var items = overrides[key];
  if (items['symbolID']) {
    var selectedSymbol = document.getSymbolMasterWithID(items['symbolID']);
    for (var ikey in items) {
      if ('symbolID' != ikey) {
        var overrideObj = findObjectByObjectId(selectedSymbol._object, ikey);
        log('name:' + overrideObj.name());
      }
    }
  } else {
    if (Array.isArray(items)) {
      for (var ikey in items) {
        var overrideObj = findObjectByObjectId(obj.symbolMaster(), ikey);
        log('name:' + overrideObj.name());
      }
    } else {
      var overrideObj = findObjectByObjectId(obj.symbolMaster(), key);
      log('name:' + overrideObj.name());
    }
  }
}
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.