# Introduction to Xcode

## โปรเจคของเรา

หลังจากที่เราสร้างโปรเจคเสร็จ สิ่งแรกที่เราจะเห็นคือ หน้า Setting ค่าต่าง ๆ ในโปรเจคของเรา โดยใน**ส่วนแรกตรงกลางจอ** คือค่าต่าง ๆ ที่เราใส่ตอนสร้างโปรเจคในบทก่อนหน้า

![Xcode หลังจาก create project](https://759097476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FuqWEUpYllBlpWTYMEIgR%2Fuploads%2FO9vCT6W5vt0Sn4gVX9uj%2FScreen%20Shot%202022-06-25%20at%2010.32.26%20PM.png?alt=media\&token=9d109440-40a6-4ad0-8811-57064beb2039)

ในส่วนของ Deployment Info จะเป็นส่วนที่กำหนดเพิ่มเติม โดยทั่วไปเราจะดูส่วน&#x20;

**Deployment Target** ระบุว่า iOS version ขั้นต่ำที่เราจะรองรับ\
**Devices** เราสามารถเลือกซัพพอร์ต iPhone, iPad, Mac Catalyst\
**Main Interface** ระบุว่า Storyboard แรกที่จะใช้งานคืออันไหน กรณีนี้คือ Main.storyboard\
**Device Orientation** ระบุว่าเรารองรับหน้าจอแนวไหน แนวตั้งหรือแนวนอน

![Deployment Info](https://759097476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FuqWEUpYllBlpWTYMEIgR%2Fuploads%2FDetiRRQmQISRgnApOwA8%2FScreen%20Shot%202022-06-25%20at%2010.35.20%20PM.png?alt=media\&token=e0507522-e0a0-43a6-8ec5-4f4bcb16a16c)

## Navigator

ด้านซ้ายมือจะเป็น Navigator ไปยังส่วนต่าง ๆ ที่เรามักจะใช้บ่อยคือ

**Project Navigator** ใช้ในการดูและเข้าถึงไฟล์ต่าง ๆ ในโปรเจคของเรา\
**Source Control** ใช้ในการดู Git changes และ repositories\
**Symbol** ใช้ในการดู structure ของ Type ต่าง ๆ ที่เราใช้ในโค้ดของเรา\
**Search** ใช้ในการค้นหา\
**Issue** ใช้แสดง warning และ error ต่าง ๆ ที่เกิดขึ้นในแอปของเรา\
**Test** ส่วนที่แสดงรายการเทสเคส และผลลัพธ์ทั้งหมดของโปรเจคเรา\
**Debug** ใช้ในการ monitor แอปของเราเมื่อเรารันใน Debug mode\
**Breakpoint** แสดง breakpoint ทั้งหมดที่เราใส่ไว้\
**Report** ส่วนที่แสดง log การทำงานต่าง ๆ เช่น Build log, Test log&#x20;

เมื่อเราสร้างเป็น App เสร็จแล้ว Xcode จะสร้างไฟล์ต่าง ๆ ให้ดังนี้

1. **AppDelegate.swift** จะเป็นไฟล์ที่ใช้จัดการ event หรือสถานะต่าง ๆ ที่แชร์กันระดับทั้งแอป เช่น การจัดการเมื่อได้รับ Notification
2. **SceneDelegate.swift** จะเป็นไฟล์ที่ทำหน้าที่จัดการหน้าต่างหรือหน้าจอของแอป จะกล่าวอีกทีใน [Scene-Based Life-Cycle](scene-based-life-cycle)
3. **ViewController.swift** เป็น controller แรกที่ Xcode สร้างมาให้ผูกกับหน้าจอแรกใน storyboard
4. **Main.storyboard** ใช้ในการสร้างหน้าจอและจัดการการเชื่อมโยงหน้าจอต่าง ๆ แบบแผนภาพ
5. **Assets.xcassets** ใช้ในการเก็บรูปต่าง ๆ เช่น รูป icon ของ แอป
6. **LaunchScreen.storyboard** ใช้ออกแบบหน้าจอในขณะที่โหลดเปิดแอป
7. **Info.plist** ใช้ในการคอนฟิกค่าต่าง ๆ ของแอป
8. **TodoAppTests** เป็นที่เก็บไฟล์ Unit test ของเรา
9. **TodoAppUITests** เป็นที่เก็บ UI test ของเรา

{% hint style="info" %}
ก่อน iOS 13 การจัดการ Life cycle ของแอปทั้งหมดจะอยู่ที่ AppDelegate เพียงตัวเดียว แต่ใน iOS 13 เป็นต้นมา ใน iPad จะสามารถแสดงหน้าจอได้หลายหน้าจอ จึงมีการแยกหน้าที่ความรับผิดชอบในการจัดการส่วนของหน้าจอออกมาจาก AppDelegate เป็น SceneDelegate ขึ้นมาอีกตัวนึง
{% endhint %}

![ตัวอย่าง Project Navigator](https://759097476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FuqWEUpYllBlpWTYMEIgR%2Fuploads%2FxEr2GaDxSJHFs1yr1Fxi%2FScreen%20Shot%202022-06-25%20at%2010.38.24%20PM.png?alt=media\&token=dcc7cf86-d38b-4fb1-b29f-755c359e952b)

{% hint style="info" %}
เราสามารถกด cmd + 1, cmd + 2, +3, +4, ... ในการสลับ navigator ต่าง ๆ ได้
{% endhint %}
