バージョニング、競合解決、Swiftプラグイン
バージョン範囲や依存関係の競合を管理し、ビルドツールプラグインを使用します。
「バージョニング、競合解決、Swiftプラグイン」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
SPMでのセマンティックバージョニング
SPMではsemver(MAJOR.MINOR.PATCH)を使用します。要件はfrom:、exact:、または.upToNextMajorで指定します。
.package(url: "https://github.com/apple/swift-log", from: "1.5.0"),
.package(url: "https://github.com/vapor/vapor", exact: "4.83.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture",
.upToNextMajor(from: "1.0.0"))Package.resolved
Package.resolvedは、すべての依存関係の正確なバージョンを固定します。アプリではコミットし、ライブラリでは含めないようにします。
// Package.resolved (auto-generated):
// Pins exact commit hash and version for every dependency
// Run "swift package update" to update pinned versionsバージョン競合の解決
2つのパッケージが同じ依存関係に異なるバージョンを要求すると、SPMは互換性のあるバージョンを見つけようとします。解決できない競合があると、ビルドエラーになります。
// PackageA requires Logging 1.4.0
// PackageB requires Logging 1.5.0
// SPM resolves to 1.5.0 (satisfies both >= 1.x)
// Conflict: PackageA requires Logging 1.x, PackageB requires 2.xバージョンの強制指定
競合している依存関係をアプリのPackage.swiftに直接追加すると、SPMが通常選択するバージョンを上書きできます。
// Force Logging 1.5.0 by declaring it directly:
.package(url: "https://github.com/apple/swift-log", exact: "1.5.0")ビルドツールプラグイン
ビルドツールプラグインはビルド中に実行され、ソースコードの生成、リソースの処理、リンターの自動実行などを行います。
// In Package.swift:
.plugin(
name: "SourceGenerator",
capability: .buildTool()
)ビルドツールプラグインの実装
ビルドツールプラグインはBuildToolPluginに準拠し、BuildCommandまたはPrebuildCommandを返します。
import PackagePlugin
@main
struct SourceGenerator: BuildToolPlugin {
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
let output = context.pluginWorkDirectory.appending("Generated.swift")
return [.buildCommand(
displayName: "Generating sources",
executable: try context.tool(named: "gen-tool").path,
arguments: ["--output", output],
outputFiles: [output]
)]
}
}コマンドプラグイン
コマンドプラグインはXcodeまたはCLIからオンデマンドで実行され、フォーマット、リンティング、ドキュメント生成などに役立ちます。
// In Package.swift:
.plugin(
name: "FormatPlugin",
capability: .command(intent: .sourceCodeFormatting())
)コマンドプラグインの実行
コマンドプラグインは、ターミナルまたはXcodeの右クリックメニューから実行します。
// CLI:
swift package plugin format-source-code
// Xcode: right-click target → "Format Source Code"ビルドプラグインとしてのSwiftLintの使用
SwiftLintは、すべてのビルドで自動的に実行されるSPMプラグインとして提供されています。
.package(url: "https://github.com/realm/SwiftLint", from: "0.54.0"),
// In target:
.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint")プラグインのサンドボックス
プラグインはセキュリティ上の理由から、ファイルシステムへのアクセスが制限されたサンドボックス内で実行されます。書き込み可能なのは、指定された作業ディレクトリだけです。
// Accessible from plugins:
// context.pluginWorkDirectory — writable work dir
// context.package.directory — read-only source
// target.sourceFiles — source file list理解度チェック
SwiftパッケージにおけるPackage.resolvedの役割は何ですか。
レッスンのまとめ
Package.swiftではsemverの範囲を使用します。再現可能なビルドを実現するため、アプリではPackage.resolvedをコミットします。依存関係を直接宣言することで、バージョン競合を解決します。ビルドツールプラグインはビルド中に自動実行されます(リンター、コードジェネレーターなど)。コマンドプラグインはオンデマンドで実行されます。プラグインはセキュリティのためにサンドボックス化されています。
よくある質問
「バージョニング、競合解決、Swiftプラグイン」レッスンは無料ですか?
はい。「バージョニング、競合解決、Swiftプラグイン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「バージョニング、競合解決、Swiftプラグイン」で何を学びますか?
バージョン範囲や依存関係の競合を管理し、ビルドツールプラグインを使用します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「バージョニング、競合解決、Swiftプラグイン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Package.swift:ターゲット、プロダクト、依存関係
- ローカルパッケージと機能モジュール
- バイナリターゲットとXCFramework
- バージョニング、競合解決、Swiftプラグイン