โปรไฟล์การจัดเตรียมเชื่อมโยงใบรับรองนักพัฒนา ตัวระบุแอป และรายการอุปกรณ์ที่อนุญาตสำหรับการลงนามโค้ดแอปพลิเคชัน iOS ตาม Apple Developer Documentation, 2026 โปรไฟล์จำเป็นสำหรับการเรียกใช้แอปบนอุปกรณ์จริง — หากไม่มี Xcode จะไม่สามารถติดตั้งบิลด์บน iPhone หรือ iPad ได้ ในบทความนี้เราจะกล่าวถึงโครงสร้าง ประเภท และกระบวนการสร้างโปรไฟล์
ประเด็นสำคัญ
โปรไฟล์การจัดเตรียม คือไฟล์กำหนดค่าดิจิทัลในรูปแบบ .mobileprovision (สำหรับ iOS) หรือ .provisionprofile (สำหรับ macOS) ที่ Apple ใช้ควบคุมการติดตั้งและเรียกใช้แอพบนอุปกรณ์ โปรไฟล์ประกอบด้วยข้อมูลเมตาการลงนามโค้ด ซึ่งหากไม่มีแล้วแอปจะไม่สามารถทำงานบน iPhone, iPad หรือ Apple Watch จริงได้ — จำลองไม่ต้องใช้โปรไฟล์เนื่องจากโค้ดไม่ได้ลงนามเพื่อทำงานบนโปรเซสเซอร์จริง
โปรไฟล์ออกผ่าน Apple Developer Portal และมีวันหมดอายุ — โดยปกติหนึ่งปีสำหรับโปรไฟล์ Development และ Distribution ตามนโยบายของ Apple โปรไฟล์จะเชื่อมโยงโดยอัตโนมัติกับใบรับรอง Apple Developer Program ที่ใช้ลงนาม: หากใบรับรองถูกเพิกถอนหรือหมดอายุ โปรไฟล์จะหยุดทำงาน
แต่ละโปรไฟล์มี UUID เฉพาะที่ Xcode ใช้ระบุโปรไฟล์ในพวงกุญแจ Xcode จะเลือกโปรไฟล์ที่เหมาะสมโดยอัตโนมัติเมื่อสร้าง แต่ผู้พัฒนาสามารถแทนที่การเลือกได้ในการตั้งค่า Signing & Capabilities สามารถติดตั้งโปรไฟล์จำนวนไม่จำกัดบนอุปกรณ์เครื่องเดียว — ระบบจัดการอุปกรณ์เคลื่อนที่ (MDM) ของ Apple ใช้สิ่งนี้สำหรับการกระจายแอประดับองค์กร
การลงนามโค้ด เป็นเหตุผลหลักที่โปรไฟล์มีอยู่ Apple กำหนดให้แอปทุกตัวที่ทำงานบนอุปกรณ์ iOS ต้องลงนามด้วยใบรับรองที่ออกโดย Apple โปรไฟล์การจัดเตรียมทำหน้าที่เป็นตัวเชื่อม: ยืนยันว่าผู้พัฒนามีสิทธิ์เรียกใช้แอปบนอุปกรณ์นั้น ตาม Apple Security Guide (2025) กลไกโปรไฟล์ป้องกันการติดตั้งมัลแวร์บนอุปกรณ์ผู้ใช้แม้ว่าใบรับรองนักพัฒนาจะถูกบุกรุก
โปรไฟล์ยังกำหนดว่าบริการระบบใดบ้างที่พร้อมใช้งานสำหรับแอป หากแอปใช้การแจ้งเตือน Push Apple Push Notification service (APNs) ต้องมี entitlements ที่ถูกต้องภายในโปรไฟล์ หากไม่มี การแจ้งเตือนจากเซิร์ฟเวอร์จะไม่ถูกส่งไปยังอุปกรณ์ กฎเดียวกันนี้ใช้กับ iCloud, App Groups, Wallet, HealthKit และเฟรมเวิร์กอื่น ๆ ของ Apple
นักพัฒนามักสับสนระหว่างโปรไฟล์การจัดเตรียมกับ ใบรับรอง Apple ใบรับรองเป็นเอกสารดิจิทัลที่ยืนยันตัวตน (ผู้ลงนาม) ในขณะที่โปรไฟล์เป็นการกำหนดค่า (แอปใด บนอุปกรณ์ใด มีสิทธิ์ใด) ใบรับรองหนึ่งสามารถใช้ได้ในหลายโปรไฟล์ และหนึ่งโปรไฟล์เชื่อมโยงกับใบรับรองเดียวเท่านั้น Apple แนะนำให้สร้างโปรไฟล์แยกสำหรับแต่ละแอปและแต่ละสถานการณ์ — Development, Ad Hoc, App Store
กระบวนการลงนามแอปประกอบด้วยหลายขั้นตอนต่อเนื่อง Xcode นำไฟล์ไบนารีของแอป (App Bundle) ลงนามด้วยคีย์ส่วนตัวของนักพัฒนา ฝังโปรไฟล์การจัดเตรียมลงไป และส่งไปยังอุปกรณ์ อุปกรณ์ตรวจสอบลายเซ็นด้วยคีย์สาธารณะของ Apple เปรียบเทียบ UUID ของโปรไฟล์กับรายการโปรไฟล์ที่เชื่อถือได้ในระบบ และเรียกใช้แอปเฉพาะเมื่อการตรวจสอบทั้งหมดสำเร็จ
เมื่อผู้ใช้ดาวน์โหลดแอปจาก App Store กลไกจะแตกต่าง App Store Connect ลงนามแอปอีกครั้งด้วยใบรับรอง Distribution ของ Apple แทนที่โปรไฟล์นักพัฒนาด้วยโปรไฟล์ Store ซึ่งหมายความว่าแอปที่เผยแพร่ผ่าน App Store ทางเทคนิคแล้วลงนามโดย Apple ไม่ใช่นักพัฒนา — แม้ว่าลายเซ็นนักพัฒนาดั้งเดิมจะถูกตรวจสอบในขั้นตอนการอัปโหลดบิลด์ไปยัง App Store Connect
สำหรับการกระจาย Ad Hoc โปรไฟล์จะลงทะเบียน UDID อุปกรณ์ เฉพาะที่อนุญาตให้เรียกใช้แอปได้ บัญชี Apple Developer Program ฟรีจำกัดการทดสอบไว้ที่ 100 อุปกรณ์ต่อปี โปรไฟล์ Enterprise (สำหรับการกระจายภายในองค์กร) ไม่มีข้อจำกัดด้านอุปกรณ์แต่ต้องสมัครสมาชิก Apple Developer Enterprise Program ที่มีค่าใช้จ่าย $299 ต่อปี
อายุการใช้งาน ของโปรไฟล์การจัดเตรียมคือหนึ่งปีนับจากวันที่สร้าง ก่อนวันหมดอายุ 30 วัน Apple จะเริ่มส่งการแจ้งเตือน Push ถึงนักพัฒนาผ่าน Xcode และ Developer Portal หากโปรไฟล์หมดอายุ แอปที่ติดตั้งแล้วยังคงทำงานได้ แต่ไม่สามารถติดตั้งบิลด์ใหม่ด้วยโปรไฟล์นั้นได้ Xcode จะแสดงข้อผิดพลาดการลงนามโค้ดพร้อมรหัส -402620394 เมื่อพยายามสร้างด้วยโปรไฟล์ที่หมดอายุ Apple แนะนำให้ตั้งค่าการต่ออายุโปรไฟล์อัตโนมัติผ่าน Xcode Accounts Preferences — จากนั้น Xcode จะต่ออายุโปรไฟล์ 24 ชั่วโมงก่อนหมดอายุ
Apple มีโปรไฟล์การจัดเตรียมหลักสี่ประเภท แต่ละประเภทออกแบบมาสำหรับขั้นตอนเฉพาะของวงจรชีวิตแอป โปรไฟล์ Development อนุญาตให้เรียกใช้แอปบนอุปกรณ์จริงที่เพิ่มใน Apple Developer Portal และใช้ในระหว่างการพัฒนาและทดสอบ QA บัญชีนักพัฒนา Apple ฟรีเพียงพอสำหรับสร้างโปรไฟล์ Development
โปรไฟล์ Ad Hoc ออกแบบมาสำหรับกระจายแอปให้กลุ่มผู้ทดสอบจำกัดโดยไม่ต้องใช้ App Store โปรไฟล์ลงทะเบียนอุปกรณ์สูงสุด 100 เครื่องโดย UDID และแอปสามารถติดตั้งได้โดยตรงผ่าน iTunes, Apple Configurator หรือโซลูชัน MDM บิลด์ Ad Hoc มีอายุ 12 เดือนและไม่ต้องผ่านการตรวจสอบของ Apple
โปรไฟล์ App Store ใช้เฉพาะสำหรับเผยแพร่แอปใน App Store และไม่มีรายการอุปกรณ์ — Apple จัดการการกระจายเองหลังจากอนุมัติบิลด์ เมื่ออัปโหลดไฟล์เก็บถาวรไปยัง App Store Connect Xcode จะใช้โปรไฟล์ App Store โดยอัตโนมัติหากติดตั้งอยู่ในระบบ โปรไฟล์ Enterprise สำหรับองค์กรที่มี Apple Developer Enterprise Program และอนุญาตให้กระจายแอปภายในโดยไม่มีข้อจำกัดด้านอุปกรณ์หรือการตรวจสอบของ Apple
| ประเภทโปรไฟล์ | วัตถุประสงค์ | อุปกรณ์ | ค่าสมัครสมาชิก |
|---|---|---|---|
| Development | การพัฒนาและทดสอบ | สูงสุด 100 UDID | ฟรี / $99 ต่อปี |
| Ad Hoc | กระจายให้ผู้ทดสอบ | สูงสุด 100 UDID | $99 ต่อปี |
| App Store | เผยแพร่ใน App Store | ใดก็ได้ (ผ่าน Apple) | $99 ต่อปี |
| Enterprise | กระจายภายใน | ไม่จำกัด | $299 ต่อปี |
โปรไฟล์การจัดเตรียมคือไฟล์ในรูปแบบ DER ที่ลงนามโดย Apple ซึ่งสามารถดูเนื้อหาได้ผ่านบรรทัดคำสั่ง Security framework ของ macOS ช่วยให้ถอดรหัส .mobileprovision เป็น XML plist ที่อ่านได้ ภายในโปรไฟล์ประกอบด้วย: UUID ของโปรไฟล์, App ID (คำนำหน้าทีม + Bundle Identifier), รายการใบรับรอง, รายการอุปกรณ์ที่อนุญาต (เฉพาะ Development และ Ad Hoc), entitlements และวันหมดอายุ
App ID คือตัวระบุแอปเฉพาะที่ประกอบด้วย Team ID (10 อักขระที่กำหนดโดย Apple) และ Bundle Identifier (เช่น com.example.myapp) App ID สามารถเป็นแบบชัดเจน (ตรงกับ Bundle Identifier) หรือ wildcard (รูปแบบ *.example.com สำหรับหลายแอป) Apple ไม่แนะนำให้ใช้ wildcard สำหรับแอปที่ใช้การแจ้งเตือน Push หรือ iCloud — บริการเหล่านี้ต้องการ App ID แบบชัดเจน
Entitlements คือบล็อก XML ภายในโปรไฟล์ที่กำหนดสิทธิ์การเข้าถึงทรัพยากรระบบของแอป entitlements ทั่วไปรวมถึง: aps-environment (การแจ้งเตือน Push), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (App Groups สำหรับ Widget และ Share Extension) Apple เพิ่ม entitlements ในโปรไฟล์โดยอัตโนมัติตาม Capabilities ที่เปิดใน Xcode ความไม่ตรงกันระหว่าง entitlements ในโปรไฟล์กับที่ร้องขอในโค้ดทำให้เกิดข้อผิดพลาดในการลงนาม
การสร้างโปรไฟล์ทำได้สองวิธี: ผ่านอินเทอร์เฟซเว็บของ Apple Developer Portal หรือโดยอัตโนมัติผ่าน Xcode สำหรับโปรเจกต์ทั่วไป Xcode จัดการโปรไฟล์โดยอัตโนมัติเมื่อเปิดตัวเลือก Automatically manage signing Xcode สร้างใบรับรอง โปรไฟล์ และ App ID ภายในไม่กี่วินาที โดยซิงค์กับ Apple Developer Portal อย่างไรก็ตาม ไพพ์ไลน์ CI/CD ต้องการการจัดการด้วยตนเอง
ในการสร้างโปรไฟล์ด้วยตนเองใน Apple Developer Portal: ไปที่ Certificates, Identifiers & Profiles เลือก Profiles แล้วกด "+" จากนั้นเลือกประเภทโปรไฟล์ (Development, Ad Hoc, App Store หรือ Enterprise) เลือก App ID จากรายการที่ลงทะเบียน เลือกใบรับรองนักพัฒนา และ (สำหรับ Development และ Ad Hoc) เลือกอุปกรณ์ หลังจากสร้าง โปรไฟล์จะถูกดาวน์โหลดในรูปแบบ .mobileprovision และติดตั้งโดยดับเบิลคลิกใน Xcode
เซิร์ฟเวอร์ CI/CD ต้องใช้วิธีการพิเศษ: โปรไฟล์และใบรับรองต้องเก็บไว้ในพื้นที่เก็บข้อมูลที่ปลอดภัย (เช่น ความลับของ GitHub Actions) ในระหว่างการสร้าง โปรไฟล์จะถูกโหลดไปยังเอเจนต์ วางในโฟลเดอร์ ~/Library/MobileDevice/Provisioning Profiles และใบรับรองจะถูกนำเข้าสู่พวงกุญแจ Fastlane — เครื่องมือยอดนิยมสำหรับการทำงานอัตโนมัติในการลงนาม — มีคำสั่ง match ที่ซิงค์โปรไฟล์และใบรับรองระหว่างนักพัฒนาผ่านพื้นที่เก็บข้อมูล git ที่เข้ารหัส
สำหรับการวินิจฉัยปัญหาการลงนามโค้ด คุณสามารถถอดรหัส .mobileprovision และตรวจสอบเนื้อหาได้ คำสั่งด้านล่างดึง XML plist จากโปรไฟล์และบันทึกในรูปแบบที่อ่านได้:
# การถอดรหัส .mobileprovision เป็น XML
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# การตรวจสอบวันหมดอายุของโปรไฟล์
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
ยูทิลิตี้ Security จาก macOS Command Line Tools ถอดรหัสไฟล์โปรไฟล์ที่ลงนามด้วย CMS แฟล็ก -D หมายถึงการถอดรหัส -i ระบุไฟล์อินพุต หลังจากการถอดรหัส ยูทิลิตี้ plist จะแปลง plist ไบนารีเป็น XML และ grep ดึงวันหมดอายุ วิธีนี้มีประโยชน์ใน CI/D สำหรับตรวจสอบว่าโปรไฟล์ยังไม่หมดอายุก่อนสร้างรุ่นเผยแพร่
ข้อผิดพลาดที่พบบ่อยที่สุดคือ "No matching provisioning profiles found" เมื่อสร้างใน Xcode เกิดเมื่อ Xcode ไม่พบโปรไฟล์ที่ตรงกับการกำหนดค่าการสร้าง: Bundle Identifier ไม่ตรงกับ App ID ในโปรไฟล์ ใบรับรองไม่ได้ติดตั้งในพวงกุญแจ หรือโปรไฟล์หมดอายุ วิธีแก้ไข — ตรวจสอบการตั้งค่า Signing & Capabilities ในเป้าหมาย และหากจำเป็นให้เปลี่ยนเป็น Automatically manage signing
ข้อผิดพลาด "Provisioning profile doesn't include the selected device" ปรากฏเมื่อพยายามเรียกใช้บิลด์ Development หรือ Ad Hoc บนอุปกรณ์ที่ยังไม่ได้เพิ่ม UDID ลงในโปรไฟล์ Apple Developer Portal อนุญาตให้เพิ่มอุปกรณ์ในโปรไฟล์ที่มีอยู่ — หลังจากนั้นต้องดาวน์โหลดและติดตั้งโปรไฟล์ใหม่ Xcode ด้วยการจัดการการลงนามอัตโนมัติจะเพิ่มอุปกรณ์ที่เชื่อมต่อลงในโปรไฟล์โดยอัตโนมัติ
ปัญหากับ entitlements แสดงเป็นข้อผิดพลาด "The executable was signed with invalid entitlements" เมื่ออัปโหลดไปยัง App Store Connect สาเหตุ — ความไม่ตรงกันระหว่าง entitlements ในโปรไฟล์กับในไฟล์ .entitlements ของโปรเจกต์ Apple กำหนดให้ชุดสิทธิ์ในโปรไฟล์ต้องเป็นซูเปอร์เซ็ตของสิทธิ์ที่แอปร้องขอ วิธีแก้ไข — ตรวจสอบ Capabilities ในเป้าหมาย Xcode และตรวจสอบให้แน่ใจว่าบริการที่เปิดใช้งานทั้งหมดมี entitlements ที่สอดคล้องในโปรไฟล์ Fastlane รวมคำสั่ง produce ซึ่งซิงค์ App ID และโปรไฟล์กับ entitlements ปัจจุบัน
คำถามที่พบบ่อย
ได้ หาก App ID ในโปรไฟล์ใช้ตัวระบุ wildcard ชนิด com.example.* อย่างไรก็ตาม โปรไฟล์ wildcard ไม่รองรับการแจ้งเตือน Push, iCloud, Game Center และ App Groups Apple แนะนำให้สร้างโปรไฟล์แบบชัดเจนแยกต่างหากสำหรับแต่ละแอปที่ใช้ Capabilities ขั้นสูง
แอปที่อัปโหลดผ่าน App Store ใช้โปรไฟล์ Store ของ Apple ซึ่งไม่ขึ้นกับโปรไฟล์นักพัฒนา ผู้ใช้ยังคงดาวน์โหลดและเรียกใช้แอปได้ โปรไฟล์ที่หมดอายุจะป้องกันเฉพาะการอัปโหลดบิลด์ใหม่ไปยัง App Store Connect — Apple กำหนดให้โปรไฟล์ Distribution ยังใช้ได้ในเวลาที่ส่ง
สามารถคัดลอกโปรไฟล์ไปยังโฟลเดอร์ ~/Library/MobileDevice/Provisioning Profiles บนคอมพิวเตอร์เครื่องใหม่ได้ อย่างไรก็ตาม โปรไฟล์เชื่อมโยงกับใบรับรองที่มีคีย์ส่วนตัวอยู่ในพวงกุญแจ คุณต้องส่งออกใบรับรองพร้อมคีย์ส่วนตัวผ่าน Keychain Access และนำเข้าบนอุปกรณ์ใหม่ด้วย
ไม่มีข้อจำกัดเกี่ยวกับจำนวนโปรไฟล์บนคอมพิวเตอร์ โปรไฟล์จะถูกเก็บในโฟลเดอร์ ~/Library/MobileDevice/Provisioning Profiles และระบุด้วย UUID Xcode จะเลือกโปรไฟล์ที่เหมาะสมโดยอัตโนมัติตาม App ID และประเภทบิลด์ เพื่อความสะดวกในการจัดการ แนะนำให้ลบโปรไฟล์ที่ไม่ใช้แล้วผ่าน Xcode Accounts Preferences
ใบรับรองการลงนาม ยืนยันตัวตนของนักพัฒนา — เป็นคีย์เข้ารหัสที่ออกโดย Apple โปรไฟล์การจัดเตรียมเป็นไฟล์กำหนดค่าที่ระบุว่าแอปใด (App ID) ภายใต้ใบรับรองใด และบนอุปกรณ์ใดที่สามารถเรียกใช้ได้ โปรไฟล์อ้างถึงใบรับรองเฉพาะเสมอแต่ไม่ได้แทนที่
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม