แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์
แยกฟีเจอร์เป็นแพ็กเกจ Swift ภายในเครื่องเพื่อให้บิลด์เร็วขึ้นและแยกส่วนได้ดีขึ้น
แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องมีโมดูลฟีเจอร์
การแบ่งแอปออกเป็นแพ็กเกจภายในเครื่องช่วยบังคับใช้การห่อหุ้ม ทำให้การสร้างแบบเพิ่มทีละส่วนเร็วขึ้น และช่วยให้ทีมทำงานคู่ขนานกันได้
// Without modules: one giant target recompiles everything
// With modules: changes to FeatureA only recompile FeatureAการสร้างแพ็กเกจภายในเครื่อง
สร้างไดเรกทอรีถัดจากโครงการ Xcode แล้วเรียกใช้ swift package init ภายในไดเรกทอรีนั้น
mkdir Features/UserProfile
cd Features/UserProfile
swift package init --name UserProfile --type libraryการเพิ่มลงในโครงการ Xcode
ลากไดเรกทอรีแพ็กเกจภายในเครื่องไปไว้ในตัวนำทางโครงการของ Xcode โดย Xcode จะตรวจพบว่าเป็นแพ็กเกจ SPM โดยอัตโนมัติ
// In Xcode:
// File → Add Package Dependencies → Add Local...
// Select the package directoryการอ้างอิงแพ็กเกจภายในเครื่อง
ใน Package.swift ของแอป หรือผ่าน Xcode ให้อ้างอิงแพ็กเกจภายในเครื่องด้วย .package(path:)
.package(path: "../Features/UserProfile"),
// In the target:
.product(name: "UserProfile", package: "UserProfile")พื้นผิวส่วนติดต่อสาธารณะ
เฉพาะการประกาศ public และ open ในแพ็กเกจภายในเครื่องเท่านั้นที่แอปจะเข้าถึงได้ ใช้การควบคุมการเข้าถึงเพื่อกำหนดขอบเขตของโมดูล
// UserProfile/Sources/UserProfile/ProfileView.swift
public struct ProfileView: View {
public init() {}
public var body: some View { Text("Profile") }
}การนำไปใช้งานภายใน
ชนิด internal ทั้งหมดจะมองไม่เห็นจากภายนอกโมดูล ทำให้เกิดการห่อหุ้มโดยอัตโนมัติ
// Only visible within UserProfile module:
final class ProfileCache { ... }
struct ProfileMapper { ... }โครงสร้างโมดูลฟีเจอร์
โมดูลฟีเจอร์แต่ละโมดูลเป็นเจ้าของชั้นโดเมน ข้อมูล และการนำเสนอของตนเองภายในโมดูล
// UserProfile/
// ├── Sources/UserProfile/
// │ ├── Domain/ (entities, use cases, protocols)
// │ ├── Data/ (repositories)
// │ └── Presentation/ (views, view models)
// └── Tests/UserProfileTests/โมดูลแกนกลางที่ใช้ร่วมกัน
สกัดประเด็นที่ตัดข้ามหลายส่วน เช่น การสื่อสารเครือข่าย การวิเคราะห์ข้อมูล และระบบการออกแบบ ไปไว้ในโมดูลที่ใช้ร่วมกันซึ่งโมดูลฟีเจอร์นำเข้า
// CoreNetwork package
// CoreDesign package
// Both imported by FeatureA and FeatureBกราฟการพึ่งพา
โมดูลฟีเจอร์ไม่ควรพึ่งพากันโดยตรง การพึ่งพาที่ใช้ร่วมกันควรไหลผ่านโมดูลแกนกลางเพื่อหลีกเลี่ยงการผูกติดกัน
// GOOD:
// FeatureA → CoreNetwork
// FeatureB → CoreNetwork
// BAD:
// FeatureA → FeatureB (tight coupling)ประโยชน์ด้านเวลาการสร้าง
เมื่อมีขอบเขตโมดูลที่ชัดเจน Xcode จะสร้างเฉพาะโมดูลที่ได้รับผลกระทบใหม่เมื่อไฟล์ต้นฉบับเปลี่ยนแปลง
// Change in UserProfile → only UserProfile recompiles
// App target links the new binary → fast incremental buildการทดสอบโมดูลฟีเจอร์
โมดูลฟีเจอร์แต่ละโมดูลมีเป้าหมายการทดสอบของตนเอง ทำให้ดำเนินการทดสอบคู่ขนานกันได้และทำให้การผสานรวมอย่างต่อเนื่องรวดเร็วขึ้น
// Run all tests:
swift test --package-path Features/UserProfile
// Or let Xcode run them as part of the main test planตรวจสอบความเข้าใจอย่างรวดเร็ว
การประกาศในแพ็กเกจสวิฟต์ภายในเครื่องต้องมีระดับการเข้าถึงใดจึงจะนำไปใช้จากเป้าหมายแอปได้
สรุปบทเรียน
สร้างแพ็กเกจฟีเจอร์ภายในเครื่องด้วย swift package init อ้างอิงด้วย .package(path:) และเปิดเผยเฉพาะชนิด public เท่านั้น สกัดยูทิลิตีที่ใช้ร่วมกันไปไว้ในโมดูลแกนกลาง โมดูลฟีเจอร์ไม่ควรพึ่งพากันเอง ขอบเขตโมดูลที่สะอาดช่วยลดเวลาการสร้างแบบเพิ่มทีละส่วนได้อย่างมาก
คำถามที่พบบ่อย
บทเรียน “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์”
แยกฟีเจอร์เป็นแพ็กเกจ Swift ภายในเครื่องเพื่อให้บิลด์เร็วขึ้นและแยกส่วนได้ดีขึ้น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Package.swift: เป้าหมาย ผลิตภัณฑ์ และการพึ่งพา
- แพ็กเกจภายในเครื่องและโมดูลฟีเจอร์
- เป้าหมายไบนารีและ XCFrameworks
- การกำหนดเวอร์ชัน การแก้ข้อขัดแย้ง และปลั๊กอิน Swift