# Meet Xcode

**Xcode** เปิดตัวครั้งแรกในปี 2003 พร้อม macOS 10.3 (Panther) โดยมีเป้าหมายเพื่อเป็นเครื่องมือพัฒนาสำหรับภาษา Objective-C ซึ่งใช้สร้างแอปในยุคนั้น ต่อมาในปี 2014 เมื่อ Apple เปิดตัวภาษา **Swift**—ภาษาในการเขียนโปรแกรมระดับสูง (High-Level Language) ที่ทันสมัยและทรงประสิทธิภาพ  Xcode จึงได้รับการออกแบบใหม่เพื่อรองรับ Swift ตั้งแต่ระบบคอมไพเลอร์ ไปจนถึงเครื่องมือวิเคราะห์โค้ด ปัจจุบัน Xcode ได้พัฒนาอย่างต่อเนื่องจาก **Integrated Development Environment (IDE)** สู่ **แพลตฟอร์มแบบครบชุด** สำหรับการออกแบบ สร้าง ทดสอบ วิเคราะห์ และเผยแพร่แอปในระบบนิเวศของ Apple

บทความฉบับนี้นำจะเสนอภาพรวมและบทบาทของ **Xcode** ในฐานะเครื่องมือหลักสำหรับการเรียนรู้การเขียนโปรแกรมภาษา Swift และการพัฒนาแอปบนอุปกรณ์ของ Apple โดยมุ่งเน้นการสร้างความเข้าใจพื้นฐานเกี่ยวกับส่วนประกอบและคุณสมบัติสำคัญของ Xcode ตั้งแต่การสร้างโปรเจกต์เพื่อพัฒนาแอปด้วย **SwiftUI** ไปจนถึงกระบวนการทดสอบการทำงานของแอปบนอุปกรณ์เสมือนจริง (Simulator) และอุปกรณ์จริง (Physical Device) อย่างเป็นขั้นตอน

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FWaoBcF8G6OwAQIhw3hdJ%2FScreenshot%202568-12-09%20at%2012.35.27.png?alt=media&#x26;token=634f1cfd-9dc1-4ccc-b6f8-c97da05014be" alt=""><figcaption></figcaption></figure>

Xcode เป็นเครื่องมือที่ถูกออกแบบมาเพื่อเป็น**แพลตฟอร์มการพัฒนาแอปแบบครบวงจร (Integrated Development Platform)** ที่ผสานเครื่องมือสำคัญซึ่งสนับสนุนกระบวนการพัฒนาแอปพลิเคชันเพื่อใช้ในระบบนิเวศของ Apple ในทุกขั้นตอน ตั้งแต่การออกแบบ การเขียนโปรแกรม การทดสอบ ไปจนถึงการวิเคราะห์และปรับปรุงคุณภาพของแอป เครื่องมือเหล่านี้ไม่เพียงช่วยเพิ่มประสิทธิภาพและความรวดเร็วในการทำงานของนักพัฒนาเท่านั้น แต่ยังช่วยให้ผู้เริ่มต้นสามารถเข้าใจพฤติกรรมและกลไกการทำงานของระบบได้ลึกซึ้งมากยิ่งขึ้น

องค์ประกอบและคุณสมบัติสำคัญของ Xcode ที่ใช้ในการพัฒนาและทดสอบแอปพลิเคชัน ประกอบด้วย

* **Source Editor** ใช้สำหรับเขียนและจัดการโค้ด โดยมีความสามารถในการตรวจสอบข้อผิดพลาดแบบเรียลไทม์ (Real-time error checking) พร้อมระบบช่วยเติมคำอัตโนมัติ (Code Completion) ที่มีความแม่นยำสูง ช่วยลดข้อผิดพลาด และ Syntax Highlighting ที่ช่วยเพิ่มความเข้าใจโครงสร้างของคำสั่งในภาษา Swift
* **SwiftUI Previews** ช่วยให้ผู้พัฒนาสามารถดูผลลัพธ์ของโค้ดได้ทันทีในรูปแบบ Live Rendering ทำให้การออกแบบส่วนติดต่อกับผู้ใช้ด้วย SwiftUI เป็นไปอย่างรวดเร็ว ยืดหยุ่น และสนับสนุนแนวคิดการพัฒนาแบบ Iterative Design
* **Simulator** ใช้สำหรับทดสอบการทำงานของแอปบนอุปกรณ์เสมือนจริงหลากหลายรุ่นและหลายขนาดหน้าจอ โดยไม่จำเป็นต้องมีฮาร์ดแวร์จริงครบทุกชนิด ช่วยลดต้นทุนและเพิ่มความสะดวกในการทดสอบการทำงานของแอป
* **Icon Composer** เครื่องมือสำหรับสร้างไอคอนแบบหลายเลเยอร์ (Multilayer Icons) ช่วยให้นักพัฒนาสามารถออกแบบและส่งออกไอคอนของแอปที่สอดคล้องกับมาตรฐานและแนวทางการออกแบบของ Apple ได้อย่างถูกต้อง
* **Reality Composer** ใช้สำหรับสร้างเนื้อหา 3 มิติ และประสบการณ์ความจริงเสริม (AR) โดยสามารถจัดวางวัตถุสามมิติ เพิ่มแสง เอฟเฟกต์ และกำหนดการโต้ตอบ ก่อนการนำไปใช้งานร่วมกับ RealityKit หรือ ARKit
* **Create ML** เครื่องมือสำหรับฝึกฝนโมเดลปัญญาประดิษฐ์ (Machine Learning) โดยไม่จำเป็นต้องเขียนโค้ด สามารถรองรับโมเดลได้หลากหลายประเภท เช่น การจำแนกภาพ ข้อความ เสียง และข้อมูลเชิงตาราง พร้อมสามารถนำโมเดลที่ได้ไปบูรณาการเข้ากับแอปผ่าน Core ML ได้โดยตรง
* **Accessibility Inspector** ใช้ตรวจสอบและประเมินความสามารถในการเข้าถึง (Accessibility) ของแอป เพื่อช่วยให้นักพัฒนาปรับปรุงส่วนติดต่อผู้ใช้ให้รองรับผู้ใช้ที่มีข้อจำกัด เช่น ผู้พิการทางสายตาหรือการได้ยิน
* **Runtime Debugger** และ **Instruments** เครื่องมือสำหรับวิเคราะห์ประสิทธิภาพของแอปในระหว่างการทำงาน เช่น การใช้หน่วยความจำ การประมวลผล เฟรมเรต ความเร็วในการโหลด และพฤติกรรมของแอป

ดังนั้น การเใช้งาน Xcode ในการพัฒนาแอปพลิเคชัน จึงช่วยให้นักพัฒนาเข้าใจ **ระบบและกระบวนการทั้งหมดของการพัฒนาแอป (End-to-End App Development)** ไม่ใช่เพียงการเขียนโค้ดเท่านั้น แต่ยังครอบคลุมถึงการออกแบบ การทดสอบ และการปรับปรุงคุณภาพของแอปอย่างเป็นระบบ โดยคุณสามารถดาวน์โหลด Xcode ได้ฟรีจาก [App Store](https://apps.apple.com/th/app/xcode/id497799835?l=th\&mt=12)

#### **เริ่มต้นสร้าง Project และสำรวจส่วนประกอบของ Xcode**

เมื่อติดตั้ง Xcode บนเครื่อง Mac เรียบร้อยแล้ว ในการเปิดใช้ Xcode ครั้งแรก โปรแกรมจะแสดงหน้าต่างสำหรับการติดตั้งส่วนประกอบ (components) ที่จำเป็นสำหรับการพัฒนาแอปบนแพลตฟอร์มต่างๆ โดยนักพัฒนาสามารถเลือกดาวน์โหลดเฉพาะตัวเลือกที่ต้องการ เพื่อประหยัดพื้นที่และลดเวลาในการติดตั้งได้

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2F3G14V3sGy3EMBsS4QtfA%2F000_01.png?alt=media&#x26;token=df065104-235a-4c7d-8b44-6d5c1ab124b2" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}

1. สำหรับการเริ่มต้นให้เลือกติดตั้งส่วนประกอบสำหรับการพัฒนาแอปสำหรับ **macOS** และ **iOS**
2. ติดตั้ง **Predictive Code Completion Model** ซึ่งเป็นเครื่องมือช่วยเพิ่มประสิทธิภาพในการเขียนโค้ด โดยใช้โมเดลเรียนรู้ล่วงหน้า (ML Model) เพื่อแนะนำโค้ดที่ต้องการพิมพ์อย่างแม่นยำและรวดเร็ว ทำให้ประสบการณ์ในการเขียนโค้ดโดยเฉพาะภาษา Swift ราบรื่นขึ้น&#x20;
3. คลิกปุ่ม **Download & Install**
   {% endcolumn %}
   {% endcolumns %}

\
เริ่มต้นสร้าง Project ของคุณโดยเลือกที่ **Create New Project** หรือ **เมนู File > New > Project**

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2Fh5ZXcHT0VgbnEbrNhZtC%2F000-02.png?alt=media&#x26;token=45fdc8c9-6c02-4a01-80b0-be84182fbafd" alt=""><figcaption></figcaption></figure>

4. เลือกแพลตฟอร์มที่ต้องการ หรือเลือก **Multiplatform** หากต้องการสร้างแอปที่ทำงานได้บนทุกแพลตฟอร์ม
5. จากนั้นเลือกเทมเพลตซึ่งอยู่ภายใต้ **Application** สำหรับการเริ่มต้นให้เลือกเป็น **App**&#x20;

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FJWLOIHbcxnwujWGI6uXA%2F000-03.png?alt=media&#x26;token=d77d2104-9dc5-4603-b3be-105e0ad89461" alt="" width="563"><figcaption></figcaption></figure>

6. กรอก **Product Name** เพื่อตั้งชื่อโปรเจกต์&#x20;
7. กำหนด **Organization Identifier** ซึ่ง Xcode จะนำไปใช้ในการสร้าง **Bundle Identifier** เพื่อใช้เป็นรหัสประจำตัวของแอป ซึ่งโดยปกติจะใช้รูปแบบ **Reverse Domain Name** เพื่อป้องกันการซ้ำซ้อนกันของ Bundle Identifier เมื่อต้องอัพโหลดแอปขึ้น App Store&#x20;
8. กำหนดค่า Interface เป็น SwiftUI\
   กำหนดค่าภาษาที่ใช้ในการเขียนโปรแกรม (Language) เป็น Swift \
   กำหนดค่า Testing System และ Storage เป็น None
9. คลิกที่ปุ่ม Next&#x20;

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2F5lIAhZ8IQpH238pKe3s8%2F000_04.png?alt=media&#x26;token=49e27b1d-bbd5-4b8d-beb4-4d667771d2f0" alt="" width="563"><figcaption></figcaption></figure>

10. เลือกตำแหน่งที่จะบันทึกโปรเจกต์
11. คลิกเพื่อเอาเครื่องหมายถูกที่ช่อง **Source Control** ออกเพื่อยกเลิกการใช้ระบบจัดการเวอร์ชัน (Version Control)&#x20;
12. คลิกที่ปุ่ม Create&#x20;

เมื่อเปิดโปรเจกต์ใน Xcode จะพบส่วนประกอบหลักหลายส่วนที่ทำงานร่วมกันเพื่อสนับสนุนการพัฒนาแอปทั้งด้านการเขียนโค้ด การออกแบบส่วนติดต่อกับผู้ใช้ (UI) การทดสอบและดีบั๊กโปรแกรม โดยสามารถแบ่งเป็นองค์ประกอบต่างๆ ดังนี้

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FwUHZhx2QOH5zOUbDmrrH%2FXcode.png?alt=media&#x26;token=ff01abed-4c0c-458f-9fa4-0445950e38c5" alt=""><figcaption></figcaption></figure>

* **Toolbar :** แถบเครื่องมือด้านบนสุดของหน้าต่าง Xcode ประกอบด้วยปุ่มและเมนูเพื่อเรียกผู้ช่วย AI และการใช้ Run Distination เพื่อกำหนดเป้าหมายในการรันแอป
* **Navigator Area :** พื้นที่ด้านซ้ายของ Xcode ใช้สำหรับเลือกและจัดการไฟล์ในโปรเจกต์
* **Editor Area :** พื้นที่สำหรับเขียนโค้ด&#x20;
* **Code mini map :** ภาพรวมของโค้ด (Code Overview) อยู่ด้านขวาของ Editor Area ซึ่งช่วยให้นักพัฒนามองเห็นโครงสร้างโค้ดทั้งหมด และเพิ่มประสิทธิภาพในการนำทางภายในไฟล์
* **Canvas (SwiftUI Preview) :** พื้นที่แสดงแสดงผลลัพธ์ของโค้ดแบบเรียลไทม์ (Live Preview)
* **Debug Area :** พื้นที่ด้านล่างใช้สำหรับแสดง Log การทำงานของแอป ซึ่งจะแสดงขึ้นมาเมื่อรันโปรแกรม โดยนักพัฒนาสามารถจะใช้เครื่องมือในส่วนนี้เพื่อตรวจสอบและแก้ไขข้อผิดพลาดในการทำงานของโปรแกรม
* **Inspector :** พื้นที่ด้านขวาสุด ใช้เพื่อดูและแก้ไขคุณสมบัติของไฟล์หรือ UI Components โดยหากต้องการซ่อน Inspector เพื่อเพิ่มพื้นที่ในการเขียนโค้ด ให้คลิกปุ่ม **“Hide or show the Inspectors”** ที่มุมขวาบนของ Toolbar

#### โครงสร้างของไฟล์ในโปรเจกต์

คุณสามารถเข้าถึงส่วนต่างๆ ของโปรเจกต์ได้จาก **Navigator Area** ที่อยู่ด้านซ้ายมือของโปรแกรม โดยเมนูซึ่งอยู่ส่วนบนของ **Navigator Area** ประกอบด้วย

{% columns %}
{% column width="33.33333333333333%" %}

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FQBGDPgsHqCQMUFugKWgf%2FScreenshot%202568-12-15%20at%2007.46.21.png?alt=media&#x26;token=cf98845b-57f8-4f6f-b3e7-3dc8a1320503" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="66.66666666666667%" %}

* **Project Navigator** : แสดงไฟล์ต่างๆ ในโปรเจกต์
* **Source Control Navigator :** แสดงสถานะไฟล์ที่มีการเปลี่ยนแปลง
* **Bookmark Navigator :**  แสดงตำแหน่งบุ๊คมาร์คในโค้ด
* **Find Navigator :** ใช้ค้นหาโค้ดหรือข้อความภายในโปรเจกต์
* **Issue Navigator :** แสดงข้อผิดพลาด (Errors) และคำเตือน (Warnings)
* **Test Navigator :** ใช้จัดการ Unit Tests และ UI Tests
* **Debug Navigator :** แสดงข้อมูล runtime และดีบักปัญหาเกี่ยวกับ performance
* **Breakpoint Navigator :** แสดงรายการ Breakpoint ทั้งหมดที่ถูกตั้งไว้ในโปรเจกต์
* **Report Navigator :** แสดงรายงานผลการทำงาน เช่น การ Build, Run, Test และ Archive แอปพลิเคชัน
  {% endcolumn %}
  {% endcolumns %}

เมื่อคลิกที่ **Project Navigator** ซึ่งทำหน้าที่เป็น **ศูนย์กลางในการแสดงโครงสร้างและไฟล์ทั้งหมดของโปรเจกต์** เพื่อให้นักพัฒนาสามารถเข้าถึง จัดการ และทำงานกับส่วนประกอบต่าง ๆ ของแอปได้อย่างเป็นระบบ สำหรับโปรเจกต์ที่สร้างด้วย SwiftUI ค่าเริ่มต้นของ Xcode จะจัดเตรียมโครงสร้างไฟล์พื้นฐานไว้ให้โดยอัตโนมัติ ดังนี้

**ส่วนที่ 1 :** **Project File หรือไฟล์ .xcodeproj** ใช้เพื่อแสดงหน้าต่างการตั้งค่าคุณสมบัติต่างๆ ของแอปที่ถูกกำหนดไว้ตอนสร้างโปรเจกต์ รวมทั้งการกำหนดคุณสมบัติเพิ่มเติมซึ่งเป็นส่วนสำคัญที่ใช้เพื่อการ Build และเผยแพร่แอปไปยัง App Store โดยจะแบ่งออกเป็น 2 ส่วน คือ **Project** และ **Targets**

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2F21eWDSK3I4eJeqL7wEci%2F006.png?alt=media&#x26;token=7488b5e5-1a68-43bd-9b66-0f3042b6e12b" alt=""><figcaption></figcaption></figure>

เพื่อระบุว่า แอปจะสามารถทำงานบนอุปกรณ์ประเภทใดได้บ้าง เวอร์ชันขั้นต่ำของระบบปฏิบัติการที่รองรับ การกำหนดรายละเอียดหมายเลข Version และ Build ของแอป รวมทั้งรายละเอียดการแสดงผลและพฤติกรรมของแอปบนอุปกรณ์ปลายทาง ให้เลือกที่ **ชื่อแอป (HelloWorld) ในส่วน Targets** และเลือกแถบ Ganeral เพื่อกำหนดรายละเอียดของค่าต่างๆ ตามที่ต้องการ

**ส่วนที่ 2 โฟลเดอร์ที่ใช้เก็บไฟล์ในโปรเจกต์** ซึ่งภายในจะมีไฟล์สำคัญที่ Xcode เตรียมไว้ให้โดยอัตโนมัติ ซึ่งสามารถจัดกลุ่มเป็น 3 ส่วนหลัก ได้แก่

* **ไฟล์ Assets  หรือ Assets.xcassets**\
  ไฟล์ **Asset Catalog** เป็นคลังสื่อหรือพื้นที่จัดเก็บ “ทรัพยากร” (Resources) ของแอปในรูปแบบที่ Xcode และระบบปฏิบัติการของ Apple สามารถจัดการให้เหมาะสมได้โดยอัตโนมัติ โดยทรัพยากรที่จะถูกเก็บใน Assets ได้แก่ ไอคอนแอป รูปภาพ ชุดสี เป็นต้น
* **ไฟล์** **HelloWorldApp.swift** \
  ไฟล์ซึ่งถูกกำหนดให้เป็นจุดเริ่มต้นของแอป (Entry Point) ใน SwiftUI โดยประกาศโครงสร้าง `App` และกำหนด `Scene` ที่แอปจะใช้ในการแสดงผลไว้  ไฟล์นี้เปรียบเสมือนผู้จัดการที่บอกว่าแอปเริ่มตรงไหน และจะเปิดหน้าจอใดขึ้นมาก่อน และมีโครงสร้างทั่วไป ดังนี้

```swift
import SwiftUI

@main  //บอกว่า struct นี้คือ “จุดเริ่มต้นของโปรแกรม”
struct HelloWorldApp: App {  // ประกาศว่า HelloWorldApp เป็น “แอป” ตามแนวคิดของ SwiftUI
    var body: some Scene {   // กำหนด Scene เพื่อทำหน้าที่เป็น “พื้นที่” ในการแสดง UI (เหมือนฉากของแอป)
        WindowGroup {        // Windows Group เป็น Scene ชนิดหนึ่งที่ใช้สร้างหน้าต่าง (window) สำหรับแอป
            ContentView()    // View ที่จะแสดงบนหน้าจอ
        }
    }
}
```

* **ไฟล์ ContentView\.swift**\
  `ContentView.swift` คือ ไไฟล์ที่สร้างส่วนติดต่อกับผู้ใช้ (UI) ของแอป โดยเป็นโครงสร้างที่มีความสอดคล้องกับ View ซึ่ง SwiftUI จะอ่านโครงสร้างหน้าจอ (View hierarchy) จากส่วน body แล้ววาด UI ให้อัตโนมัติ โค้ดพื้นฐานของ View มักมีรูปแบบนี้ ดังนี้

```swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
        }
        .padding()
    }
}
```

#### **ทำความเข้าใจเกี่ยวกับ App, Scene และ View ใน SwiftUI**

การพัฒนาแอปด้วย **SwiftUI** ซึ่งใช้แนวคิดแบบ **Declarative UI** โดยโครงสร้างของแอปที่สร้างด้วย SwiftUI จะมีลำดับชั้นที่ชัดเจน ตั้งแต่ระดับแอป (App) ฉากการแสดงผล (Scene) ไปจนถึงองค์ประกอบของหน้าจอ (View)

ในระดับบนสุดของแอป จะเริ่มต้นการทำงานจาก `@main`  และโครงสร้างที่สอดคล้อง (Conform) กับ **App protocol** ซึ่งทำหน้าที่เป็นจุดเริ่มต้นการทำงานของแอป (Entry Point) ส่วนนี้มีหน้าที่กำหนดว่า แอปประกอบด้วยฉากการแสดงผล (Scene) ใดบ้าง และกำหนดโครงสร้างโดยรวมของแอป เมื่อแอปเริ่มทำงาน SwiftUI จะอ่านโครงสร้างนี้เพื่อสร้างสภาพแวดล้อมและหน้าต่างสำหรับแอป

ถัดลงมาคือระดับของ **Scene** โดย Scene ทำหน้าที่เป็นตัวแทนของพื้นที่แสดงผลของแอป  สำหรับ Scene ที่มักถูกใช้บ่อยที่สุดคือ `WindowGroup` ซึ่งใช้กำหนดกลุ่มของหน้าต่างหรือหน้าจอหลักของแอป บน iOS โดยทั่วไป `WindowGroup` จะมีหน้าจอหลักเพียงหนึ่งหน้าจอ แต่บน iPadOS และ macOS ผู้ใช้สามารถเปิดหลายหน้าต่างจาก `WindowGroup` เดียวกันได้ นอกจากนี้บน macOS ยังสามารถรวมหลายหน้าต่างเป็นแท็บได้อีกด้วย ความสามารถนี้สะท้อนให้เห็นว่า SwiftUI ออกแบบโครงสร้างแอปให้ปรับตัวตามแพลตฟอร์มได้โดยอัตโนมัติ

{% hint style="info" %}
**Scene** คือ พื้นที่สำหรับใช้แสดงผลการทำงานของ **View** ใน SwiftUI โดยแอปหนึ่งตัว (**App**) สามารถมีได้หลาย Scene และแต่ละ Scene จะกำหนดว่า View ต้องถูกแสดงในรูปแบบใด เช่น หน้าต่าง หน้าจอเอกสาร หรือพื้นที่เสมือน

**ประเภทของ Scene**&#x20;

* WindowGroup : หน้าต่างหลักของแอป (ใช้บ่อยที่สุด) รองรับหลายหน้าต่าง เหมาะกับแอปทั่วไป
* Window : หน้าต่างเดี่ยว นิยมใช้บน macOS
* DocumentGroup : สำหรับแอปที่ทำงานกับไฟล์หรือเอกสาร
* Settings : หน้าตั้งค่าของแอป ใช้มากบน macOS
* ImmersiveSpace : พื้นที่เสมือน 3 มิติ *ใ*ช้กับ visionOS
  {% endhint %}

{% columns %}
{% column width="33.33333333333333%" %}

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FpDWxy1f343QDkm9SQjbg%2Fsection-2-adornment%402x.png?alt=media&#x26;token=9972ec0d-6021-4d45-a980-cf0e58124a19" alt="" width="200"><figcaption></figcaption></figure>

{% endcolumn %}

{% column width="66.66666666666667%" %}

ภายใน `WindowGroup` นักพัฒนาจะกำหนด **View หลัก (Root View)** ของแอป ซึ่งมักเป็นไฟล์ที่ชื่อว่า `ContentView` โดย `ContentView` ทำหน้าที่เป็นจุดเริ่มต้นของโครงสร้างหน้าจอทั้งหมดในแอป เมื่อหน้าต่างถูกสร้างขึ้น SwiftUI จะนำ `ContentView` มาแสดงเป็นหน้าจอแรก และจาก View นี้จะเชื่อมโยงไปยัง View อื่น ๆ ต่อไป

ภายใน `ContentView` จะประกอบด้วยโครงสร้างย่อยที่เรียกว่า **Layout Containers** เช่น `VStack`, `HStack` หรือ `ZStack` ซึ่งทำหน้าที่จัดเรียง View ย่อยตามที่กำหนด ตัวอย่างเช่น `VStack` ใช้จัดเรียง View ในแนวตั้งจากบนลงล่าง Layout เหล่านี้ไม่ใช่ส่วนที่แสดงผลโดยตรง แต่เป็นตัวกำหนดโครงสร้างและตำแหน่งขององค์ประกอบบนหน้าจอ

ในระดับลึกที่สุดคือ **View ย่อย (Leaf Views)** เช่น `Text`, `Image`, `Button` ซึ่งเป็นองค์ประกอบที่แสดงผลจริงบนหน้าจอของผู้ใช้ View เหล่านี้จะถูกจัดวางอยู่ภายใน Layout Containers ตามลำดับชั้นที่กำหนดไว้ เมื่อข้อมูลหรือสถานะของแอปเปลี่ยนไป SwiftUI จะคำนวณและปรับปรุงการแสดงผลของ View เหล่านี้ให้สอดคล้องกับโครงสร้างที่นิยามไว้โดยอัตโนมัติ

{% endcolumn %}
{% endcolumns %}

#### เครื่องมือช่วยพัฒนาและตรวจสอบโค้ดใน Xcode

Xcode ไม่ได้เป็นเพียงเครื่องมือสำหรับเขียนโค้ดเท่านั้น หากแต่เป็น **สภาพแวดล้อมการพัฒนาแบบบูรณาการ (Integrated Development Environment: IDE)** ที่ออกแบบมาเพื่อสนับสนุนกระบวนการพัฒนาซอฟต์แวร์อย่างครบวงจร สำหรับผู้เริ่มต้นพัฒนา iOS Application ด้วย SwiftUI การเข้าใจและใช้เครื่องมือเหล่านี้อย่างถูกต้องจะช่วยลดข้อผิดพลาด เพิ่มประสิทธิภาพการเรียนรู้ และส่งเสริมแนวปฏิบัติที่ดีในการพัฒนาซอฟต์แวร์

* **การช่วยการมองเห็นโครงสร้างของโค้ดด้วย Syntax Highlighting**\
  Syntax Highlighting คือ การใช้สีและรูปแบบตัวอักษรเพื่อแยกแยะองค์ประกอบของภาษา เช่น คำสงวน (keywords), ชื่อตัวแปร, ค่าของข้อมูล และคอมเมนต์ กลไกนี้ไม่ได้มีเป้าหมายเพียงเพื่อความสวยงามของโค้ด แต่มีบทบาทสำคัญในฐานะ**เครื่องมือเชิงการรับรู้ (Cognitive Tool)** ที่ช่วยให้นักพัฒนามองเห็น “โครงสร้าง” ของโปรแกรมได้ชัดเจน ทำให้เพิ่มความสามารถในการอ่านและทำความเข้าใจโค้ด (Code Readability) และช่วยตรวจจับความผิดปกติของโค้ดได้ด้วยสายตา
* **การช่วยเขียนโค้ดอย่างชาญฉลาดด้วย Code Completion**\
  Code Completion ใน Xcode สมัยใหม่ไม่ได้เป็นเพียงการ “เติมคำตามตัวอักษรที่พิมพ์” แต่พัฒนาไปสู่ **Predictive Code Completion** ซึ่งเป็นระบบช่วยเขียนโค้ดเชิงคาดการณ์ (Context-aware & Type-aware) ที่สามารถ *คาดเดาเจตนาของนักพัฒนา* จากบริบทของโค้ดที่กำลังเขียนอยู่ ระบบดังกล่าวอาศัยองค์ประกอบสำคัญ ได้แก่ โครงสร้างทางไวยากรณ์ของภาษา Swift, ระบบชนิดข้อมูล (Strong Type System), สถานะของ Scope และ Context ของโค้ด รวมถึงเฟรมเวิร์กที่กำลังใช้งาน เช่น SwiftUI, SwiftData
* **ระบบตรวจสอบข้อผิดพลาดในโค้ดด้วย Compiler Errors & Warnings**\
  ในเชิงเทคนิค Xcode ใช้ Swift Compiler เป็นแกนหลักในการวิเคราะห์โค้ดทุกบรรทัดก่อนการรันโปรแกรม กระบวนการนี้ทำให้เกิดการตรวจสอบและให้ข้อมูลย้อนกลับ (feedback) กับนักพัฒนา ทั้งในมิติของไวยากรณ์ (syntax) และความถูกต้องเชิงความหมาย (semantic correctness) ผลลัพธ์ของการตรวจสอบจะแสดงออกมาในรูปของ **Errors** และ **Warnings** ซึ่งมีบทบาทและระดับความรุนแรงแตกต่างกันอย่างชัดเจน นอกจากนี้ยังทำงานร่วมกับ Issue Navigator ที่จะช่วยรวบรวม Compiler Errors และ Warnings ทั้งหมดไว้ในมุมมองเดียว ทำให้นักพัฒนามองเห็นภาพรวมของปัญหาในโปรเจกต์และสามารถจัดลำดับการแก้ไขได้อย่างเป็นระบบ

#### Playground เครื่องมือสำหรับทดลองเขียนและรันคำสั่งภาษา Swift

Playground เป็นสภาพแวดล้อมสำหรับการทดลองเขียนและรันโค้ดภาษา Swift แบบโต้ตอบ (Interactive) ซึ่งช่วยให้ผู้เรียนสามารถเห็นผลลัพธ์ของโค้ดได้ทันทีโดยไม่จำเป็นต้องสร้างโปรเจกต์แอปเต็มรูปแบบ เหมาะอย่างยิ่งสำหรับการเรียนรู้พื้นฐานการเขียนโปรแกรมภาษา Swift รวมทั้งการใช้เป็นพื้นที่สำหรับทดลองแนวคิด (Experimentation) ในการใช้ API ใหม่หรือ Framework ที่ยังไม่คุ้นเคย หรือใช้เพื่อตรวจสอบการความถูกต้องของฟังก์ชันหรืออัลกอริทึมก่อนนำไปผสานกับระบบจริง โดยไม่ต้องสร้างหรือปรับแก้โปรเจกต์แอปเต็มรูปแบบ

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FHkY7iRX5uI6uLFwAGNZB%2FScreenshot%202568-12-14%20at%2013.48.53.png?alt=media&#x26;token=add6f99b-d5b2-4a69-a5c4-f31bc295310b" alt=""><figcaption></figcaption></figure>

Playground ใน Xcode ไม่ได้จำกัดบทบาทเพียงเครื่องมือสำหรับผู้เริ่มต้นในการเรียนรู้การเขียนโปรแกรมภาษา Swift เท่านั้น แต่ยังเป็น**เครื่องมือสำคัญสำหรับนักพัฒนา** ในการทดลองเขียนและรันคำสั่งภาษา Swift อย่างรวดเร็วและปลอดภัย ช่วยสนับสนุนการตัดสินใจเชิงเทคนิค การออกแบบตรรกะของโปรแกรม และการพัฒนาแอปแบบเป็นระบบ

#### Coding Intelligence : ผู้ช่วยอัจฉริยะที่ยกระดับการเขียนโค้ด

Coding Intelligence ใน Xcode เป็นการผสานเทคโนโลยีปัญญาประดิษฐ์กับปรัชญาการพัฒนาซอฟต์แวร์ของ Apple อย่างลงตัว และยกระดับ Xcode จากเครื่องมือเขียนโค้ดแบบดั้งเดิมให้กลายเป็น **ผู้ช่วยอัจฉริยะที่สนับสนุนการคิด การเรียนรู้ และการตัดสินใจของนักพัฒนา** ทั้งในด้านการสำรวจโค้ด การสร้างฟีเจอร์ การแก้ไขข้อผิดพลาด และการดูแลคุณภาพของโค้ด&#x20;

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FTH9II0NxP1xOpk8QZ0LZ%2FScreenshot%202568-12-13%20at%2012.31.11.png?alt=media&#x26;token=cdd1e213-aa9f-486e-83b4-b13ad1e938de" alt="" width="563"><figcaption></figcaption></figure>

คุณสมบัติและความสามารถที่สำคัญในการใช้ Coding Intelligence

* นักพัฒนา **โต้ตอบกับโมเดลภาษาขนาดใหญ่ (Large Language Model)** ผ่านการสั่งงานด้วยภาษาธรรมชาติ นักพัฒนาสามารถตั้งคำถาม อธิบายความต้องการ หรือให้คำสั่งในการปรับแก้โค้ดได้โดยตรง
* การช่วย**สำรวจโค้ดที่ไม่คุ้นเคย** โดยนักพัฒนาสามารถถามคำถามในเชิงภาพรวม เช่น แอปนี้ทำอะไร มีโครงสร้างอย่างไร หรือไฟล์ใดที่เกี่ยวข้องบ้าง ความสามารถนี้จะช่วยลดอุปสรรคในการทำความเข้าใจโปรเจกต์ขนาดใหญ่ได้เป็นอย่างดี
* นักพัฒนาสามารถสั่งให้ Xcode สร้างหรือปรับแก้โค้ดทีละขั้น พร้อมตรวจสอบผลลัพธ์ผ่าน Preview หรือ Playground ได้อย่างต่อเนื่อง หากผลลัพธ์ยังไม่ตรงตามที่คาดหวัง ก็สามารถปรับคำสั่งให้ละเอียดขึ้นและทดลองใหม่ได้
* เมื่อเกิด Compiler Error หรือ Warning ระหว่างการ build แอป Coding Intelligence สามารถช่วยสร้างแนวทางแก้ไขให้โดยอัตโนมัติ นักพัฒนาสามารถดูคำอธิบายของปัญหา และเลือกให้ Xcode สร้าง Fix ที่เหมาะสม จากนั้นตรวจสอบและนำไปปรับใช้ได้ทันที
* สนับสนุนการสร้าง **Playground และ Preview** เพื่อให้นักพัฒนาทดลองโค้ดหรือทดสอบการออกแบบ UI ได้โดยไม่กระทบกับแอปหลัก
* การ**สร้างเอกสารประกอบโค้ด (Documentation)** โดยอัตโนมัติ นักพัฒนาสามารถสั่งให้ Xcode ช่วยร่างคำอธิบายของคลาส ฟังก์ชัน และพารามิเตอร์ได้อย่างรวดเร็ว ซึ่งจะช่วยส่งเสริมวัฒนธรรมการเขียนโค้ดที่มีเอกสารกำกับอย่างเป็นระบบ

#### การทดสอบการทำงานของแอป

Apple ได้ออกแบบ Xcode ให้เป็นสภาพแวดล้อมการพัฒนาแบบครบวงจร ที่สนับสนุนการทดสอบแอปได้ทั้งบน**อุปกรณ์เสมือน (Simulator)** และ**อุปกรณ์จริง (Physical Device)** ซึ่งทั้งสองแนวทางมีบทบาทแตกต่างกัน

**การทดสอบการทำงานบนอุปกรณ์เสมือน (Simulator)**

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2F0ikZcgOdZK2wzXXJICC1%2FScreenshot%202568-12-13%20at%2013.06.57.png?alt=media&#x26;token=8d36ddd9-ff5d-4cff-af8e-58384d39a1c7" alt=""><figcaption></figcaption></figure>

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FUWR3utnZWP1cf00sMsdK%2FScreenshot%202568-12-13%20at%2013.14.39.png?alt=media&#x26;token=5803f5c4-f454-4add-9f53-ac22e03738c0" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}

อุปกรณ์เสมือน หรือ Simulator คือ เครื่องมือที่ Xcode จัดเตรียมไว้เพื่อจำลองสภาพแวดล้อมของอุปกรณ์ Apple บนเครื่อง Mac โดยสามารถจำลอง iPhone, iPad หรืออุปกรณ์รุ่นต่างๆ พร้อมระบบปฏิบัติการเวอร์ชันที่หลากหลาย การทดสอบผ่าน Simulator มีข้อได้เปรียบที่สำคัญในด้าน **ความสะดวกและรวดเร็วในการพัฒนา**

Simulator ช่วยให้นักพัฒนาสามารถเริ่มต้นทดสอบแอปได้ทันทีโดยไม่ต้องมีอุปกรณ์จริง โดยสามารถสั่งรันแอปเพื่อดูผลลัพธ์ได้อย่างรวดเร็ว ทำให้เกิดวงจรการเรียนรู้แบบ *เขียน–รัน–ปรับปรุง* (Iterative Development) ซึ่งสอดคล้องกับแนวคิดการพัฒนาแบบ Agile&#x20;

นอกจากนี้ Simulator ยังเหมาะสำหรับการทดสอบด้าน **User Interface** และ **Layout** เช่น การปรับขนาดหน้าจอ การเปลี่ยน Orientation แต่อย่างไรก็ตาม Simulator ก็ยังคงเป็นเพียงการ “จำลอง” จึงไม่สามารถสะท้อนพฤติกรรมของฮาร์ดแวร์ในอุปกรณ์จริงได้ทั้งหมด เช่น ประสิทธิภาพของเซนเซอร์ กล้อง ความแม่นยำของ GPS หรือการจัดการพลังงานของแบตเตอรี่
{% endcolumn %}
{% endcolumns %}

**การทดสอบการทำงานของแอปบนอุปกรณ์จริง (Physical Device)**

การทดสอบแอปบนอุปกรณ์จริงเป็นขั้นตอนที่ช่วยยืนยันว่า แอปสามารถทำงานได้อย่างถูกต้องในสภาพแวดล้อมการใช้งานจริงของผู้ใช้ การเชื่อมต่อ iPhone หรือ iPad เข้ากับ Xcode เพื่อรันแอปบนอุปกรณ์จริง ทำให้นักพัฒนาสามารถตรวจสอบปัจจัยที่ Simulator ไม่สามารถจำลองได้อย่างสมบูรณ์  ในเชิงเทคนิค การทดสอบบนอุปกรณ์จริงมีความสำคัญต่อการประเมิน **ประสิทธิภาพ (Performance)** และ **พฤติกรรมของฮาร์ดแวร์** เช่น การตอบสนองของหน้าจอสัมผัส การทำงานของกล้อง ไมโครโฟน ระบบสั่น (Haptic) การเชื่อมต่อเครือข่าย รวมถึงการใช้ทรัพยากรของเครื่อง การทดสอบในลักษณะนี้ช่วยลดความเสี่ยงที่แอปจะทำงานผิดพลาดเมื่อถูกนำไปใช้งานจริง

ในการทดสอบการทำงานของแอปบนอุปกรณ์จริง นักพัฒนาต้องเตรียมบัญชี Apple ID สำหรับการพัฒนา ซึ่งสามารถดำเนินการได้ผ่านเว็บไซต์ <https://developer.apple.com/>&#x20;

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FxXRtcL4CVZY8wGhBRF05%2FScreenshot%202568-12-13%20at%2014.07.59.png?alt=media&#x26;token=4023753d-dcbf-48fa-aa4f-dfc2487eda0f" alt=""><figcaption></figcaption></figure>

สำหรับความแตกต่างระหว่างบัญชีผู้พัฒนา (Developer Account) แบบ **Free (Personal Team)** และแบบ **Apple Developer Program (ชำระเงิน 99 USD ต่อปี)** คือ สิทธิ์ในการเผยแพร่แอปบน App Store และการใช้งาน Capability ขั้นสูง เช่น Push Notifications, In-App Purchases, Sign in with Apple และ CloudKit

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FEdz3aXdsdg3uKYxKirhn%2FScreenshot%202568-12-13%20at%2015.15.27.png?alt=media&#x26;token=518bacdb-bc13-41ac-a8fa-6f681bcdeaa5" alt="" width="563"><figcaption></figcaption></figure>

เมื่อคุณมีบัญชีนักพัฒนาแลัว ให้เปิดคุณสมบัติ Developer Mode บนอุปกรณ์ที่คุณต้องการใช้ในการทดสอบ ซึ่งสามารถเปิดใช้คุณสมบัติดังกล่าวได้ที่ **Setting > Privacy & Security > Developer Mode** และกำหนดค่าให้เป็น On หลังจากนั้นให้เชื่อมต่ออุปกรณ์เข้ากับเครื่อง Mac ผ่านสาย USB หรืออาจใช้การเชื่อมต่อแบบไร้สาย (Wireless Debugging) เมื่อสร้างการเชื่อมต่อได้สำเร็จแล้ว Xcode จะตรวจพบอุปกรณ์ดังกล่าวโดยอัตโนมัติ ซึ่งจะสามารถเลือกอุปกรณ์นั้นจากรายการ Run Destination ได้ &#x20;

เนื่องจากแอปที่ติดตั้งบนอุปกรณ์จริง จำเป็นจะต้องผ่านขั้นตอนการยืนยันแหล่งที่มา ซึ่งเป็นกระบวนการทางความปลอดภัยที่เรียกว่า **Code Signing** ซึ่งถูกใช้เพื่อการระบุว่าแอปถูกสร้างโดยนักพัฒนาที่เชื่อถือได้และโค้ดของแอปไม่ได้ถูกแก้ไขหรือดัดแปลงหลังจากผ่านกระบวนการสร้าง (Build) แล้ว สำหรับบัญชีผู้พัฒนาแบบ Free ให้ดำเนินการดังนี้

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2Fw9f7ISsf5JzDQ4eug9F3%2F005.png?alt=media&#x26;token=5609fa2a-b945-4831-acba-763c6aa66706" alt=""><figcaption></figcaption></figure>

1. เปิดการตั้งค่าโปรเจกต์ใน Xcode และไปที่แท็บ **Signing & Capabilities**
2. คลิกที่**ปุ่ม Team** เพื่อเชื่อมโยงกับบัญชี Apple ID สำหรับการพัฒนา โดยตรวจสอบให้แน่ใจว่า Bundle Identifier ของแอปไม่ซ้ำกับแอปอื่นที่เคยสร้างไว้ และเปิดใช้งาน Automatic Signing
3. กำหนดเป้าหมายที่ Toolbar ของ Xcode โดยเลือกอุปกรณ์จริงที่เชื่อมต่ออยู่เป็น Run Destination
4. คลิกที่ปุ่ม Run

{% columns %}
{% column width="41.66666666666667%" %}

<figure><img src="https://4231024757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsZnVMse0g3n4jQHTLUCx%2Fuploads%2FnUb5l3LKvyDGWNkCZjak%2F006.png?alt=media&#x26;token=16c1d06c-c731-4135-b013-dffbd2615c33" alt="" width="375"><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="58.33333333333333%" %}
หลังจากติดตั้งแอปบนอุปกรณ์เสร็จแล้ว การเรียกแอปขึ้นมาทำงานครั้งแรกจำเป็นต้องมีการยืนยันสิทธิ์ของนักพัฒนา  (Trust Developer) บนอุปกรณ์เป็นขั้นตอนสุดท้าย โดยสามารถดำเนินการได้ที่ **Setting > General > VPN & Device Management** ภายใต้หัวข้อ **Developer App** จะปรากฏชื่อ Apple ID หรือ Team ที่ใช้พัฒนาแอป ให้แตะเลือกที่ชื่อดังกล่าวเพื่อทำการยืนยันสิทธิ์นักพัฒนาบนอุปกรณ์
{% endcolumn %}
{% endcolumns %}

ในการพัฒนาแอปที่มีคุณภาพ นักพัฒนาควรใช้การทดสอบทั้งสองแบบร่วมกันอย่างเหมาะสม โดยเริ่มต้นจากการใช้ Simulator เพื่อพัฒนาและปรับปรุงโค้ดอย่างรวดเร็ว หลังจากนั้นจึงทำการทดสอบบนอุปกรณ์จริงเพื่อยืนยันความถูกต้องและประสบการณ์ใช้งานจริงก่อนนำแอปไปเผยแพร่บน App Store

#### **แนวทางในการจัดกิจกรรมการเรียนรู้**

ดาวน์โหลดเอกสารประกอบการทำกิจกรรมในห้องปฏิบัติการ [ที่นี่](https://silanukprach.com/materials/developinswift/swiftui/SwiftUI_Lab_000.pdf)\
ดาวน์โหลดสไลด์สำหรับใช้ประกอบการสอน [ที่นี่](https://silanukprach.com/materials/developinswift/swiftui/Slide_SwiftUI_MeetXcode.pdf)

#### **เอกสารอ้างอิง**

* Meet Xcode : <https://developer.apple.com/tutorials/develop-in-swift/meet-xcode>
* Exploring the Structure of a SwiftUI App : <https://developer.apple.com/tutorials/swiftui-concepts/exploring-the-structure-of-a-swiftui-app>
* Running your app in Simulator or on a device : <https://developer.apple.com/documentation/xcode/running-your-app-in-simulator-or-on-a-device>

{% hint style="info" %}
**รายละเอียดเพื่อการอ้างอิง**&#x20;

**ผู้เขียน** ธิติ ธีระเธียร \
**วันที่เผยแพร่** วันที่ 15 ธันวาคม 2568 \
**วันที่ปรุงปรุงล่าสุด** วันที่ 15 ธันวาคม 2568  \
**เข้าถึงได้จาก** <https://ajthiti.gitbook.io/develop-in-swift/meet-xcode>\
**เงื่อนใขในการใช้งาน** This work is licensed under a [Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License](http://creativecommons.org/licenses/by-nc-nd/4.0/).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ajthiti.gitbook.io/develop-in-swift/meet-xcode.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
