Appearance
Сгенерированные проекты
Сгенерированные проекты - жизнеспособная альтернатива, которая помогает преодолевать проблемы при сохранении сложности и издержек на приемлемом уровне. Xcode-проекты рассматриваются в качестве основополагающего элемента, для обеспечения устойчивости к будущим обновлениям Xcode, и используемые механизмы генерации проектов Xcode предоставляют модуле-ориентированное декларативное API. Tuist использует объявления проектов для упрощения сложностей модуляризации**, оптимизации рабочих процессов, таких как сборка и тестирование в различных средах, и для облегчения доступности эволюции Xcode-проектов для более широкой аудитории.
Как это работает?
Чтобы начать работу со сгенерированными XCode-проектами, вам нужно определить свой проект с помощью **Предметно-ориентированного языка(DSL) Tuist **. Это подразумевает использование манифест файлов, таких как Workspace.swift
или Project.swift
. Если вы прежде работали с менеджером пакетов Swift, то подход покажется вам очень похож.
После того как вы определили свой проект, Tuist предоставит вам различные процессы для управления и взаимодействия с ним:
- Сгенерировать: Это основной рабочий процесс. Используйте его для генерации проекта совместимого с Xcode.
- Построить: Этот рабочий процесс не только генерирует Xcode проект, но и использует
xcodebuild
для его компиляции. - Тестировать: Рабочий процесс выполняющийся аналогично сборке и использующий
xcodebuild
для тестирования сгенерированного проекта.
Испытания с проектами Xcode
По мере роста Xcode-проектов, организации могут столкнуться с ухудшением производительности из-за нескольких факторов, включая ненадежные инкрементальные сборки, частая очистка глобального кэша Xcode'а разработчиками, сталкивающимися с проблемами, и хрупкими конфигурациями проекта. Для поддержания быстрого развития функционала, организации, как правило, изучают различные стратегии.
Некоторые организации предпочитают обойти компилятор путём абстрагирования платформы с использованием динамические выполняемых сред на основе JavaScript, к примеру React Native. Хотя этот подход может быть эффективным, он усложняет доступ к нативным функциям платформы. Другие организации выбирают модуляризацию кодовой базы, которая помогает установить явные границы, упрощая работу с кодом и улучшая время сборки. Однако, формат проектов Xcode не предназначен для модуляризации, что приводит к появлению неявных конфигураций, которые мало кто может понять и которые часто конфликтуют. Это приводит к Фактору автобуса, и, хотя инкрементальные сборки могут улучшаться, разработчикам все еще может понадобиться очищать кэш сборки Xcode'а (Derived Data) при ошибках сборки. Для решения этой проблемы некоторые организации отказываются от системы сборки Xcode и переходят к альтернативам, таким как Buck или Bazel. Однако это связано с высокой сложностью и необходимостью обслуживания.
Альтернативы
Менеджер пакетов Swift
В то время как Менеджер Пакетов Swift (SPM) фокусируется главным образом на зависимостях, Tuist предлагает другой подход. С помощью Tuist, вы не просто задаете пакеты для интеграции с SPM; вы формируете ваши проекты, используя привычные понятия, такие как project, workspace, target, и scheme.
XcodeGen
XcodeGen - это специализированный генератор проекта, предназначенный для уменьшения конфликтов в Xcode проектах с множеством разработчиков и упрощения некоторых сложностей внутренней работы Xcode'а. Однако, проекты определяются с использованием сериализуемых форматов, таких как YAML. В отличие от Swift, это не позволяет разработчикам использовать абстракции или проверять без дополнительных инструменты. Хотя XcodeGen предоставляет способ сопоставлять зависимости с внутренними представлениями для проверки и оптимизации, он все еще раскрывает разработчикам нюансы Xcode. Это может сделать XcodeGen подходящей основой для создания инструментов, как видно в сообществе Bazel, но это не оптимально для всеохватывающей эволюции проекта, которая направлена на поддержание здоровой и продуктивной среды.
Bazel
Bazel — это продвинутая система сборки, известная своими функциями удаленного кэширования, которая набирает популярность в сообществе Swift в основном из-за этой возможности. Однако, учитывая ограниченную расширяемости Xcode и его системы сборки, замена на Bazel требует значительных усилий и поддержки. Лишь немногие компании, имеющие большие ресурсы, могут позволить эти накладные расходы, что видно из выборочного списка фирм, вкладывающих значительные средства в интеграцию Bazel с Xcode. Интересно, что сообщество создало инструмент, который использует Bazel и XcodeGen для создания Xcode-проекта. Это приводит к запутанной цепочке преобразований: от Bazel файлов к XcodeGen YAML и, наконец, к Xcode-проекту. Такая многослойность часто осложняет поиск проблем, делая их более трудными для решения.