Swift 6.4: сборка SwiftPM изменилась? Нужно ли мигрировать iOS-проект (2026)
Swift 6.4 меняет систему сборки, используемую SwiftPM по умолчанию, но это не означает, что iOS-приложение нужно немедленно переводить на другой процесс сборки. Если приложение собирается и запускается через Xcode, сначала проверьте существующий путь; если проект запускает SwiftPM-команды самостоятельно, проверьте их в новом инструментальном окружении до изменения скриптов и CI.
Этот разбор для независимых разработчиков, которые поддерживают iOS-приложения и подключают пакеты через Xcode. Он также пригодится владельцам отдельных Swift Package, командных утилит и небольших конвейеров сборки, где фактически выполняются команды SwiftPM.
Последнее обновление: 18 октября 2026 года. Сведения сверены с объявлением Swift 6.4 на Swift.org, требованиями Apple к Xcode и заметками к выпуску Xcode 27.1. Для конкретного проекта вывод зависит от его команд, зависимостей и среды CI.
Что означает новая сборка SwiftPM — и чего она не меняет
Swift.org указывает в официальном объявлении Swift 6.4, что SwiftPM теперь использует Swift Build по умолчанию. Это относится к выбору системы сборки внутри SwiftPM. Из этого не следует, что открытый в Xcode iOS-проект сам переключился на другой механизм или что его схемы, Archive и публикация требуют автоматической миграции. Проверять нужно фактические команды и результаты проекта, а не только название новой системы.
Здесь важно разделить три процесса, которые в обсуждениях часто называют одним словом «сборка»:
- Сборка SwiftPM. Команды
swift buildиswift testзапускают задачи менеджера пакетов. Если именно эти команды используются в терминале или автоматизации, изменение поведения SwiftPM может относиться к этому участку. - Сборка проекта в Xcode. Проект может разрешать Swift Package как зависимость и собираться по схеме Xcode. Для схем, конфигураций и действий над проектом Apple публикует отдельную документацию по настройке схем сборки Xcode. Наличие Swift Package в проекте само по себе не доказывает, что вся сборка выполняется командой
swift build. - Приёмка приложения. Успешная компиляция ещё не означает, что приложение запускается, проходит тесты, архивируется и готово к распространению. Для проверки этапа Archive и доставки ориентируйтесь на фактический сценарий проекта и документацию Apple о распространении приложений из Xcode.
Сведения о версиях тоже требуют точного прочтения. На странице системных требований Apple указано, что Xcode 27.1 использует Swift 6.4; сама версия инструментария не доказывает, какой именно путь сборки запускает конкретный проект. Сверьте установленный Xcode с требованиями Apple и заметками к его выпуску, а затем проверьте конфигурацию проекта.
Swift.org также публиковал отдельное объявление Swift 6.4.1. При проверке фиксируйте фактически доступный компилятор и инструментарий, а не записывайте только «Swift 6.4»: для воспроизводимого результата важны конкретная среда и команды, которыми выполнялась работа.
Приложение, управляемое через Xcode, — и отдельные команды SwiftPM
Если Xcode управляет схемой проекта, разработчик выбирает приложение и конфигурацию, а тестирование и запуск выполняются из Xcode, не стоит менять процесс только из-за изменения SwiftPM. Сначала подтвердите, что обычные действия проекта по-прежнему проходят: разрешение пакетов, сборка нужной схемы, запуск тестов и формирование требуемого результата.
Проверьте, не добавлен ли параллельный путь, который не виден при сборке кнопкой в Xcode. Например, скрипт может выполнять swift build перед запуском xcodebuild, CI может проверять пакет отдельно, а локальная инструкция — требовать swift test. В таком случае вопрос не в том, «использует ли проект SwiftPM вообще», а в том, какой компонент запускает SwiftPM-команды и какие файлы или статусы ждут от них следующие шаги.
Для проверки Xcode зафиксируйте схему и конфигурацию, выбранный destination и полную команду, если сборка запускается из терминала. Например:
xcodebuild -list -project App.xcodeproj
xcodebuild -scheme App -destination 'generic/platform=iOS' build
App.xcodeproj и App здесь — примеры, их нужно заменить путями и схемой конкретного проекта. Если проект организован через workspace, укажите его фактический файл workspace вместо параметра -project. Не переносите пример в CI без сверки с настройками репозитория: важна именно команда, которой проект уже собирался.
После проверки соберите приложение обычным для команды способом и отдельно проверьте действия, на которые полагается процесс выпуска. Например, если pipeline формирует Archive, проверьте Archive и его дальнейшую обработку, а не только компиляцию цели. Если CI отправляет результат на следующий этап, убедитесь, что там по-прежнему находятся ожидаемые файлы. Общие рекомендации Apple по сборке приложений и Swift-пакетов в CI полезны как ориентир, но не заменяют проверку собственного workflow.
Отдельный Swift Package — и пакет внутри приложения
Для самостоятельного пакета важнее не то, подключён ли он когда-нибудь к приложению, а то, выполняют ли его сборку и тестирование именно командами SwiftPM. Если выполняют, изменение SwiftPM непосредственно относится к проверяемому пути. Начните с manifest, структуры зависимостей и набора команд, которые реально нужны потребителям пакета.
Сверьте Package.swift с правилами описания пакетов и используемым swift-tools-version: официальная документация Swift объясняет формат описания Package.swift и версии инструментов. Не меняйте значение swift-tools-version только ради совпадения с установленным компилятором. Это отдельная настройка manifest; её последствия следует оценивать по требованиям пакета, а не по одному факту обновления SwiftPM.
Прогон можно начать с команд, предназначенных для описания пакета, сборки и тестирования:
swift package describe
swift build
swift test
Запускайте их в каталоге нужного пакета и в том окружении, где ожидается работа. Зафиксируйте исходный код возврата каждой команды. Если swift package describe успешно завершился, это подтверждает, что команда смогла прочитать описание пакета, но не доказывает, что все цели, плагины и пользовательские действия собираются и дают нужный результат.
В выводе обратите внимание на то, что следует за компиляцией. Пакет может содержать исполняемые цели, тесты, плагины или действия, на которые полагается последующий скрипт. Если после успешного swift build другая часть процесса копирует, переименовывает или анализирует файлы, проверьте и её. Не объявляйте поддержку всех задач только по одной удачной команде или по одному локальному запуску.
Для сравнения сохраните вывод в отдельных файлах:
swift build 2>&1 | tee build.log
swift test 2>&1 | tee test.log
Такой пример показывает способ сохранить текст команд. Он не является образцом ожидаемого вывода и не задаёт критерий совместимости. Сравнивайте логи и создаваемые файлы с результатом прежней среды, если он сохранён. Если исходных журналов нет, зафиксируйте текущую проверку как новую точку отсчёта — не приписывайте различия, которые невозможно подтвердить.
Командная строка и CI — и реальная последовательность автоматизации
В автоматизации отдельные действия часто разбросаны по разным местам: конфигурации CI, shell-скриптам, настройкам Xcode и командам, которые запускаются после сборки. Поэтому сначала составьте перечень реально исполняемых команд. Проверяйте не только явный swift build: проект может отдельно разрешать зависимости, запускать тесты пакета, исполнять плагины или готовить артефакты для следующего шага.
Для каждого действия ответьте на практические вопросы:
- Какой Xcode или другой Swift-инструментарий предоставлен runner-у?
- Запускает задачу SwiftPM или
xcodebuild? - Какие параметры командной строки и переменные окружения передаются?
- Что считается успешным результатом: код завершения, журнал, каталог сборки или конкретный артефакт?
- Какие команды запускаются после сборки и читают её результат?
Не считайте установленную версию Xcode достаточным описанием среды. Зафиксируйте, что именно вызывается в workflow и откуда берётся команда swift. Затем сопоставьте запуск CI с локальной проверкой на том же репозитории. Если команды различаются, сначала найдите разницу в инструментарии или параметрах. Замена всего pipeline до такой проверки может усложнить диагностику и скрыть исходное место проблемы.
Проверьте отдельно холодный запуск и сценарий с уже разрешёнными зависимостями, если оба встречаются в рабочем процессе. Важно не приписывать возможное изменение SwiftPM сетевому этапу, кэшированию или настройкам runner-а без данных из журнала. Также проверьте сценарии, которые запускаются после компиляции: тестирование, упаковку, Archive или передачу файлов. Порядок этих этапов нужно брать из собственного workflow, а не угадывать по тому, что сборка приложения завершилась успешно.
Если команда не может получить воспроизводимый результат в текущем CI, оцените, нужен ли отдельный macOS-узел для проверки конкретных команд SwiftPM и Xcode. Сведения о доступе к удалённому Mac для сборочных задач пригодятся для оценки такого варианта, но сами по себе не подтверждают совместимость проекта: её по-прежнему устанавливают по журналам и результатам вашего workflow.
Статус «сборка прошла» подтверждает только конкретную команду и конкретное окружение. Если публикация зависит от Archive, скрипта или результата SwiftPM, каждый такой этап нужно проверять отдельно.
Кроссплатформенный пакет — и пределы проверки
Если пакет предназначен для нескольких платформ, проверяйте каждую поддерживаемую цель тем путём, которым её действительно собирают и тестируют. Успех на macOS не доказывает, что тот же пакет корректно соберётся для iOS или другой заявленной платформы. И наоборот, успешная сборка приложения в Xcode не подтверждает результат отдельного запуска SwiftPM в macOS-окружении.
Разделите приёмку по задачам: какие цели компилируются, какие тесты исполняются, какие скрипты или плагины участвуют и где появляются результаты. Сверяйте эти проверки с реальными настройками пакета и его зависимостей. Документация SwiftPM описывает работу менеджера пакетов, но не может подтвердить совместимость не проверенной вами комбинации платформ, целей и пользовательских действий.
Если часть целевых окружений недоступна в текущем CI, отмечайте её как непроверенную, а не как совместимую по умолчанию. Это особенно важно, когда автоматизация выполняется только на macOS, а сам пакет декларирует использование на других платформах: наличие общего исходного кода не заменяет сборку и тестирование в соответствующем окружении.
Контрольный список перед решением о миграции
Используйте этот список для решения по фактическим действиям проекта. Если проверки подтверждают прежний процесс Xcode и не выявляют отдельной зависимости от нового поведения SwiftPM, оставьте текущий путь без изменений. Если расхождение найдено в одной команде или плагине, сначала адаптируйте этот участок. Если последствия пока неясны, сохраните параллельную проверку до сравнения логов и артефактов.
- [ ] Запишите установленную версию Xcode и версию Swift, которую действительно запускает команда
swift. - [ ] Найдите все вызовы
swift build,swift testи других команд SwiftPM в локальных инструкциях, shell-скриптах и CI. - [ ] Отдельно перечислите схемы Xcode, команды
xcodebuild, действия Archive и последующие шаги публикации. - [ ] Проверьте manifest,
swift-tools-version, зависимости, плагины и пользовательские скрипты пакета. - [ ] Запустите нужные команды в целевом окружении и сохраните логи, коды завершения и результаты.
- [ ] Повторите проверки для заявленных платформ, не распространяя вывод одной платформы на остальные.
- [ ] Сравните результат с прежней средой, если для неё есть журналы и артефакты.
- [ ] Выберите одно действие: оставить процесс, изменить только подтверждённо затронутый шаг или временно проверять оба пути.
Частые вопросы о SwiftPM, Xcode и CI
Что поменялось в SwiftPM?
Swift.org сообщает, что SwiftPM теперь по умолчанию использует Swift Build. Это изменение поведения SwiftPM, а не доказательство автоматического переключения Xcode-проекта.
Нужно ли менять сборку приложения, если Swift Package подключён через Xcode?
Не обязательно. Сначала проверьте проект по его существующей схеме Xcode. Отдельно тестируйте SwiftPM, только если его команды действительно входят в рабочий процесс.
Как проверить сборку пакета?
Из каталога пакета выполните swift package describe, swift build и swift test. Сохраните вывод и проверьте не только компиляцию, но также плагины и потребляемые следующими шагами файлы.
Что проверить в CI после обновления?
Уточните фактический инструментальный набор, команды и параметры. Затем проверьте разрешение зависимостей, сборку, тесты и все шаги, использующие созданные результаты.
Вывод: мигрировать только при подтверждённом различии
Swift 6.4 меняет значение по умолчанию для SwiftPM, но ответ на вопрос о миграции зависит от пути сборки конкретного проекта. Для приложения, которым управляет Xcode, сначала достаточно проверить существующие схемы и этапы выпуска. Для самостоятельного пакета, командной утилиты или CI нужно протестировать фактические команды SwiftPM, их плагины и результаты.
Если проверка требует воспроизводимой macOS-среды, сначала зафиксируйте требования к Xcode, Swift и действиям CI. При редких проверках удобнее оценить временный доступ к удалённому Mac; для постоянной предсказуемой нагрузки сравните аренду с собственной машиной и локальным окружением. На странице вариантов аренды Mac можно сверить подходящие условия SFTPMAC. Если проверки показывают, что вашему проекту достаточно имеющегося CI или Xcode, менять среду только из-за названия Swift Build нет необходимости.