0Pricing
Swift Academy · บทเรียน

การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift

จัดการช่วงเวอร์ชัน แก้ข้อขัดแย้งของการพึ่งพา และใช้ปลั๊กอินเครื่องมือบิลด์

การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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

การแก้ไขข้อขัดแย้งของเวอร์ชัน

เมื่อแพ็กเกจสองรายการต้องการการพึ่งพาเดียวกันคนละเวอร์ชัน 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

ตรวจสอบความเข้าใจ

Package.resolved มีจุดประสงค์อะไรในแพ็กเกจ Swift

ทบทวนบทเรียน

ใช้ช่วงเวอร์ชันแบบ semver ใน Package.swift ส่ง Package.resolved เข้าไปในระบบควบคุมเวอร์ชันสำหรับแอปเพื่อให้สร้างซ้ำได้ผลลัพธ์เดิม แก้ไขข้อขัดแย้งของเวอร์ชันด้วยการประกาศการพึ่งพาโดยตรง ปลั๊กอินเครื่องมือสร้างจะทำงานอัตโนมัติระหว่างการสร้าง เช่น เครื่องมือตรวจสอบโค้ดและเครื่องมือสร้างโค้ด ปลั๊กอินคำสั่งจะทำงานเมื่อเรียกใช้ และปลั๊กอินจะทำงานภายในพื้นที่แยกเพื่อความปลอดภัย

คำถามที่พบบ่อย

บทเรียน “การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift”

จัดการช่วงเวอร์ชัน แก้ข้อขัดแย้งของการพึ่งพา และใช้ปลั๊กอินเครื่องมือบิลด์ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Package.swift: เป้าหมาย ผลิตภัณฑ์ และการพึ่งพา
  2. แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์
  3. เป้าหมายไบนารีและ XCFrameworks
  4. การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift
← กลับไปที่ Swift Academy