Skip to content

Перевод 🌍

Вы можете перевести или улучшить перевод этой страницы.

Внести вклад

Синтезированные файлы

Tuist может генерировать файлы и код во время генерации, чтобы привнести некоторое удобство в управление и работу с проектами Xcode. На этой странице вы узнаете об этой функциональности и о том, как использовать ее в своих проектах.

Целевые ресурсы

Проекты Xcode поддерживают добавление ресурсов к целям. Однако они ставят команды перед некоторыми проблемами, особенно при работе с модульным проектом, в котором исходные тексты и ресурсы часто перемещаются:

  • Непоследовательный доступ во время выполнения: То, где ресурсы оказываются в конечном продукте и как вы получаете к ним доступ, зависит от целевого продукта. Например, если целевой продукт представляет собой приложение, ресурсы копируются в пучок приложения. Это приводит к тому, что код, обращающийся к ресурсам, делает предположения о структуре пучка, что не является идеальным, поскольку усложняет понимание кода и перемещение ресурсов.
  • Продукты, которые не поддерживают ресурсы: Есть некоторые продукты, например статические библиотеки, которые не являются пакетами и поэтому не поддерживают ресурсы. Из-за этого вам придется прибегнуть к другому типу продуктов, например фреймворкам, которые могут добавить некоторые накладные расходы в ваш проект или приложение. Например, статические фреймворки будут статически привязаны к конечному продукту, и фаза сборки потребуется только для копирования ресурсов в конечный продукт. Или динамические фреймворки, когда Xcode скопирует и бинарник, и ресурсы в конечный продукт, но это увеличит время запуска вашего приложения, потому что фреймворк должен загружаться динамически.
  • Подвержены ошибкам во время выполнения: Ресурсы идентифицируются по их имени и расширению (строкам). Поэтому опечатка в любой из них приведет к ошибке времени выполнения при попытке доступа к ресурсу. Это не идеальный вариант, поскольку он не отлавливается во время компиляции и может привести к сбоям в релизе.

Туист решает вышеуказанные проблемы путем синтеза унифицированного интерфейса для доступа к пакетам и ресурсам, который абстрагирует детали реализации.

РЕКОМЕНДУЕТСЯ

Несмотря на то, что доступ к ресурсам через интерфейс, синтезированный Туистом, не является обязательным, мы рекомендуем это делать, потому что так код легче воспринимается, а ресурсы легче перемещаются.

Ресурсы

Tuist предоставляет интерфейсы для объявления содержимого таких файлов, как Info.plist или прав доступа в Swift. Это полезно для обеспечения согласованности между целями и проектами, а также для использования компилятора для выявления проблем во время компиляции. Вы также можете придумать свои собственные абстракции для моделирования содержимого и обмена им между целями и проектами.

Когда ваш проект будет сгенерирован, Tuist синтезирует содержимое этих файлов и запишет их в каталог Derived относительно каталога, содержащего проект, в котором они определены.

::: Совет ГИТИГНОРА ДЕРЕВЯННОЙ ДИРЕКТОРИИ

Мы рекомендуем добавить каталог Derived в файл .gitignore вашего проекта.

:::

Аксессоры бандлов

Tuist синтезирует интерфейс для доступа к пакету, содержащему целевые ресурсы.

Свифт

Цель будет содержать расширение типа Bundle, которое раскрывает пакет:

swift
let bundle = Bundle.module

Objective-C

В Objective-C для доступа к бандлу используется интерфейс {Target}Resources:

objc
NSBundle *bundle = [MyFeatureResources bundle];

ОГРАНИЧЕНИЕ С ВНУТРЕННИМИ ТАРГЕТАМИ

В настоящее время Tuist не генерирует аксессоры ресурсных пучков для внутренних целей, содержащих только исходники Objective-C. Это известное ограничение, отслеженное в issue #6456.

ПОДДЕРЖКА РЕСУРСОВ В БИБЛИОТЕКАХ С ПОМОЩЬЮ БУМАГИ

Если целевой продукт, например библиотека, не поддерживает ресурсы, Tuist включит ресурсы в целевой продукт типа bundle, гарантируя, что они окажутся в конечном продукте и что интерфейс будет указывать на правильный бандл.

Аксессоры ресурсов

Ресурсы идентифицируются по их имени и расширению с помощью строк. Это не идеальный вариант, поскольку он не отлавливается во время компиляции и может привести к сбоям при выпуске. Чтобы предотвратить это, Tuist интегрирует SwiftGen в процесс генерации проекта, чтобы синтезировать интерфейс для доступа к ресурсам. Благодаря этому вы можете уверенно обращаться к ресурсам, используя компилятор для выявления любых проблем.

По умолчанию Tuist включает шаблоны для синтеза аксессоров для следующих типов ресурсов:

Тип ресурсаСинтезированные файлы
Изображения и цветаAssets+{Target}.swift
СтруныStrings+{Target}.swift
Плисты{NameOfPlist}.swift
ШрифтыШрифты+{Цель}.swift
ФайлыFiles+{Target}.swift

Примечание: Вы можете отключить синтез аксессоров ресурсов на основе каждого проекта, передав опцию disableSynthesizedResourceAccessors в опции проекта.

Пользовательские шаблоны

Если вы хотите предоставить собственные шаблоны для синтеза аксессоров к другим типам ресурсов, которые должны поддерживаться SwiftGen, вы можете создать их по адресу Tuist/ResourceSynthesizers/{name}.stencil, где имя - это версия ресурса в верблюжьем регистре.

РесурсыИмя шаблона
строкиСтроки.трафарет
активыАктивы.трафарет
спискиPlists.stencil
шрифтыШрифты.трафарет
coreDataCoreData.stencil
interfaceBuilderInterfaceBuilder.stencil
jsonJSON.stencil
yamlYAML.stencil
файлыФайлы.трафарет

Если вы хотите настроить список типов ресурсов, для которых будут синтезироваться аксессоры, вы можете использовать свойство Project.resourceSynthesizers, передав список синтезаторов ресурсов, которые вы хотите использовать:

swift
let project = Project(resourceSynthesizers: [.string(), .fonts()])

REFERENCE

Вы можете посмотреть на this fixture, чтобы увидеть пример использования пользовательских шаблонов для синтеза аксессоров к ресурсам.

Released under the MIT License.