问题标签 [sdef]

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 投票
1 回答
462 浏览

xcode - 我在哪里可以获得一个好的 SDEF 编辑器?

我正在编写一个目标 C 程序,它需要是可编写的。所以,我需要创建和编辑一个 SDF 文件。如果不需要的话,我宁愿不必编写 XML,所以我希望有人能指点我一个好的编辑器……我找到了 SDEF编辑器,但我想要几个选项玩...

令人惊讶的是,applescript 编辑器本身不允许您编辑 SDEF 文件... hrm...

谢谢

0 投票
1 回答
371 浏览

cocoa - Applescript 不接受 arRsync sdef 命令?

我正在使用名为“arRsync”的 rsync 开源 GUI 前端。它工作得很好,但没有办法自动化它。

我要做的是使用 Applescript 使用以下简单脚本运行预设(您在应用程序中定义):

tell application "arRsync" to runPreset "presetTest1"

问题是 Applescript 认为“runPreset”是一个变量,而不是一个命令。我还尝试了上述的告诉/结束告诉变体,没有骰子。“runPreset”命令是 arRsync.sdef 的一部分

你可以在这里找到 arRsync 项目

我已经尝试在应用程序中打开两个 Info.plist 文件并勾选“可编写脚本”框(或者对于那些没有属性列表编辑器的人将其设置为“真”),但我仍然卡住了。

当谈到 Cocoa 时,我是一个脚本菜鸟:p 帮助将不胜感激

0 投票
1 回答
715 浏览

cocoa - Cocoa NSString 和 AppleScript 文本类型的 AppScript 问题?

在我的一个应用程序中,我document为标准 AppleScript 套件的类添加了一些新属性。其中一些属性具有类型text,另一些具有类型boolean。我编写了一个“sdef”文件并将 if 添加到我的应用程序的资源中。

但是当我启动应用程序时,控制台中有这样的消息:

.sdef 警告套件“标准套件”中类“窗口”的类型“文本”属性“标题”:AppleScript 名称引用可能不适用于此属性,因为它的类型不是 NSString 派生的。

而且,当我实际上尝试text从 AppleScript 中的 type 的此类新属性中获取值时,它将失败。我的应用程序中的正确方法被调用,它返回正确的值NSString,但 AppleScript 返回错误。控制台中再次出现一条消息:

返回脚本命令的结果时出错:结果对象...“请求的 NSString 值”...无法转换为“文本”类型的 Apple 事件描述符。发送 -objectSpecifier 时,类 '__NSCFString' 的这个实例返回 nil(它没有被覆盖吗?)并且没有为脚本类 'text' 声明强制类型。

这可能意味着无法将 CocoaNSString对象转换为 AppleScripttext对象。

当我尝试从一个新的布尔属性中获取值时,它工作得很好。

我究竟需要做什么才能将NSString对象转换为 AppleScripttext对象?

0 投票
1 回答
197 浏览

objective-c - 支持 Applescript 的应用程序和 Cocoa 问题

我将首先说,就 AppleScript 而言,我是一个完整的新手。所以你在这里...

这是我到目前为止所做的:

  • 研究了SimpleScripting的苹果参考资料
  • 实现了一个相同的.sdef文件
  • 设置新属性myname
  • 将主体类(in info.plist)设置为ppApplication(我的主类继承自NSApplication
  • 设置myname属性的访问器

我的 sdef 文件:

我的 ppApplication 类:



现在,这是问题:

当我尝试运行以下脚本时(在AppleScript Editor中)

我收到一个the variable myname is not defined错误。

然而 :

如果我回到 Xcode,构建设置并将产品名称更改为 - 比如说 - myApplicationX 并重新编译,那么上面的代码(将其更改为tell application "myApplicationX")就可以了。

那么,我做错了什么?AppleScript 编辑器是否可能不会与我对应用程序的活动编译“对话”,而是与之前的应用程序“对话”?在不更改产品名称的情况下如何处理这个问题?

0 投票
1 回答
307 浏览

objective-c - Applescript-able Cocoa:引用对象的 NSArray?

好的。所以,让我们说:

  • 我有一个类myCollection、一个类myObject和一个属性objectsmyCollection返回一个NSArrayof myObjects

鉴于我已经为和类正确设置了我的.sdef文件,我应该如何在那里定义我的属性?myCollectionmyObjectobjects

我的意思是,到目前为止,我可以做这样的事情:

我想要的是能够访问myObjects 作为数组的元素:

到目前为止,这是我的 .sdef(几乎......):

我该怎么做呢?

0 投票
2 回答
475 浏览

cocoa - 使用 NSApplicationDelegate 时无法让 Apple 的 SimpleScripting 示例正常工作

我正在尝试编写一个简单的 Objective-C 应用程序:我只想要一个在状态栏中显示一个单词并允许通过 AppleScript 更新该单词的应用程序。老实说,我对 AppleScript 知之甚少,对 Objective-C 也一无所知。但是,这并不难,因为我只花了 2 个小时就获得了一个菜单栏应用程序,该应用程序具有菜单项并响应诸如“退出”之类的核心 AppleScript 命令,所以我已经完成了 95% 的工作。不幸的是,我花了接下来的 6 个小时试图找到一种方法来为这个应用程序提供一个我可以通过 AppleScript 获取和设置的简单属性。

这是我的 .h 代码:

foobaz方法是我用来尝试创建可读属性的方法(*window是 XCode 提供的样板文件的一部分,与手头的问题无关)。这是我的 .sdef 文件:

所以我已经像 Apple 的 SimpleScripting 示例一样设置了它:https ://developer.apple.com/library/mac/#samplecode/SimpleScripting/Introduction/Intro.html

但是,我尝试在脚本编辑器中运行它:

而且我只是得到一个核心属性的列表,没有提及foobaz任何内容,这与 Apple 的示例不同,其中自定义属性在我运行时出现在核心属性旁边。

我觉得我已经尝试了一百种变体并阅读了一百个示例,但无法使任何工作。任何帮助表示赞赏。

0 投票
2 回答
574 浏览

applescript - 如何支持应用程序(NSApp)类的 AppleScript 元素(一对多关系)?

这是我所拥有的:

1)在“Info.plist”中包含正确的“权限”条目

  • “可编写脚本”:是
  • '脚本定义文件名':myApp.sdef

2)在类扩展“元素”标签中包含元素“元素”标签:

3)包括元素类标签:

4)包括将“NSApplication”脚本支持转发给其委托的委托方法:

}

5)创建一个'ObjectItem'类并将对象说明符放在那里:

6) 在应用程序的委托中发布 KVO 访问器方法:

7) 创建一个 AppleScript,它从我的元素 getter 方法返回对象:

8) 结果:错误“未定义变量对象。” “对象”中的数字 -2753

9)把我的头发拉出来

0 投票
0 回答
190 浏览

macos - 在带有键 Key 的 -objectSpecifier 中返回 NSUniqueIDSpecifier 不会导致 valueInWithUniqueID:得到评估

NSUniqueIdentifier 类的参考文档声称唯一 ID 说明符在以下方案中进行评估:

  1. 如果容器实现了一个方法,其选择器与valueIn<Key>WithUniqueID:脚本键值编码建立的相关模式相匹配,则调用该方法。这种方法可能非常快,并且可能相对容易实现。

  2. 与评估任何脚本对象说明符的情况一样,指定对象的容器有机会评估对象说明符。如果容器类实现了该 indicesOfObjectsByEvaluatingObjectSpecifier:方法,则调用该方法。这种方法可能非常快,但实施起来相对困难。

  3. 指定相关“ID”属性与ID匹配的第一个NSWhoseSpecifier对象的对象被合成和评估。该NSWhoseSpecifier对象必须搜索容器中的所有键控元素,寻找匹配项。搜索可能非常慢。

但是,我没有看到valueIn<Key>WithUniqueID:被调用。举个例子,我有一个类,我用以下方式描述对象说明符:

我在容器类中定义- (id)valueInAllObjectsWithUniqueID:(NSString *)uniqueID的方法就是我定义的方法:

在与容器对应的类中,我还重写-respondsToSelector:以进一步调试它,并观察到脚本系统查询的唯一相关方法是indicesOfObjectsByEvaluatingObjectSpecifier:-objectSpecifier上面调用之后(并确认返回带有容器类描述的非零结果和在评估对象说明符后立即与容器的类接收方法调用一致的容器说明符)。

有任何想法吗?这是在 OSX Mavericks (10.9.4) 上。

0 投票
0 回答
161 浏览

applescript - Applescript Sdef:如何定义可分配的命令?

在我的可编写脚本的 Mac 应用程序中,我喜欢使以下语法成为可能:

那可能吗?我将如何在 Sdef 中指定它?

到目前为止,我能想到的唯一方法是使用 name 定义命令set preference with key,但 Apple 的脚本接口指南说,不应以保留名称开始命令,例如setis here。还有其他方法吗?或者在这种情况下使用我的想法是否安全?

目前,我通过使用它来避免这种情况,但我不喜欢这种语法,因为我喜欢更常见的“set”术语:

欢迎提出更好的建议。

0 投票
1 回答
67 浏览

macos - 从 App.sdef 获取当前应用信息

我正在尝试访问有关 Mac 应用程序当前状态的信息,就像我在 linux 上使用 dbus 一样。

我正在尝试使用的应用是 Spotify。我搜索了包内容,发现 /Resources 目录中有一个 Spotify.sdef 文件。我对这些“脚本定义”进行了一些研究,我认为有一种方法可以访问 Spotify.sdef 文件中描述的数据(即标题和艺术家信息)。我可能完全错了,因为我对 Cocoa 开发的经验为零。

如果有人能指出正确的方向来访问我认为可以从应用程序包内容中的“脚本定义”文件访问的数据,我将非常感激。我的最终目标是能够通过一个简单的终端命令查看当前在 Spotify 中播放的歌曲。