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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Package.swift:ターゲット、プロダクト、依存関係
- ローカルパッケージと機能モジュール
- バイナリターゲットとXCFramework
- バージョニング、競合解決、Swiftプラグイン