sourcekit - XcodeKit 和 SourceKit

标签 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 仍然是实际的并得到 Apple 的支持吗?

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

    谢谢

    最佳答案

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

  • SwiftSyntax是来自 Apple 的一个新的(测试版)开源框架,用于遍历/修改文档的 AST(抽象语法树)。更多信息和示例请访问 GitHub repository .
  • 如前所述, SourceKitten 是一个用于与 SourceKit 通信的 Swift 库. SourceKit是 Xcode 的支柱,没有它,它实际上只是一个美化的文本编辑器。它提供了从语义分析的子结构和生成的接口(interface)到代码完成和语法高亮的一切——IDE 需要的一切。它是最全面的选择,而且不会很快出现(正如 Maxim 所提到的,Apple 甚至为其开发了 LSP 接口(interface)。) 无耻插件:我进一步开发了 Sylvester 😼,打字,XPC 可用 SourceKitten ( SourceKit ) 与一些糖接口(interface)。 SKEditorOpen request 应该为您提供足够的信息来从源文档中提取您想要的任何内容。
  • XcodeKit 公开了一个极其有限的 API 来与源代码交互。事实上,它只是在编辑器中提供了用户调用命令的打开文档的可变缓冲区。

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

    关于sourcekit - XcodeKit 和 SourceKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54467130/

    相关文章:

    javascript - SourceKit 插件

    objective-c - 构建 SourceKitten 时没有此类模块 SWXMLHash

    xcode7 - Xcode 无法为我自己的框架生成 Swift 表示