Package.swift: цели, продукты и зависимости
Разберите структуру манифеста Package.swift и определение библиотечных и исполняемых продуктов.
«Package.swift: цели, продукты и зависимости» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Обзор Package.swift
Package.swift — это манифест менеджера пакетов Swift. В нём объявляются имя пакета, версия Swift, цели, продукты и зависимости.
import PackageDescription
let package = Package(
name: "MyLibrary",
platforms: [.iOS(.v16), .macOS(.v13)],
products: [],
dependencies: [],
targets: []
)Цели
Цели — это основные строительные блоки: .target (код библиотеки или исполняемого файла) и .testTarget (код тестов).
.target(
name: "MyFeature",
dependencies: [],
path: "Sources/MyFeature"
),
.testTarget(
name: "MyFeatureTests",
dependencies: ["MyFeature"],
path: "Tests/MyFeatureTests"
)Продукты
Продукты определяют, что пакет предоставляет потребителям: .library или .executable.
.library(
name: "MyFeature",
targets: ["MyFeature"]
),
.executable(
name: "MyTool",
targets: ["MyTool"]
)Динамические и статические библиотеки
Укажите связывание .dynamic или .static. Статическое связывание используется по умолчанию и создаёт меньше накладных расходов, а динамическое позволяет совместно использовать библиотеку между модулями.
.library(
name: "MySDK",
type: .dynamic,
targets: ["MySDK"]
)Внешние зависимости
Объявляйте зависимости от удалённых пакетов с помощью URL и требования к версии.
.package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture", exact: "1.0.0")Использование внешних зависимостей в целях
Ссылайтесь на продукты внешних пакетов в зависимостях цели с помощью .product(name:package:).
.target(
name: "MyApp",
dependencies: [
.product(name: "Algorithms", package: "swift-algorithms"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture")
]
)Зависимости от локальных пакетов
Ссылайтесь на каталог локального пакета при работе с монорепозиторием или при разработке собственного пакета.
.package(path: "../MySharedLibrary"),Требования к версии Swift
Укажите минимальную версию инструментов Swift в верхней части Package.swift, а требования к платформам — в инициализаторе пакета.
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "MyPackage",
platforms: [.iOS(.v17)],
// ...
)Ресурсы в целях
Добавляйте ресурсы, не являющиеся кодом (изображения, JSON и локализацию), с помощью параметра resources:.
.target(
name: "MyFeature",
resources: [
.process("Resources"),
.copy("Fixtures/test_data.json")
]
)Параметры сборки и цели C
Цели могут настраивать флаги C и параметры Swift, что полезно для обёрток над библиотеками C или условной компиляции.
.target(
name: "CWrapper",
cSettings: [.headerSearchPath("include")],
swiftSettings: [.define("DEBUG", .when(configuration: .debug))]
)Разрешение зависимостей
Выполните swift package resolve, чтобы загрузить зависимости. Разрешённые версии сохраняются в Package.resolved.
// Commands:
// swift package resolve – fetch dependencies
// swift package update – update to latest compatible versions
// swift build – build the package
// swift test – run testsБыстрая проверка
Какой элемент Package.swift определяет, что пакет предоставляет другим пакетам или зависящим от него приложениям?
Итоги урока
В Package.swift targets — это единицы сборки, products предоставляют их потребителям, а dependencies ссылаются на удалённые или локальные пакеты. Используйте .product(name:package:), чтобы связать внешние цели. Фиксируйте Package.resolved в проектах команд, чтобы закрепить версии.
Часто задаваемые вопросы
Урок «Package.swift: цели, продукты и зависимости» бесплатный?
Да — полный текст урока «Package.swift: цели, продукты и зависимости» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Package.swift: цели, продукты и зависимости»?
Разберите структуру манифеста Package.swift и определение библиотечных и исполняемых продуктов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Package.swift: цели, продукты и зависимости»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Package.swift: цели, продукты и зависимости
- Локальные пакеты и модули функций
- Двоичные цели и XCFrameworks
- Версионирование, разрешение конфликтов и плагины Swift