Локальные пакеты и модули функций
Выносите функции в локальные пакеты Swift для ускорения сборки и изоляции.
«Локальные пакеты и модули функций» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Зачем нужны модули функциональных возможностей?
Разделение приложения на локальные пакеты обеспечивает инкапсуляцию, ускоряет инкрементальные сборки и позволяет команде работать параллельно.
// Without modules: one giant target recompiles everything
// With modules: changes to FeatureA only recompile FeatureAСоздание локального пакета
Создайте каталог рядом с проектом Xcode и выполните в нём swift package init.
mkdir Features/UserProfile
cd Features/UserProfile
swift package init --name UserProfile --type libraryДобавление в проект Xcode
Перетащите каталог локального пакета в навигатор проекта Xcode. Xcode автоматически распознает его как пакет SPM.
// In Xcode:
// File → Add Package Dependencies → Add Local...
// Select the package directoryСсылка на локальный пакет
В Package.swift приложения (или через Xcode) ссылайтесь на локальные пакеты с помощью .package(path:).
.package(path: "../Features/UserProfile"),
// In the target:
.product(name: "UserProfile", package: "UserProfile")Общедоступная поверхность API
Из приложения доступны только объявления public и open локального пакета. Используйте управление доступом, чтобы определить границу модуля.
// UserProfile/Sources/UserProfile/ProfileView.swift
public struct ProfileView: View {
public init() {}
public var body: some View { Text("Profile") }
}Внутренняя реализация
Все типы internal невидимы за пределами модуля, что автоматически обеспечивает инкапсуляцию.
// Only visible within UserProfile module:
final class ProfileCache { ... }
struct ProfileMapper { ... }Структура модуля функциональной возможности
Каждый модуль функциональной возможности содержит собственные внутренние слои предметной области, данных и представления.
// UserProfile/
// ├── Sources/UserProfile/
// │ ├── Domain/ (entities, use cases, protocols)
// │ ├── Data/ (repositories)
// │ └── Presentation/ (views, view models)
// └── Tests/UserProfileTests/Общий основной модуль
Выносите сквозные задачи (сетевое взаимодействие, аналитику и систему дизайна) в общий модуль, импортируемый модулями функциональных возможностей.
// CoreNetwork package
// CoreDesign package
// Both imported by FeatureA and FeatureBГраф зависимостей
Модули функциональных возможностей не должны напрямую зависеть друг от друга. Общие зависимости должны проходить через основной модуль, чтобы избежать связанности.
// GOOD:
// FeatureA → CoreNetwork
// FeatureB → CoreNetwork
// BAD:
// FeatureA → FeatureB (tight coupling)Преимущества для времени сборки
При чётких границах модулей Xcode пересобирает только затронутые модули при изменении исходных файлов.
// Change in UserProfile → only UserProfile recompiles
// App target links the new binary → fast incremental buildТестирование модулей функциональных возможностей
У каждого модуля функциональной возможности есть собственная цель тестирования, что позволяет выполнять тесты параллельно и ускоряет непрерывную интеграцию.
// Run all tests:
swift test --package-path Features/UserProfile
// Or let Xcode run them as part of the main test planБыстрая проверка
Какой уровень доступа требуется объявлениям в локальном пакете Swift, чтобы использовать их из цели приложения?
Итоги урока
Создавайте локальные пакеты функциональных возможностей с помощью swift package init, ссылайтесь на них через .package(path:) и предоставляйте только типы public. Выносите общие инструменты в основной модуль. Модули функциональных возможностей не должны зависеть друг от друга. Чёткие границы модулей значительно сокращают время инкрементальных сборок.
Часто задаваемые вопросы
Урок «Локальные пакеты и модули функций» бесплатный?
Да — полный текст урока «Локальные пакеты и модули функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Локальные пакеты и модули функций»?
Выносите функции в локальные пакеты Swift для ускорения сборки и изоляции. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Локальные пакеты и модули функций»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Package.swift: цели, продукты и зависимости
- Локальные пакеты и модули функций
- Двоичные цели и XCFrameworks
- Версионирование, разрешение конфликтов и плагины Swift