XcodeKit и SourceKit

У меня нет опыта работы с XcodeKit и SourceKit, за исключением нескольких статей, которые я прочитал, и официальных страниц https://developer.apple.com/documentation/xcodekit 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

Спасибо

0 ответов

В зависимости от вашей конечной цели у вас есть несколько вариантов:

  • SwiftSyntax это новая (бета) платформа с открытым исходным кодом от Apple для просмотра / изменения AST (абстрактного синтаксического дерева) документа. Более подробная информация и пример доступны в репозитории GitHub.

  • Как уже упоминалось, SourceKitten библиотека Swift для общения с SourceKit, SourceKit это основа Xcode, который на самом деле является просто прославленным текстовым редактором без него. Он предоставляет все - от семантически проанализированных подструктур и сгенерированных интерфейсов до дополнения кода и выделения синтаксиса - все, что нужно IDE. Это наиболее всеобъемлющий вариант, и он никуда не денется в ближайшее время (как отметил Максим, Apple даже разрабатывает для него интерфейс LSP). Бесстыдный плагин: я доработал Sylvester Типизированный, XPC-доступен SourceKitten (SourceKit) интерфейс с небольшим количеством сахара. SKEditorOpen Запрос должен предоставить вам достаточно информации, чтобы извлечь все, что вы хотите из исходного документа.

  • XcodeKit предоставляет чрезвычайно ограниченный API для взаимодействия с исходным кодом. Фактически, он предоставляет только изменяемый буфер открытого документа в редакторе, из которого пользователь вызвал команду.

Что касается вашего запроса на извлечение открытых в данный момент документов в редакторе, единственным вариантом будет использование замечательного скриптового интерфейса, который предоставляет Xcode. Файл Xcode SDEF можно найти по адресу /Applications/Xcode.app/Contents/Resources/Xcode.sdef. Вы можете использовать ScriptingBridge рамки для этого из приложения Какао. Если вы используете Swift, то SwiftScriptingхранилище крайне важно.

Ваш анализ верен, XcodeKit позволяет взаимодействовать с окном редактора и (выделенным) текстом в нем, а SourceKit обладает знанием синтаксиса языка программирования. AFAIK, SourceKit очень жив, и следующая большая вещь будет LSP - https://github.com/apple/sourcekit-lsp

Другие вопросы по тегам