Ответ 1
Сбрасывание АСТ вашего приложения невозможно сделать только из-за изменения
Настройки сборки Xcode. Основная причина этого заключается в том, что Xcode создает
много решений о флажках компилятора передать swiftc
, которые
не все совместимы с сбросом AST, и вы не можете остановить Xcode от
делая это.
Но можно делать вне Xcode с помощью справки Xcode (или в
Xcode, используя мой script, указанный ниже). Для этого вам нужно будет
захватить команду swiftc
Xcode для вашего проекта, а затем
немного измените его, чтобы сбросить AST.
Сначала создайте свой проект, затем перейдите в Навигатор отчетов в Xcode (
последней вкладке в панели "Навигатор" слева). Отсюда либо сохраните
весь журнал сборки с кнопкой сохранения вверху или скопировать
swiftc
непосредственно из Xcode. Вы ищете команду
"Скомпилируйте Swift Sources" для вашего целевого приложения (ПРИМЕЧАНИЕ: это только
содержит команду компиляции для одной цели, если вы хотите, чтобы AST
несколько целей вам потребуется выполнить эти шаги несколько раз). Если
вы не можете найти этот шаг, вам может понадобиться очистить ваш проект и скомпилировать его
снова (или посмотрите на старый журнал построения).
После того, как вы скопировали всю команду swiftc
из Xcode, вам понадобится
чтобы перейти в командную строку и немного изменить команду. Вот что
вам нужно будет сделать:
- Удалить
-emit-dependencies
- Удалить
-emit-module -emit-module-path FILEPATH
- Удалить
-emit-objc-header -emit-objc-header-path FILEPATH
- Удалите
-c
(прямо перед-jN
и список файлов) - Удалить
-parseable-output
- Добавить
-dump-ast
- Добавить
> output.ast 2>&1
в команду оболочки
Почему эти?
- Номера 1, 2, 3 и 4 должны быть удалены, поскольку при сбросе AST
вы также не можете генерировать другой тип файла. Вы можете видеть логику
вокруг этих ошибок в компиляторе Swift с открытым исходным кодом
здесь.
Число 4 является случаем этого, так как
-c
является псевдонимом-emit-object
. - Число 5 облегчает вам перенаправление выхода AST, а также
останавливая
swiftc
от вывода другой информации об этом команда. Если вы планируете анализировать вывод этой команды AST из другая программа вместо перенаправления вывода в оболочку, которую вы может захотеть оставить эту опцию (вы в конечном итоге получаете JSON с ней). - Число 6 - это то, что вызывает команду для вывода AST. В зависимости от того, для чего вы хотите использовать этот вывод, вы можете
также рассмотрите возможность использования
-print-ast
, который печатает большеclass-dump
вывод стиля vs более подробный, классический анализируемый вывод AST-dump-ast
. - Номер 7 - это простое перенаправление оболочки, так что вы можете перенаправить
(возможно, огромный) выход вашего АСТ в один файл. + Изменить
output.ast
в любой файл, который вы хотите. Вам понадобится2>&1
, потому что AST выгружается в stderr вместо stdout. Приказ также имеет значение здесь.
Также обратите внимание, что журнал сборки Xcode экранирует пробелы, но не другие символы
что оболочки могут не нравиться. Например, если у вас есть &
в любом из ваших
путь к папке/каталогам, вам придется скрывать это вручную.
Если все это звучит как слишком много работы, я сбросил вместе script на сделайте эту обработку для вас, и вы можете настроить ее в Xcode. Ты можешь найти на GitHub.