Info.plist: คืออะไร, คีย์ที่จำเป็นและการตั้งค่าเริ่มต้น

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-31 เวลาอ่าน: 8 นาที

Info.plist คือไฟล์การตั้งค่า XML สำหรับแอปพลิเคชัน iOS และ macOS ที่มีเมตาดาต้า, การอนุญาตและการตั้งค่าเริ่มต้น โดยระบบจะประมวลผลก่อนการเริ่มต้นโค้ดแอปพลิเคชัน ตาม Apple Developer, 2025 หากไม่มี Info.plist ที่ตั้งค่าอย่างถูกต้อง แอปพลิเคชันจะไม่ผ่านการตรวจสอบ App Store Info.plist กำหนดตัวระบุบันเดิล, เวอร์ชันบิลด์, การอนุญาตที่ขอและทิศทางหน้าจอที่รองรับ

หัวข้อสำคัญ

  • Info.plist คือพจนานุกรม XML ที่มีคีย์การตั้งค่าแอปพลิเคชัน iOS/macOS ในรูปแบบ plist
  • Bundle identifier คือตัวระบุเฉพาะของแอปพลิเคชันในระบบนิเวศ Apple สำหรับการลงชื่อและบริการ
  • คีย์ความเป็นส่วนตัว (NSCameraUsageDescription) จำเป็นสำหรับการเข้าถึงกล้อง, ไมโครโฟนและตำแหน่งที่ตั้งภูมิศาสตร์
  • Custom URL schemes ถูกตั้งค่าผ่านคีย์ CFBundleURLTypes สำหรับลิงก์ลึก
  • UIRequiredDeviceCapabilities กำหนดข้อกำหนดขั้นต่ำของอุปกรณ์สำหรับการติดตั้งจาก App Store

Info.plist คืออะไร

Info.plist คือไฟล์ในรูปแบบ XML ที่มีองค์ประกอบรากเป็น dict ประกอบด้วยคู่คีย์-ค่าในรูปแบบ property list ไฟล์นี้อยู่ภายในบันเดิลแอปพลิเคชันและถูกอ่านโดยระบบทุกครั้งที่เริ่มต้นก่อนการดำเนินการโค้ด รูปแบบ plist รองรับสตริง, ตัวเลข, อาร์เรย์, พจนานุกรม, วันที่และค่าบูลีน ทำให้สามารถอธิบายการตั้งค่าที่ซับซ้อนได้

Apple ใช้ Info.plist เพื่อกำหนดตัวตน, ขีดความสามารถและข้อกำหนดของแอปพลิเคชัน การเปลี่ยนคีย์บางตัวต้องมีการสร้าง บันเดิล ใหม่ เนื่องจากมันส่งผลต่อเมตาดาต้าที่ App Store ตรวจสอบเมื่ออัปโหลดบิลด์ ตัวอย่างเช่น การเปลี่ยน CFBundleVersion หรือ CFBundleIdentifier หลังจากการเผยแพร่อาจทำให้กระบวนการอัปเดตแอปพลิเคชันเสียหาย เนื่องจาก App Store Connect ใช้ค่าเหล่านี้ในการระบุเวอร์ชัน

คีย์พื้นฐานจะถูกสร้างโดยอัตโนมัติเมื่อสร้างโปรเจกต์ใน Xcode แต่ส่วนใหญ่ของ การตั้งค่า จะถูกเพิ่มด้วยตนเองเมื่อฟังก์ชันการทำงานของแอปพลิเคชันพัฒนา Xcode มีโปรแกรมแก้ไข Info.plist แบบกราฟิกที่มีรายการเลือกแบบเลื่อนลงสำหรับคีย์มาตรฐาน ช่วยลดความเสี่ยงจากการพิมพ์ผิด อย่างไรก็ตาม สำหรับการตั้งค่าที่ซับซ้อนเช่น Scene Manifest หรือ Background Modes แนะนำให้แก้ไข XML ต้นฉบับโดยตรง

คีย์ Info.plist ที่จำเป็น

คีย์ Info.plist บางตัวเป็น ข้อกำหนด สำหรับการเผยแพร่ใน App Store การขาดคีย์เหล่านี้จะนำไปสู่การปฏิเสธบิลด์ในขั้นตอนการตรวจสอบความถูกต้อง Apple ตรวจสอบคีย์เหล่านี้โดยอัตโนมัติเมื่ออัปโหลดไฟล์ถ่านผ่าน Xcode Organizer หรือ Transporter นักพัฒนาต้องให้แน่ใจว่าช่องข้อมูลที่จำเป็นทั้งหมดถูกกรอกอย่างถูกต้องก่อนส่งเพื่อตรวจสอบ

ตัวระบุบันเดิล

คีย์ CFBundleIdentifier กำหนดตัวระบุเฉพาะของแอปพลิเคชันในรูปแบบการกำหนดชื่อโดเมนย้อนกลับ (com.company.appname) ใช้สำหรับการลงชื่อโค้ด, การแจ้งเตือนแบบ Push, CloudKit, App Groups และบริการ Apple อื่นๆ อีกมากมาย การเปลี่ยนตัวระบุหลังจากการเผยแพร่จะถูก App Store ถือว่าเป็นแอปพลิเคชันใหม่ และผู้ใช้ที่มีอยู่จะไม่ได้รับการอัปเดต ดังนั้น ตัวระบุต้องคงที่ไม่เปลี่ยนแปลงตลอดวงจรชีวิตของแอปพลิเคชัน

xml
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>

เวอร์ชันแอปพลิเคชัน

คีย์ CFBundleShortVersionString (เวอร์ชันที่แสดง) และ CFBundleVersion (หมายเลขบิลด์) ถูกใช้โดย App Store Connect และระบบสำหรับการจัดการอัปเดต เวอร์ชันจะถูกระบุในรูปแบบ major.minor.patch หมายเลขบิลด์ต้องเพิ่มขึ้นทุกครั้งที่อัปโหลดบิลด์ไปยัง App Store Connect แม้ว่าเวอร์ชันแอปพลิเคชันจะไม่เปลี่ยนแปลง Apple ใช้ CFBundleVersion เพื่อพิจารณาว่าบิลด์ใหม่หรือซ้ำกับบิลด์ที่อัปโหลดไปแล้ว หากหมายเลขบิลด์ตรงกับบิลด์ที่อัปโหลดไปก่อนหน้านี้ จะส่งข้อผิดพลาด ITMS-90161 กลับมา

xml
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>

ทิศทางหน้าจอที่รองรับ

คีย์ UISupportedInterfaceOrientations กำหนดทิศทางหน้าจอที่รองรับสำหรับ iPhone สำหรับ iPad จะใช้คีย์แยกต่างหาก UISupportedInterfaceOrientations~ipad ที่มีคำต่อท้ายของอุปกรณ์ แต่ละทิศทางจะถูกระบุเป็นสตริง: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown หากแอปพลิเคชันรองรับเฉพาะแนวตั้งและไม่ใช่สำหรับ iPhone เท่านั้น App Store จะปฏิเสธบิลด์หากระบุเฉพาะแนวตั้งสำหรับ iPad

xml
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
</array>

การอนุญาตและคีย์ความเป็นส่วนตัว

ตั้งแต่ iOS 10, Apple กำหนดให้มี คำอธิบาย สำหรับการอนุญาตแต่ละครั้งที่ขอผ่านคีย์ที่มีคำนำหน้า NS (NeXTStep) คำอธิบายจะแสดงต่อผู้ใช้ในไดอะล็อกระบบเมื่อขอเข้าถึง API ส่วนตัวครั้งแรก การขาดคีย์ NS ที่สอดคล้องเมื่อเรียก API ที่ต้องมีการอนุญาตจะทำให้แอปพลิเคชันหยุดทำงานทันทีด้วยข้อยกเว้นซึ่งจะถูกบันทึกไว้ในบันทึกความผิดพลาดเท่านั้น

คีย์วัตถุประสงค์
NSCameraUsageDescriptionเข้าถึงกล้องเพื่อถ่ายรูปและวิดีโอ
NSPhotoLibraryUsageDescriptionเข้าถึงไลบรารีรูปภาพ
NSLocationWhenInUseUsageDescriptionตำแหน่งที่ตั้งภูมิศาสตร์ขณะใช้งาน
NSMicrophoneUsageDescriptionเข้าถึงไมโครโฟนสำหรับบันทึกเสียง
NSContactsUsageDescriptionเข้าถึงรายชื่อติดต่อของอุปกรณ์

แต่ละคีย์ความเป็นส่วนตัวต้องมี คำอธิบาย ที่ผู้ใช้สามารถเข้าใจได้ถึงเหตุผลของการขอ ข้อความที่ว่างเปล่าหรือเทมเพลต เช่น "สำหรับการทำงานของแอป" หรือ "ต้องการเข้าถึง" จะนำไปสู่การปฏิเสธ App Store คำอธิบายต้องอธิบายฟังก์ชันการทำงานเฉพาะ: "จำเป็นต้องเข้าถึงกล้องเพื่อสแกน QR โค้ดและสร้างรูปโปรไฟล์" แนะนำให้ใช้เวอร์ชันที่แปลเป็นภาษาท้องถิ่นของคำอธิบายผ่านไฟล์ InfoPlist.strings สำหรับแต่ละภาษาที่รองรับ

การขาดคีย์ NS ที่จำเป็นเมื่อเรียก API ที่เข้าถึงข้อมูลส่วนตัวจะทำให้แอปพลิเคชัน ขัดข้อง ระบบจะสิ้นสุดกระบวนการด้วยข้อยกเว้น ซึ่งจะสังเกตเห็นได้เฉพาะในบันทึกรายงานความผิดพลาดจาก Xcode หรือ Firebase Crashlytics ผู้ใช้จะเห็นเพียงการปิดแอปพลิเคชันอย่างกะทันหันโดยไม่มีคำอธิบายใดๆ ดังนั้น ก่อนเพิ่มฟังก์ชันการทำงานใหม่ที่ใช้กล้อง, ไมโครโฟนหรือตำแหน่งที่ตั้ง ต้องเพิ่มคีย์ความเป็นส่วนตัวที่สอดคล้องก่อนใน Info.plist แล้วจึงนำไปใช้การเรียก API

Custom URL Schemes และ App Links

คีย์ CFBundleURLTypes ลงทะเบียนรูปแบบ URL ที่กำหนดเองสำหรับลิงก์ลึกในแอปพลิเคชัน ซึ่งทำให้สามารถเปิดแอปพลิเคชันจากเบราว์เซอร์, อีเมลหรือแอปพลิเคชันอื่นๆ ผ่านลิงก์เช่น myapp://profile/123 แต่ละรูปแบบระบุแอปพลิเคชันอย่างเฉพาะ: หากสองแอปพลิเคชันลงทะเบียนรูปแบบเดียวกัน ระบบจะแสดงไดอะล็อกให้ผู้ใช้เลือกว่าใช้แอปพลิเคชันใด

xml
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.itsectr.myapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

เพื่อรองรับ Universal Links จำเป็นต้องมีคีย์ com.apple.developer.associated-domains ในไฟล์ Entitlements ไม่ใช่ใน Info.plist Universal Links จะทำงานเมื่อมีไฟล์ apple-app-site-association ที่ตั้งค่าไว้บนเซิร์ฟเวอร์ ซึ่งเชื่อมโยงโดเมนกับแอปพลิเคชัน แตกต่างจากรูปแบบ URL ที่กำหนดเอง Universal Links จะไม่แสดงไดอะล็อกยืนยันและไม่ขัดแย้งกับแอปพลิเคชันอื่นๆ เนื่องจากใช้ลิงก์ HTTPS แทนรูปแบบที่กำหนดเอง อย่างไรก็ตาม ต้องใช้โดเมนที่มีใบรับรอง SSL ที่ถูกต้อง

รูปแบบที่กำหนดเองสามารถขัดแย้งกับ รูปแบบ มาตรฐานของ iOS แนะนำให้ใช้รูปแบบที่มีความยาวอย่างน้อย 4 ตัวอักษรเพื่อลดการชนกับแอปพลิเคชันอื่นๆ ตัวอย่างเช่น รูปแบบ "fb" สั้นเกินไปและอาจขัดแย้งได้ ควรใช้สัญกรณ์ย้อนกลับ: myapp:// แทน app:// นอกจากนี้ หากแอปพลิเคชันถูกลบแต่แอปพลิเคชันอื่นได้ลงทะเบียนรูปแบบเดียวกันไว้ ผู้ใช้อาจพบพฤติกรรมที่ไม่คาดคิดเมื่อนำทางผ่านลิงก์

การตั้งค่าเริ่มต้นและโหมดพื้นหลัง

คีย์ UIBackgroundModes ประกาศความสามารถพื้นหลังของแอปพลิเคชัน แต่ละโหมดต้องมีคำอธิบายที่สอดคล้องใน Info.plist และการยืนยันในความสามารถของโปรเจกต์ Xcode หากไม่ระบุโหมด ระบบอาจบังคับให้สิ้นสุดงานพื้นหลังหลังจาก 30 วินาทีหรือเมื่อทรัพยากรไม่เพียงพอ

xml
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>remote-notification</string>
    <string>location</string>
    <string>processing</string>
</array>

คีย์ UIApplicationSupportsMultipleScenes เปิดใช้การรองรับการทำงานหลายอย่างพร้อมกันบน iPad และ Mac Catalyst หากไม่มีคีย์นี้ แอปพลิเคชันจะไม่สามารถใช้ SwiftUI ScenePhase หรือ UIKit UISceneDelegate เพื่อจัดการหลายหน้าต่าง บน iPadOS ผู้ใช้สามารถเปิดหลายหน้าต่างของแอปพลิเคชันเดียวกัน ลากเนื้อหาระหว่างกันและใช้ Split View หากแอปพลิเคชันไม่รองรับโหมดหลายหน้าต่าง การตั้งค่าคีย์นี้เป็น false จะปิดการทำงานที่สอดคล้อง

คีย์ LSRequiresIPhoneOS ห้ามการติดตั้งแอพบน iPad ใช้สำหรับแอปพลิเคชันที่ใช้ได้เฉพาะ iPhone ที่ไม่รองรับอินเทอร์เฟซ iPad หรือไม่ได้ปรับให้เข้ากับหน้าจอขนาดใหญ่ อย่างไรก็ตาม Apple ไม่แนะนำให้ใช้คีย์นี้โดยไม่จำเป็น เนื่องจากผู้ใช้คาดหวังว่าแอปพลิเคชันจะทำงานบนอุปกรณ์ทั้งหมดที่ใช้ iOS และ iPadOS หากแอปพลิเคชันยังคงจำกัดเฉพาะ iPhone ให้แน่ใจว่าข้อกำหนดนี้มีเหตุผลทางเทคนิคและระบุไว้ในคำอธิบาย App Store

คีย์ UIViewControllerBasedStatusBarAppearance ควบคุมรูปแบบแถบสถานะ หากตั้งเป็น NO รูปแบบแถบสถานะจะถูกตั้งเป็นส่วนกลางผ่านคีย์ Info.plist UIStatusBarStyle หาก YES (ค่าเริ่มต้นตั้งแต่ iOS 7) แต่ละ ViewController สามารถจัดการแถบสถานะของตนเองโดยการแทนที่ preferredStatusBarStyle สำหรับแอปพลิเคชันสมัยใหม่ แนะนำให้เก็บ YES เพื่อให้มีรูปแบบแถบสถานะที่แตกต่างกันบนหน้าจอต่างๆ เช่น สว่างบนพื้นหลังมืดและมืดบนพื้นหลังสว่าง

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

คีย์ NSAppTransportSecurity จัดการการเชื่อมต่อเครือข่ายของแอปพลิเคชัน ตั้งแต่ iOS 9, App Transport Security (ATS) จะบล็อกการเชื่อมต่อ HTTP ทั้งหมดโดยค่าเริ่มต้น และต้องการ HTTPS เพื่ออนุญาตคำขอ HTTP ไปยังโดเมนเฉพาะชั่วคราว จะใช้พจนานุกรม NSExceptionDomains ภายใน NSAppTransportSecurity สำหรับการพัฒนา อนุญาตให้ปิดการใช้งาน ATS โดยสมบูรณ์ผ่าน NSAllowsArbitraryLoads = true แต่ Apple ต้องการเหตุผลและจะไม่อนุญาตบิลด์ดังกล่าวโดยไม่มีเหตุผลที่ถูกต้อง ในบิลด์สำหรับการผลิต ATS ต้องเปิดใช้งานสำหรับทุกโดเมนที่จัดการข้อมูลผู้ใช้

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

หา Info.plist ในโปรเจกต์ Xcode ได้ที่ไหน?

ไฟล์ Info.plist อยู่ในโฟลเดอร์โปรเจกต์โดยมีชื่อตรงกับชื่อแอปพลิเคชัน ใน Xcode จะแสดงในตัวนำทางโปรเจกต์ภายในกลุ่ม Supporting Files โดยมีไอคอนหนังสือสีน้ำเงิน นอกจากนี้ยังสามารถค้นหาได้ผ่านการค้นหา Spotlight ในโปรเจกต์

สามารถแก้ไข Info.plist ด้วยตนเองได้หรือไม่?

ได้, Info.plist สามารถแก้ไขในโปรแกรมแก้ไขข้อความใดๆ หรือผ่านส่วนติดต่อแบบกราฟิกของ Xcode การแก้ไขด้วยตนเองช่วยให้ควบคุมเนื้อหาได้อย่างสมบูรณ์แต่ต้องใส่ใจกับไวยากรณ์ XML: แต่ละคำสั่งเปิด <key> ต้องมี </key> ที่สอดคล้อง และประเภทข้อมูลต้องตรงกับสิ่งที่ Apple คาดหวัง

Info.plist ในโปรเจกต์ SwiftUI คืออะไร?

ในโปรเจกต์ SwiftUI Info.plist ทำงานเหมือนกับโปรเจกต์ UIKit นอกจากนี้ คีย์ UIApplicationSceneManifest อาจจำเป็นสำหรับการตั้งค่า Scene หากโปรเจกต์ไม่ใช้โปรโตคอล App สำหรับการจัดการ Scene โปรโตคอล App ของ SwiftUI จะสร้างการตั้งค่า Scene โดยอัตโนมัติ แต่การปรับแต่งต้องเพิ่มคีย์ด้วยตนเอง

วิธีเพิ่มคีย์ที่กำหนดเองใน Info.plist?

เปิด Info.plist ใน Xcode คลิกปุ่มบวกและป้อนชื่อ คีย์ สำหรับคีย์ที่กำหนดเอง ให้ใช้คำนำหน้าบริษัทเพื่อหลีกเลี่ยงการขัดแย้งกับคีย์ระบบของ Apple เช่น ITSCustomKey แทนที่จะเป็น CustomKey เพียงอย่างเดียว ประเภทค่า (String, Number, Array, Dictionary) จะถูกเลือกตามรูปแบบข้อมูลที่คาดหวัง

ทำไม App Store ถึงปฏิเสธบิลด์ของฉันเพราะ Info.plist?

สาเหตุทั่วไป: ขาดคีย์ความเป็นส่วนตัวสำหรับ การอนุญาต ที่ขอ, CFBundleIdentifier ไม่ถูกต้อง, เวอร์ชันไม่ตรงกันระหว่าง Info.plist และ App Store Connect, ค่า NS คีย์ว่างเปล่า ตรวจสอบคีย์ NS ทั้งหมดสำหรับ API ที่ใช้และให้แน่ใจว่าแต่ละคำอธิบายมีคำอธิบายที่มีความหมายในภาษาที่แปลเป็นท้องถิ่นของแอปพลิเคชัน

สรุป

  • Info.plist คือการตั้งค่า XML สำหรับแอป iOS/macOS ที่มีเมตาดาต้า, การอนุญาตและการตั้งค่าเริ่มต้น
  • CFBundleIdentifier และ CFBundleVersion เป็นคีย์ที่จำเป็นสำหรับการระบุและการเผยแพร่ App Store
  • คีย์ความเป็นส่วนตัว (NSCameraUsageDescription) จำเป็นสำหรับการเข้าถึงกล้อง, ไมโครโฟนและ API ส่วนตัวอื่นๆ
  • Custom URL schemes ถูกตั้งค่าผ่าน CFBundleURLTypes, Universal Links ผ่าน Entitlements และ apple-app-site-association
  • UIBackgroundModes ประกาศความสามารถพื้นหลังสำหรับการทำงานในพื้นหลังที่ถูกต้อง
  • การขาด คีย์ที่จำเป็นนำไปสู่การขัดข้องของแอปหรือการปฏิเสธบิลด์ App Store
  • การแก้ไข Info.plist สามารถทำได้ผ่านอินเทอร์เฟซ Xcode หรือโปรแกรมแก้ไขข้อความที่มีการควบคุมไวยากรณ์ XML

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม