XcodeKit和SourceKit

时间:2019-01-31 18:33:12

标签: sourcekit xcodekit

除了我读过的几篇文章和官方页面外,我没有XcodeKit和SourceKit的经验。 https://developer.apple.com/documentation/xcodekit#topics https://github.com/apple/swift/tree/master/tools/SourceKit

我正试图了解两者之间的差异以及它们的功能。

我觉得XcodeKit基本上让你添加命令Xcode的菜单,并能够与源代码交互,你必须创建一个应用程序扩展,然后你可以也通过App Store发布开放。 至于我能理解XcodeKit只让你从当前所关注的文件(不是所有项目中的文件)的信息,那么你可以得到选定的文本等等......至少这是我一直读到的Xcode 9,不知道的事情现在也较好。

SourceKit也可以与源代码交互,但看起来功能更强大,但层次更低。

我想知道的是:

  • SourceKit是否可以访问您在打开的项目中拥有的所有Swift和ObjC类,然后从中提取信息? 例如,假设我要提取诸如结构和类,每个类的方法之类的信息,然后从中生成某种输出。 如何使用SourceKit(或XcodeKit?)来做到这一点?
  • 任何示例链接都很棒!
  • 是SourceKit仍然实际和苹果支持?

https://github.com/apple/swift/blob/master/tools/SourceKit/docs/Protocol.md

谢谢

2 个答案:

答案 0 :(得分:1)

根据最终目标,您可以选择以下几种方式:

  • SwiftSyntax是Apple提供的新的(测试版)开源框架,用于遍历/修改文档的AST(抽象语法树)。 GitHub repository上有更多信息和示例。

  • 如上所述,SourceKitten是用于与SourceKit通信的Swift库。 SourceKit是Xcode的骨干,实际上,Xcode只是没有它的美化文本编辑器。它提供了从语义分析的子结构和生成的接口到代码完成和语法突出显示等所有内容,这是IDE所需的一切。这是最全面的选项,并且很快就不会出现(如Maxim所述,Apple甚至为此开发了一个LSP接口。)无耻的插件:我进一步开发了Sylvester,这是类型化的XPC可用的SourceKittenSourceKit)接口,带有一些糖。 SKEditorOpen请求应为您提供足够的信息,以从源文档中提取所需内容。

  • XcodeKit为与源代码的交互提供了极为有限的API。实际上,它仅在用户从中调用命令的编辑器中提供了打开文档的可变缓冲区。

对于在编辑器中检索当前打开的文档的查询,您唯一的选择是使用Xcode公开的 wonderful 脚本接口。可以在 /Applications/Xcode.app/Contents/Resources/Xcode.sdef 中找到Xcode SDEF文件。您可以使用ScriptingBridge框架在Cocoa应用程序中进行操作。如果您使用的是Swift,那么SwiftScripting存储库将非常有用。

答案 1 :(得分:0)

您的分析是正确的,XcodeKit允许与编辑器窗口及其中的(所选)文本进行交互,并且SourceKit具有编程语言语法的知识。 AFAIK,SourceKit非常活跃,下一个重要的东西将是LSP-https://github.com/apple/sourcekit-lsp