0Pricing
Swift Academy · Урок

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

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

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