Apple представила новую открытую систему сборки проектов на Swift — Swift Build. Все уже успели обсудить момент с новым IDE (хотя его можно было делать и до этого), но для меня, ключевым нововведением является публичный формат описания Xcode-проекта — Project Interchange Format (PIF), реализованный в SwiftBuild/ProjectModel. Ранее подобная функциональность была доступна только через инструменты вроде XcodeProj, предназначенные для генерации и модификации .xcodeproj файлов.
Пример описания проекта в репозитории swift-build:
public struct Project: Sendable {
public let guid: String
public let isPackage: Bool
public let xcodeprojPath: Path
public let sourceRoot: Path
public let targetSignatures: [String]
public let groupTree: FileGroup
public let buildConfigurations: [BuildConfiguration]
public let defaultConfigurationName: String
public let developmentRegion: String?
public let classPrefix: String
public let appPreferencesBuildSettings: [BuildConfiguration.MacroBindingSource]
}Потенциальные примеры применения:
👉 Автоматизация создания проектов: Разработчики могут создавать скрипты для автоматического генерации Xcode-проектов, используя PIF, что ускоряет настройку новых проектов и уменьшает количество ручных операций.
👉 Интеграция с системами сборки: Инструменты сборки, такие как Tuist или XcodeGen, могут использовать PIF для более эффективного управления зависимостями и конфигурациями проектов.
👉 Анализ и визуализация структуры проекта: С помощью PIF можно разрабатывать инструменты для анализа структуры проекта, выявления потенциальных проблем и визуализации зависимостей между компонентами.
👉 Миграция проектов: При переходе с одной системы сборки на другую PIF может служить промежуточным форматом для облегчения процесса миграции и минимизации ошибок.
👉 Обучающие инструменты: PIF может быть использован в образовательных целях для демонстрации внутренней структуры проектов на Swift, что поможет новичкам лучше понять организацию проектов.
Открытие формата PIF предоставляет разработчикам новые возможности для создания и улучшения инструментов, связанных с управлением и сборкой проектов на Swift.