0Pricing
Swift Academy · レッスン

Package.swift:ターゲット、プロダクト、依存関係

Package.swiftマニフェストの構成と、ライブラリ・実行可能プロダクトの定義を学びます。

「Package.swift:ターゲット、プロダクト、依存関係」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

Package.swiftの概要

Package.swiftはSwift Package Managerのマニフェストです。パッケージ名、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のバージョン要件

Package.swiftの先頭で最低限必要なSwift toolsのバージョンを設定し、パッケージのイニシャライザーでプラットフォーム要件を指定します。

// swift-tools-version: 5.9
import PackageDescription
let package = Package(
  name: "MyPackage",
  platforms: [.iOS(.v17)],
  // ...
)

ターゲットのリソース

resources: パラメーターを使って、画像、JSON、ローカライズファイルなどのコード以外のリソースを含めます。

.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時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「Package.swift:ターゲット、プロダクト、依存関係」で何を学びますか?

Package.swiftマニフェストの構成と、ライブラリ・実行可能プロダクトの定義を学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Package.swift:ターゲット、プロダクト、依存関係」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Package.swift:ターゲット、プロダクト、依存関係
  2. ローカルパッケージと機能モジュール
  3. バイナリターゲットとXCFramework
  4. バージョニング、競合解決、Swiftプラグイン
← Swift Academyに戻る