XcodeKit и SourceKit - PullRequest
       31

XcodeKit и SourceKit

0 голосов
/ 31 января 2019

У меня нет опыта работы с 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

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

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

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

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

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

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

0 голосов
/ 04 марта 2019

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

...