4

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

我试图了解两者之间的差异以及他们能够做什么。

我认为 XcodeKit 本质上让您可以向 Xcode 菜单添加命令,并可以通过创建应用扩展来与您打开的源代码进行交互,然后您也可以通过 App Store 分发该扩展。据我所知,XcodeKit 只允许您从当前聚焦的文件(不是项目中的所有文件)中获取信息,然后您可以获得选定的文本等......至少这是我在 Xcode 9 之前阅读的内容,不确定是否事情现在好多了。

SourceKit 也与源代码交互,但看起来更强大但更底层。

我想知道的是:

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

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

谢谢

4

2 回答 2

4

根据您的最终目标,您有几个选择:

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

  • 如前所述,SourceKitten它是一个用于与SourceKit. SourceKit是 Xcode 的支柱,没有它,它实际上只是一个美化的文本编辑器。它提供了从语义分析的子结构和生成的接口到代码完成和语法高亮的一切——IDE 所需的一切。它是最全面的选项,而且不会很快出现(正如Maxim所提到的,Apple 甚至为其开发了LSP接口。)无耻插件:我进一步开发Sylvester了一个类型化的、XPC-available SourceKitten( SourceKit) 接口和一些糖。该SKEditorOpen请求应该为您提供足够的信息以从源文档中提取您想要的任何内容。

  • XcodeKit公开了一个极其有限的 API 来与源代码交互。事实上,它只是在编辑器中提供了用户调用命令的打开文档的可变缓冲区。

至于您在编辑器中检索当前打开的文档的查询,您唯一的选择是使用 Xcode 公开的精彩脚本界面。Xcode SDEF 文件位于/Applications/Xcode.app/Contents/Resources/Xcode.sdef。您可以使用该ScriptingBridge框架从 Cocoa 应用程序中执行此操作。如果您使用的是 Swift,那么SwiftScripting存储库将非常有用。

于 2019-03-04T17:51:10.017 回答
0

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

于 2019-03-04T16:28:28.670 回答