Missing Compliance TestFlight แก้ยังไงให้จบถาวร
โดย Mehdi Azizi
เผยแพร่เมื่อ , 9 นาที
Missing Compliance หมายถึง Apple รอให้คุณแจ้งเรื่องการเข้ารหัส ปลดล็อก build นี้ใน App Store Connect แล้วตั้งคีย์ไว้ในโปรเจกต์เพื่อไม่ให้เจออีก
Missing Compliance ไม่ใช่ข้อผิดพลาด แต่เป็น build ที่รอคำตอบของคุณเรื่องการเข้ารหัส ถ้าคุณยังไม่ตอบ build จะถูกล็อกไว้ ผู้ทดสอบใช้ไม่ได้ สำหรับ build นี้ คุณตอบคำถามในแท็บ TestFlight ของ App Store Connect ส่วน build ถัด ๆ ไป ให้ใส่คีย์ ITSAppUsesNonExemptEncryption ใน Info.plist หรือ ios.config.usesNonExemptEncryption ใน app.json ถ้าใช้ Expo แล้วสถานะนี้จะไม่กลับมาอีก
แอป iOS ของผมสร้างด้วย Expo ทั้งหมด ใน app.json ของ Solys คีย์นี้มีค่าเป็น false และใส่ไว้สองที่: ใน ios.config และใน ios.infoPlist คู่มือนี้อ้างอิงหน้าของ Apple เรื่องสถานะของ build และเรื่องการปฏิบัติตามกฎการส่งออกสำหรับ build เบต้า ซึ่งผมอ่านทวนเมื่อวันที่ 6 พฤศจิกายน 2026
Missing Compliance หมายถึงอะไร
รายการสถานะ build ของ Apple อธิบายไว้ในประโยคเดียว: เอกสารการปฏิบัติตามกฎการส่งออก (export compliance) ยังขาดอยู่ และต้องให้คุณดำเนินการ Apple แสดงสถานะนี้เป็นสีเหลือง ซึ่งเป็นสีของกระบวนการที่กำลังดำเนินอยู่และขึ้นกับคุณหรือ Apple และคำอธิบายก็ระบุชัดว่าต้องรอให้คุณดำเนินการ
ทำไม Apple ถึงถามเรื่องนี้? หน้าเรื่องกฎการส่งออกการเข้ารหัส อธิบายว่า เวลาคุณส่ง build ไป TestFlight หรือ App Store คุณกำลังส่งมันไปยังเซิร์ฟเวอร์ในสหรัฐอเมริกา ถ้าแอปของคุณเผยแพร่นอกสหรัฐฯ และแคนาดา แอปจะอยู่ภายใต้กฎหมายการส่งออกของสหรัฐฯ ไม่ว่าบริษัทของคุณจะอยู่ประเทศไหน และทันทีที่แอปใช้ มี หรือรวมการเข้ารหัสไว้ Apple ถือว่านั่นคือการส่งออกซอฟต์แวร์เข้ารหัส
ผลคือ ทุกครั้งที่มีเวอร์ชันใหม่ App Store Connect จะถามคำถามเรื่อง compliance เว้นแต่ Info.plist ของคุณจะตอบไว้แล้ว นี่คือเหตุผลที่ build แรกจาก Expo แทบจะติด Missing Compliance เสมอ
ปลดล็อก build ที่รออยู่
ขั้นตอนมาจากหน้าของ Apple เรื่อง export compliance สำหรับ build เบต้า คุณต้องมีบทบาท Account Holder, Admin หรือ App Manager
- ใน Apps เปิดแอปของคุณ แล้วไปที่แท็บ TestFlight
- ในแถบด้านข้าง ใต้ Builds เลือกแพลตฟอร์ม
- ในคอลัมน์ Build คลิกไอคอนหรือหมายเลขของ build ที่ต้องการ
- คลิก Provide Export Compliance Information แล้วตอบคำถาม
- ถ้า Apple ขอเอกสาร ให้คลิก Go to App Encryption Page เพื่อส่ง ถ้าไม่ขอ ให้คลิก Save
Apple ยังบอกทางลัดไว้ด้วย: ข้าง build จะมีลิงก์ Manage ที่เปิดคำถามชุดเดียวกัน และ Choose File สำหรับแนบเอกสารที่ได้รับอนุมัติแล้ว เมื่อบันทึกแล้ว build จะเปลี่ยนเป็น Ready to Submit หรือเป็น Testing ทันทีถ้าส่งให้กลุ่มภายใน ส่วน Ready to Test จะมาหลังผ่านการรีวิวเบต้าสำหรับผู้ทดสอบภายนอกเท่านั้น
ลิงก์ Manage กดไม่ได้? ตรวจสอบบทบาทของคุณในทีมก่อน Apple สงวนสิทธิ์การตอบไว้ให้บทบาท Account Holder, Admin และ App Manager บัญชี Developer หรือ Marketing ตอบไม่ได้ Apple ไม่ได้ระบุสาเหตุอื่นไว้ ถ้าเพิ่งส่ง build ไป ให้รออีเมลแจ้งว่าประมวลผลเสร็จ ซึ่งอธิบายไว้ในคู่มือเรื่องหมายเลข build และเวอร์ชัน แล้วรีโหลดหน้า
ไม่ต้องตอบอีกเลย: ใส่คีย์ในโปรเจกต์
Apple บอกไว้ในหน้าเรื่อง build เบต้าว่า คุณสามารถระบุใน Info.plist ได้ว่าแอปไม่ใช้การเข้ารหัส หรือได้รับการยกเว้น แล้วคุณจะไม่ต้องตอบทุกครั้งที่ส่ง คีย์นี้ชื่อ ITSAppUsesNonExemptEncryption ใน Xcode จะแสดงเป็นชื่อ App Uses Non-Exempt Encryption
| เครื่องมือของคุณ | ไฟล์ | ตำแหน่ง | ค่า |
|---|---|---|---|
| Expo (EAS Build) | app.json | expo.ios.config | false |
| Expo อีกวิธี | app.json | expo.ios.infoPlist | false |
| React Native เปล่า | Info.plist | App Uses Non-Exempt Encryption | NO |
| Xcode, Swift | Info.plist | App Uses Non-Exempt Encryption | NO |
กับ Expo คีย์นี้ชื่อ usesNonExemptEncryption และเอกสารอ้างอิงการตั้งค่า ระบุว่ามันจะเขียนคีย์ของ Apple ลงใน Info.plist ของ build และ ios.config ใช้ตอน build เท่านั้น ไม่ปรากฏใน manifest ของ production
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
กับ Expo นั้น ios.infoPlist ก็รับคีย์ในชื่อของ Apple ได้เช่นกัน ด้วยค่าเดียวกัน นี่คือบรรทัดที่สองใน app.json ของ Solys ในโปรเจกต์ native การประกาศแบบเดียวกันใช้แค่บรรทัดเดียวใน Info.plist: คีย์ App Uses Non-Exempt Encryption (ชื่อที่ Xcode แสดง) ค่าเป็น NO ค่านี้เป็น boolean ไม่ใช่ string
คีย์จะมีผลกับ build ถัดไป build ที่ส่งไปแล้วจะยังค้างที่ Missing Compliance จนกว่าคุณจะตอบใน App Store Connect สองอย่างนี้ใช้แทนกันไม่ได้ แต่ต้องทำควบคู่กัน
false หรือ true: ตัดสินใจยังไง
Apple นิยามค่า NO ไว้ว่า แอปของคุณ รวมถึงไลบรารีของบุคคลที่สาม ไม่ใช้การเข้ารหัสเลย หรือใช้เฉพาะการเข้ารหัสที่ได้รับการยกเว้นจากข้อกำหนดด้านเอกสาร ถ้าไม่ใช่ ให้ตอบ YES
สิ่งที่โดยทั่วไปได้รับการยกเว้น ตามหน้าเรื่องกฎการส่งออก: การเข้ารหัสที่มากับระบบ เช่น การเชื่อมต่อ HTTPS ผ่าน URLSession สิ่งที่ไม่ได้รับการยกเว้น: การเข้ารหัสแบบเฉพาะ (proprietary) ที่คุณเขียนเองหรือฝังมาในแอป ภาพรวมของ export compliance ยังเตือนเรื่องสำคัญไว้ว่า คุณเป็นผู้รับผิดชอบการตีความ และผลที่ตามมา ถ้าคุณอ้างการยกเว้นผิด
สำหรับแอป Expo ที่เรียก API ผ่าน HTTPS เก็บค่าตั้งค่า และขาย subscription คำตอบปกติคือ false ส่วนแอปที่เข้ารหัสข้อความ ไฟล์ หรือคลังข้อมูลเอง คำตอบคือ true และ Apple จะขอเอกสาร
อย่าใส่
falseไปตามความเคยชิน ลองไล่ดู dependency ของคุณ: ไลบรารีเข้ารหัสแบบ end-to-end หรือระบบจัดเก็บที่เข้ารหัสเอง จะทำให้คุณต้องส่งเอกสาร
ถ้าแอปของคุณใช้การเข้ารหัสที่ไม่ได้รับการยกเว้น
หน้าเรื่องเอกสารการเข้ารหัส อธิบายขั้นตอนไว้ ใน App Information ข้าง App Encryption Documentation ปุ่มเพิ่มจะเปิดคำถาม จากนั้น Choose File เพื่อแนบเอกสาร แล้ว Save Apple ขอให้คุณกรอกคำอธิบายแอปและตั้งค่าความพร้อมให้บริการ (availability) ไว้ก่อน เพื่อใช้พิจารณาว่าเอกสารเพียงพอหรือไม่ Apple ตั้งเป้าไว้ราวสองวันทำการเมื่อเอกสารครบ
เมื่อเอกสารได้รับอนุมัติ Apple จะให้ค่าหนึ่งมาใส่ในคีย์ ITSEncryptionExportComplianceCode ของ Info.plist เมื่อใส่แล้ว จะไม่มีคำถามทุกครั้งที่ส่งอีก ระหว่างการตรวจสอบ build จะแสดง Waiting for Export Compliance Review หรือ In Compliance Review คุณไม่ต้องทำอะไร
มีสองเรื่องที่ Apple แจ้งไว้ เรื่องหนึ่งในหน้ากฎการส่งออก อีกเรื่องในภาพรวมของ compliance:
- แม้ใช้การเข้ารหัสที่ได้รับการยกเว้น ก็อาจต้องส่งรายงานจัดประเภทตนเองประจำปี (annual self-classification report) ให้รัฐบาลสหรัฐฯ ไม่ต้องส่งถ้าคุณใช้การเข้ารหัสที่ไม่ได้รับการยกเว้นและส่งเอกสารให้ Apple แล้ว
- ฝรั่งเศสก็ควบคุมการนำเข้าและส่งออกแอปที่มีการเข้ารหัสเช่นกัน ภาพรวมของ Apple ยกตัวอย่างการจัดเก็บข้อมูลที่ปลอดภัย การสื่อสารที่ปลอดภัย และแอนติไวรัส เป็นกลุ่มที่เกี่ยวข้อง โดยมีข้อยกเว้นสำหรับแอปธนาคารและแอปการแพทย์ และแนะนำให้ไปดูที่ ANSSI
หลังจากนั้นใน TestFlight
build ที่ปลดล็อกแล้วจะเดินตามวงจรปกติของ build ใน TestFlight ตามที่อธิบายไว้ในคู่มือ TestFlight สำหรับทดสอบแอป iPhone: ผู้ทดสอบภายในใช้ได้ทันที ผู้ทดสอบภายนอกหลังรีวิวเบต้า และหมดอายุภายใน 90 วัน ตามรายการสถานะ build จุดที่อาจติดอื่น ๆ ตอนส่งจาก Expo เช่น หมายเลข build ซ้ำ หรือไฟล์ถูกปฏิเสธ อยู่ในข้อผิดพลาดตอนส่งจาก EAS ไป App Store Connect และขั้นตอนทั้งหมดอยู่ในเผยแพร่แอป Expo บน App Store ด้วย EAS
iOS & Android Kit มีโค้ดเริ่มต้น Expo ของผม ที่ใส่คีย์นี้ไว้แล้ว พร้อมเส้นทางตั้งแต่ build แรกจนถึงหน้าแอปบน App Store ถ้าคุณอยากรู้ว่าอะไรยังขวางการเผยแพร่แอปของคุณอยู่ แบบประเมินฟรี จะตอบคุณได้ในไม่กี่คำถาม และส่งเช็กลิสต์กันโดน Apple ปฏิเสธของผมให้ ขั้นตอนครบถ้วนอยู่ในเผยแพร่แอปบน App Store
คำถามที่พบบ่อย
Missing Compliance บน TestFlight หมายถึงอะไร?
build กำลังรอการแจ้ง export compliance ของคุณ ซึ่งก็คือคำตอบเรื่องการใช้การเข้ารหัส Apple จัดให้อยู่ในกลุ่มสถานะที่ต้องให้คุณดำเนินการ build จะไม่ถูกส่งถึงผู้ทดสอบจนกว่าคุณจะตอบ
ทำไมลิงก์ Manage ของ Missing Compliance ถึงกดไม่ได้?
ตรวจสอบบทบาทของคุณ: Apple สงวนสิทธิ์การตอบไว้ให้บทบาท Account Holder, Admin และ App Manager Apple ไม่ได้ระบุสาเหตุอื่นไว้ ถ้าเพิ่งส่ง build ไป ให้รีโหลดหน้าหลังได้รับอีเมลแจ้งว่าประมวลผลเสร็จ
แอปของฉันใช้แค่ HTTPS ต้องตอบว่าใช้การเข้ารหัสไหม?
Apple ระบุว่าการเข้ารหัสที่มากับระบบ เช่น การเชื่อมต่อ HTTPS ผ่าน URLSession โดยทั่วไปได้รับการยกเว้นจากข้อกำหนดด้านเอกสาร ในกรณีนี้ คีย์ ITSAppUsesNonExemptEncryption มีค่าเป็น NO โดยมีเงื่อนไขว่าไม่มีไลบรารีของบุคคลที่สามตัวใดเพิ่มการเข้ารหัสแบบเฉพาะเข้ามา
ต้องตอบคำถามเรื่องการเข้ารหัสทุก build ไหม?
ใช่ ตราบใดที่ Info.plist ยังไม่มีคีย์ ITSAppUsesNonExemptEncryption เมื่อมีคีย์นี้แล้ว App Store Connect จะไม่ถามอีก กับ Expo ตั้งค่าได้ใน app.json ผ่าน ios.config.usesNonExemptEncryption
ประกาศเรื่องการเข้ารหัสใน app.json ของ Expo ตรงไหน?
ใน app.json ใต้ expo.ios.config ด้วย "usesNonExemptEncryption": false ถ้าแอปของคุณไม่ใช้การเข้ารหัสที่ไม่ได้รับการยกเว้น EAS Build จะเขียนคีย์ลงใน Info.plist ของ build คีย์จะมีผลกับ build ถัดไป ไม่ใช่ build ที่ส่งไปแล้ว
Missing Compliance ขวางการส่งแอปขึ้น App Store ด้วยไหม?
คำถามเรื่อง export compliance จะถามกับทุกเวอร์ชันใหม่ ทั้งเบต้าและ App Store build ที่ยังไม่ได้ตอบจะเผยแพร่ไม่ได้ คีย์ใน Info.plist แก้ได้ทั้งสองกรณีในคราวเดียว
ต้องทำรายงานจัดประเภทตนเองประจำปีไหม?
Apple แจ้งว่าการใช้การเข้ารหัสที่ได้รับการยกเว้นก็ยังอาจต้องส่งรายงานจัดประเภทตนเองประจำปีให้รัฐบาลสหรัฐฯ และแนะนำให้ดูขั้นตอนทางการ ถ้าแอปของคุณใช้การเข้ารหัสที่ไม่ได้รับการยกเว้นและส่งเอกสารให้ Apple แล้ว ก็ไม่จำเป็นต้องส่งรายงานนี้

