0Pricing
Swift Academy · Урок

Локальные пакеты и модули функций

Выносите функции в локальные пакеты 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 — локальная установка не требуется.

Все уроки этого курса

  1. Package.swift: цели, продукты и зависимости
  2. Локальные пакеты и модули функций
  3. Двоичные цели и XCFrameworks
  4. Версионирование, разрешение конфликтов и плагины Swift
← Назад к Swift Academy