问题标签 [cocoa-scripting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
239 浏览

sketch-3 - Sketch 插件 - NSFileManager contentsOfDirectoryAtPath - 不是一个函数

我正在尝试为 Sketch 制作一个插件,使我能够自动生成多语言资产。

现在,我选择启动该过程的语言文件列表。我使用 NSOpen 面板来选择这些。对于每个语言文件,它会为该语言创建一个新页面,并找到带有特殊标签的文本层,并用翻译后的副本替换副本。

在执行此操作时,我希望它检查另一个文件夹 screenshots/lang 中是否有任何屏幕截图,并存储这些图像的文件路径列表。这就是我现在卡住的地方。

目前我有:

当我尝试以当前状态在草图中运行我的插件时,控制台说:

我已经尝试过查看很多问题,其中列表没有返回,返回 null 等,但我找不到 contentOfDirectoryAtPath 不是函数返回的任何问题。

这是因为它是一个由应用程序运行的插件并且在文件系统中导航是一个安全问题吗?

任何帮助将非常感激。谢谢!

0 投票
2 回答
716 浏览

sketch-3 - 如何使用 Cocoascript 在 Sketch 插件中获取复选框输入?

我有一个 Sketch 插件,它根据用户在画板中的选择生成三个不同的文件。我想让用户通过复选框选择他们实际想要生成的三个文件中的哪一个(而不是总是生成所有三个文件)。

我正在寻找有关如何在警报消息中构建复选框的 Cocoascript 函数(如果存在)的任何参考/帮助,因此当触发插件时,警报将弹出并提供三个选项供用户选择.

0 投票
1 回答
842 浏览

sketch-3 - Sketch 插件开发:将符号导出为 SVG 文本

我有一个将选定符号导出到 Sketch 3 中的 SVG 字符串的工作示例。(基于Sketch 的 GitHub中的此代码)

问题是输出失真,我无法看到故障排除的下一个合乎逻辑的步骤。

编码

在代码的最后一点,str是从符号生成的 SVG 的文本值。

输出

输入符号:

在此处输入图像描述

生成的 SVG 预览:

在此处输入图像描述

生成的 SVG 文本:

想法

如您所见,除了失真之外,输出还很大。至少我相信我需要以某种方式修剪或重新调整符号。我不知道失真是从哪里来的。

修复 SVG 标记本身不是解决方案 - 我想在 Sketch 插件代码中看到解决方案。我发现内部 Sketch 代码的文档很难使用,并且一直是解决这个问题的主要障碍。

0 投票
1 回答
99 浏览

cocoa-scripting - 从 NSAppleEventDescriptor 评估一个 Cocoa Scripting 对象

在我的 sdef 中,我有一个接受“Any”类型参数的命令。

在脚本中,我将引用传递给可编写脚本的对象:

在我的命令处理程序代码中,当获取参数时,我得到一个像这样的对象:

<NSAppleEventDescriptor: 'obj '{ 'form':'ID ', 'want':'Subi', 'seld':10900, 'from':'obj '{ 'form':'ID ', 'want':'Elem', 'seld':10900, 'from':null() } }>

现在,我想将它解析回一个代表“theArg”的实际脚本对象的 NSObject。我怎么做?NSAppleEventDescriptor除了文本、数字和文件引用等简单类型之外,我在 中找不到任何评估函数。

0 投票
1 回答
231 浏览

macos - Cocoa 脚本:接受并返回 NSData

为了在我的可编写脚本的 Mac 应用程序中支持二进制数据交换,如果可能的话,我希望使用 AS-ObjC 桥接器以 NSData 的形式接收和传递数据。

例如,我喜欢在 AppleScript 中使这段代码成为可能:

sdef 包含一个值类型和属性:

然后我将转换处理程序实现为 的扩展NSData,类似于 Sketch 示例如何将 NSColor 转换为值类型“RGB Color”:

描述的描述是:

同样,调用[NSScriptObjectSpecifier _scriptingSpecifierWithDescriptor:descriptor]也返回 NULL。

那么,如何在我的应用程序代码中获取实际的 NSData 对象?

以及如何将 NSData 对象返回给 AppleScript?

0 投票
2 回答
282 浏览

cocoa - 以编程方式启用(或禁用)应用程序的 AppleScript 支持

我有一个 App Store 应用程序,其中免费版不可编写脚本,但高级版可编写脚本。AppleScript 支持是主要区别之一。我知道 App Store 的评论者越来越倾向于免费 + 应用内购买,这将有助于清理 App Store。好吧,我会打球。

现在我需要以编程方式做一些我一直只是在构建中工作的事情。

  • 如果 my和设置在 my 中,有没有办法禁用AppleScript ?这仍然允许人们打开字典,也许他们会喜欢他们看到的内容并考虑激活升级。或者,OSAScriptingDefinitionNSAppleScriptEnabledInfo.plist

  • 事后有没有办法启用AppleScript ?显然,通过代码签名,我无法修改 Info.plist 或稍后将我的 SDEF 添加到包中。但也许如果 SDEF 位于非标准位置,我可以从包中加载它并手动告诉系统它。

SDEF 是否必须存在于我的捆绑包中?如果不是,我不确定如何在沙箱中指向用户的应用程序支持目录。我还考虑过 xinclude 一个我可以在事后安装的 SDEF,但同样,SDEF 和 plist 需要实际的目录路径而不是函数。

我尝试了一些方法,例如尝试将 NSScriptSuiteRegistry 的单例设置为 nil,但没有效果。

因为OSAScriptingDefinitionNSAppleScriptEnabled启用“自动”支持,如果不在 plist 中,肯定必须有一种手动方式使它们生效,并希望使用公共 API。

这里有什么想法吗?谢谢!