Toàn Bộ Yêu Cầu Của Apple Cần Xử Lý Trước Khi Submit App Lên App Store (2026)
Ý kiến
0
Chưa có ý kiến nào. Hãy là người đầu tiên chia sẻ!
Chưa có ý kiến nào. Hãy là người đầu tiên chia sẻ!
Không ít team dành sáu tháng viết app, rồi mất thêm ba tuần chỉ để qua được vòng duyệt của Apple. Điều trớ trêu là phần lớn lý do bị từ chối không nằm ở code: thiếu tài khoản demo, chưa có nút xoá tài khoản, chính sách riêng tư viết sơ sài, hoặc bán nội dung số bằng cổng thanh toán riêng.
Bài viết này gom lại toàn bộ yêu cầu của Apple mà bạn cần xử lý xong trước khi bấm nút Submit for Review — từ hạn chót kỹ thuật năm 2026, cấu hình build, khai báo trong App Store Connect, cho tới 5 nhóm nguyên tắc trong App Review Guidelines. Cuối bài có checklist rút gọn để bạn tick từng dòng.
Tài liệu gốc: App Review Guidelines và Upcoming Requirements. Apple sửa guideline vài lần mỗi năm — hãy coi bài này là bản đồ, còn văn bản gốc mới là luật.
Trước khi đi vào chi tiết, cần nắm ba điều để đỡ mất thời gian:
Người thật review, không phải bot. Có công cụ tự động quét binary, nhưng quyết định cuối là một reviewer mở app lên và bấm thử. Nếu họ không vào được màn hình chính, app bị từ chối — dù code của bạn hoàn hảo.
Đa số hồ sơ được duyệt trong 24 giờ. Apple công bố hơn 90% submission được xét trong vòng một ngày. Nếu bạn chờ quá lâu, thường là hồ sơ đã bị đẩy sang trạng thái cần thông tin thêm — kiểm tra Resolution Center.
Bị từ chối không phải án tử. Sửa rồi nộp lại là chuyện bình thường. Cái đắt là mỗi vòng lặp mất 1–3 ngày, nên mục tiêu là qua ngay lần đầu.
Đây là nhóm yêu cầu cứng: không đạt thì App Store Connect chặn ngay lúc upload, chưa kịp tới tay reviewer.
Yêu cầu | Hiệu lực từ | Bạn phải làm gì |
|---|---|---|
Build bằng Xcode 26 / SDK 26 | 28/04/2026 | Mọi app & game upload lên App Store Connect phải build bằng SDK iOS/iPadOS 26, tvOS 26, visionOS 26 hoặc watchOS 26 trở lên |
Trả lời bộ câu hỏi age rating mới | 31/01/2026 | Cập nhật lại phân loại độ tuổi cho từng app; chưa trả lời thì không submit update được |
Privacy Manifest cho Required Reason API | 01/05/2024 | Khai lý do dùng API nhạy cảm, cho cả code của bạn lẫn SDK bên thứ ba |
Trader status (DSA) | 17/02/2025 | Bán/phát hành ở EU mà không khai trader status thì app bị gỡ khỏi App Store EU |
Chứng chỉ APNs mới | 2025 | Server push phải tin cậy root |
Receipt ký bằng SHA-256 | 24/01/2025 | Validate receipt on-device phải hỗ trợ SHA-256, hoặc chuyển hẳn sang |
Gỡ thuộc tính quarantine (macOS) | 18/02/2025 | App macOS không được mang |
Kiểm tra nhanh SDK bạn đang build:
xcodebuild -showsdks | grep iphoneos
xcodebuild -version
Và kiểm tra file macOS trước khi đóng gói:
xattr -r -d com.apple.quarantine /path/to/MyApp.app
PrivacyInfo.xcprivacyĐây là lỗi bị chặn lúc upload nhiều nhất trong hai năm gần đây. Bạn cần một file PrivacyInfo.xcprivacy khai bốn khối:
NSPrivacyAccessedAPITypes — lý do dùng các Required Reason API (User Defaults, file timestamp, dung lượng đĩa, thời gian boot hệ thống, danh sách bàn phím đang bật)
NSPrivacyCollectedDataTypes — các loại dữ liệu app thu thập (phải khớp với App Privacy trong App Store Connect)
NSPrivacyTracking — app có tracking hay không
NSPrivacyTrackingDomains — domain phục vụ tracking; nếu chưa xin phép ATT mà app gọi vào domain này, request sẽ bị chặn
Quan trọng: SDK bên thứ ba cũng phải có manifest riêng và phải được ký. Nếu bạn dùng Firebase, Facebook SDK, AppsFlyer, Adjust… hãy nâng lên bản có hỗ trợ privacy manifest, đừng vá thủ công vào manifest của app.
Kiểm tra IPA đã có manifest chưa:
unzip -l MyApp.ipa | grep -i xcprivacy
Thiếu chuỗi mô tả thì app crash ngay khi xin quyền — và crash trước mặt reviewer là lý do từ chối kinh điển (Guideline 2.1). Viết mô tả cụ thể, đừng viết chung chung kiểu "App cần quyền này".
Key | Dùng khi |
|---|---|
| Chụp ảnh, quét QR |
| Đọc thư viện ảnh |
| Chỉ ghi ảnh vào thư viện |
| Ghi âm, gọi thoại |
| Vị trí khi đang mở app |
| Vị trí nền — phải giải thích rất rõ, hay bị soi |
| Danh bạ |
| Face ID |
| Bắt buộc nếu có ATT / IDFA |
| Quét thiết bị trong mạng LAN |
| Bluetooth |
| Đọc dữ liệu HealthKit |
Gần như mọi app đều dùng HTTPS, và bạn vẫn phải trả lời câu hỏi này ở mỗi lần nộp. Khai sẵn trong Info.plist để không phải bấm thủ công:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
Đặt false khi app chỉ dùng HTTPS/TLS chuẩn của hệ thống. Nếu bạn tự cài thuật toán mã hoá riêng, phải khai true và bổ sung hồ sơ export compliance — khai sai là vấn đề pháp lý, không phải kỹ thuật.
Icon 1024×1024 PNG, không alpha channel, không tự bo góc, không dùng ảnh chụp màn hình làm icon.
Từ iOS 26, hệ thống dùng ngôn ngữ thiết kế Liquid Glass và công cụ Icon Composer. Build lại bằng SDK 26 nghĩa là UI của bạn được áp style mới — hãy chạy thử toàn bộ màn hình, đặc biệt tab bar, navigation bar và các control tuỳ biến.
Hỗ trợ đầy đủ màn hình: Dynamic Island, Safe Area, xoay ngang trên iPad, Dark Mode, Dynamic Type. Guideline 4.0 yêu cầu app "tôn trọng nền tảng" — giao diện port thô từ Android rất dễ bị đánh giá substandard.
# Tạo archive
xcodebuild archive \
-scheme MyApp \
-configuration Release \
-destination "generic/platform=iOS" \
-archivePath build/MyApp.xcarchive
# Export + upload thẳng lên App Store Connect
xcodebuild -exportArchive \
-archivePath build/MyApp.xcarchive \
-exportOptionsPlist ExportOptions.plist \
-exportPath build/
Trước khi archive, nhớ: bật Bitcode? — không còn cần, Apple đã bỏ. Nhưng phải bật Debug Symbols để có crash report đọc được, và tắt mọi flag debug/staging trong build Release.
Tên app tối đa 30 ký tự (Guideline 2.3.7). Không nhồi giá, không nhồi từ khoá kiểu "App abc — miễn phí, tốt nhất 2026".
Mô tả phải đúng với app thật (2.3.1). Không nhắc tính năng chưa có, không nói "sắp ra mắt".
Icon, ảnh chụp màn hình, preview phải đạt chuẩn 4+ (2.3.8) — kể cả khi app của bạn được xếp 17+.
Nếu có mua trong app, phải nói rõ trong mô tả và ảnh chụp màn hình (2.3.2).
Không có tính năng ẩn, ngủ đông hoặc không khai báo (2.3.1(a)). Mọi tính năng mới phải mô tả cụ thể trong Notes for Review — ghi chung chung sẽ bị từ chối.
Mỗi app cần 1–10 ảnh, định dạng PNG/JPEG, không alpha channel. Apple đã đơn giản hoá: bạn chỉ cần bộ ảnh của màn hình lớn nhất, hệ thống tự scale cho máy nhỏ hơn.
Thiết bị | Kích thước bắt buộc | Pixel (dọc) |
|---|---|---|
iPhone | 6.9" (hoặc 6.5" thay thế) | 1320 × 2868 (6.5": 1284 × 2778) |
iPad | 13" — bắt buộc nếu app chạy trên iPad | 2064 × 2752 |
Mac | Tỷ lệ 16:10 | 2880 × 1800 (hoặc 1280×800, 1440×900, 2560×1600) |
Apple Watch | Theo đời máy, dùng nhất quán | ví dụ 416 × 496 (Series 11/10) |
Apple TV | 1920×1080 hoặc 3840×2160 | — |
Vision Pro | 3840 × 2160 | — |
Từ 2025–2026 Apple mở rộng thang phân loại, thêm ba mức ở giữa. Các mức hiện tại:
4+ — không có nội dung phản cảm
9+ — chửi thề thưa thớt, kinh dị nhẹ, bạo lực hoạt hình, loot box
13+ — chửi thề thường xuyên, mạng xã hội, bạo lực thực tế thưa thớt, cờ bạc mô phỏng
16+ — truy cập web không giới hạn, chủ đề người lớn thường xuyên
18+ — rượu/ma tuý, nội dung tình dục, bạo lực thực tế thường xuyên, cờ bạc
Trả lời trung thực. Khai thấp hơn thực tế là lý do bị gỡ app, không chỉ bị từ chối. Nếu app có nội dung do người dùng tạo hoặc trình duyệt web nhúng, gần như chắc chắn bạn không được để 4+.
Bạn phải khai từng loại dữ liệu app thu thập, mục đích, và có liên kết với danh tính người dùng hay không. Ba nguyên tắc:
Khai cả dữ liệu do SDK bên thứ ba thu thập — Apple coi đó là trách nhiệm của bạn.
Nhãn phải khớp với privacy manifest trong binary và với chính sách riêng tư.
Lệch nhau giữa ba nơi này là một trong những lý do bị reject dai dẳng nhất, vì reviewer đối chiếu được ngay.
Guideline 2.1 nói thẳng: phải cho App Review toàn quyền truy cập app. Cụ thể:
Nếu app có đăng nhập → cung cấp tài khoản demo còn hoạt động (hoặc chế độ demo đầy đủ tính năng). Tài khoản này phải sống cho tới khi review xong — đừng dọn database giữa chừng.
Nếu cần OTP/SMS để đăng nhập → phải có đường vòng cho reviewer (mã cố định, tài khoản test bỏ qua OTP). Reviewer ở Mỹ không nhận được SMS về số Việt Nam.
Nếu cần phần cứng, mã QR mẫu, thẻ NFC → gửi kèm hoặc quay video minh hoạ.
Backend phải chạy thật trong lúc review. Rất nhiều app bị từ chối vì server staging tắt vào cuối tuần.
Tính năng không hiển nhiên, in-app purchase khó tìm → giải thích chi tiết trong Notes for Review (2.1(b)).
Agreements, Tax, and Banking: chưa ký hợp đồng Paid Apps thì app có IAP không bán được, dù đã duyệt.
Trader status cho EU: bắt buộc từ 2025 nếu phát hành ở châu Âu; thiếu là bị gỡ khỏi App Store EU.
Loại tài khoản: app trong lĩnh vực được quản lý chặt — ngân hàng, tài chính, y tế, hàng không, và từ bản cập nhật cuối 2025 có thêm sàn giao dịch crypto — phải nộp bởi pháp nhân, không nhận tài khoản cá nhân (5.1.1(ix)). Đăng ký tài khoản Organization cần mã D-U-N-S.
1.2 Nội dung do người dùng tạo (UGC) — nếu app có bình luận, đăng bài, chat, bạn bắt buộc có đủ bốn thứ: bộ lọc nội dung phản cảm, cơ chế báo cáo có phản hồi kịp thời, chức năng chặn người dùng, và thông tin liên hệ công khai. Thiếu một trong bốn là bị từ chối.
1.2.1(a) — mới từ 11/2025: app dạng creator phải cho người dùng nhận biết nội dung vượt quá độ tuổi của app, và có cơ chế giới hạn theo tuổi đã xác thực hoặc khai báo.
1.4 An toàn thể chất — app y tế, sức khoẻ đưa thông tin sai có thể gây hại sẽ bị soi rất kỹ; cần nguồn dẫn và cảnh báo.
1.5 Thông tin nhà phát triển — URL hỗ trợ phải sống và có cách liên hệ thật.
2.1 App Completeness — không placeholder, không lorem ipsum, không màn hình "coming soon", không link chết. Test trên máy thật, không chỉ simulator.
2.2 Beta — bản demo, trial, beta thuộc về TestFlight, không được lên App Store.
2.5.1 Chỉ dùng API công khai — không private API, không method swizzling vào framework hệ thống, không tải và thực thi code mới làm thay đổi tính năng chính của app.
App phải chạy trên hệ điều hành đang phát hành, và phải gỡ dần các API đã deprecated.
Đây là nhóm khiến nhiều team Việt Nam mất nhiều thời gian nhất.
3.1.1 In-App Purchase — mọi thứ mở khoá tính năng hoặc nội dung số bên trong app (gói premium, xu, level, khoá học, bỏ quảng cáo) phải qua IAP. Không được dùng cổng thanh toán nội địa, chuyển khoản ngân hàng, mã kích hoạt, hay ví crypto để mở khoá. Ngược lại, hàng hoá/dịch vụ vật lý (gọi xe, giao đồ ăn, vé máy bay, mua sắm) thì không được dùng IAP.
Xu hoặc credit đã mua không được hết hạn, và phải có cơ chế khôi phục giao dịch.
Loot box phải công bố tỷ lệ rơi từng loại vật phẩm trước khi người dùng mua.
3.1.3 Reader apps — app cho phép dùng nội dung đã mua ở ngoài (báo, sách, nhạc, video) có quy chế riêng, và có thể xin External Link Account Entitlement.
3.2.2(ix) App cho vay — APR tối đa 36% tính cả phí, và không được yêu cầu trả hết trong 60 ngày hoặc ít hơn. Quy định này loại thẳng phần lớn mô hình vay ngắn hạn kiểu "app tiền nhanh".
4.9 / 4.10 — dùng Apple Pay phải công bố đủ thông tin giao dịch; và không được thu tiền cho các năng lực sẵn có của hệ thống như push notification, camera, gyroscope, iCloud.
4.1 Copycat — không nhái app khác. Bổ sung mới 4.1(c): không được dùng icon, thương hiệu, hoặc tên sản phẩm của nhà phát triển khác trong icon hay tên app của bạn nếu chưa được họ đồng ý.
4.2 Minimum Functionality — app phải vượt xa việc "đóng gói lại một website". Cụ thể: 4.2.2 app không được chủ yếu là tài liệu quảng cáo, tổng hợp nội dung hay danh sách link; 4.2.3 app phải chạy độc lập, và nếu cần tải thêm tài nguyên lúc mở lần đầu thì phải báo dung lượng và hỏi ý người dùng; 4.2.6 app tạo từ dịch vụ sinh app hàng loạt sẽ bị từ chối trừ khi do chính chủ nội dung nộp.
4.3 Spam — không tạo nhiều Bundle ID cho cùng một app, không nộp hàng loạt app na ná nhau. Nếu bạn làm app cho nhiều khách hàng, hãy dùng tài khoản của chính khách hàng đó.
4.7 Mini app, mini game, HTML5, chatbot — từ 11/2025 Apple nói rõ mini app và mini game bằng HTML5/JavaScript nằm trong phạm vi guideline này. Kèm theo: 4.7.2 không được mở native API cho phần mềm nhúng nếu chưa xin phép; 4.7.3 không chia sẻ dữ liệu/quyền cho phần mềm nhúng nếu người dùng chưa đồng ý từng lần; 4.7.4 phải có chỉ mục toàn bộ phần mềm kèm universal link; 4.7.5 phải có cơ chế nhận biết và giới hạn theo tuổi.
4.8 Login Services — nếu app dùng đăng nhập bên thứ ba (Google, Facebook, X, LinkedIn, Amazon, WeChat), bạn phải cung cấp thêm một lựa chọn đăng nhập tương đương chỉ thu thập tên và email, cho phép ẩn email, và không thu thập tương tác để quảng cáo khi chưa đồng ý — trên thực tế là Sign in with Apple. Ngoại lệ: app chỉ dùng hệ thống tài khoản của chính công ty bạn, app doanh nghiệp/giáo dục, hoặc client của một dịch vụ cụ thể.
5.1.1(i) Chính sách riêng tư — bắt buộc có link trong App Store Connect và ngay trong app, dễ tìm. Nội dung phải nêu rõ: thu thập dữ liệu gì, thu thập bằng cách nào, dùng để làm gì; cam kết bên thứ ba nhận dữ liệu bảo vệ ở mức tương đương; chính sách lưu trữ/xoá, và cách người dùng rút lại đồng ý hoặc yêu cầu xoá dữ liệu.
5.1.1(ii) Đồng ý — phải xin phép trước khi thu thập, kể cả dữ liệu ẩn danh. Không được ràng buộc tính năng trả phí vào việc người dùng cho phép truy cập dữ liệu, và phải có cách rút lại đồng ý dễ hiểu.
5.1.1(iii) Tối thiểu hoá dữ liệu — chỉ xin những gì phục vụ tính năng cốt lõi. Ưu tiên picker/share sheet thay vì xin toàn quyền vào Ảnh hay Danh bạ.
5.1.1(v) Xoá tài khoản — app cho tạo tài khoản thì bắt buộc cho xoá tài khoản ngay trong app. Không được bắt người dùng gửi email hay gọi hotline. Đây là lỗi bị từ chối phổ biến bậc nhất với app Việt Nam.
5.1.2(i) Chia sẻ dữ liệu — phải công bố rõ khi dữ liệu cá nhân được chia sẻ với bên thứ ba, bao gồm cả AI của bên thứ ba, và xin phép rõ ràng trước. Nếu app của bạn gửi nội dung người dùng lên một LLM bên ngoài, đây là điều khoản áp thẳng vào bạn.
Cũng ở 5.1.2: không được ép người dùng bật push notification, location hay tracking để đổi lấy tính năng, nội dung, hoặc quà tặng.
5.1.2(vi) — dữ liệu từ HealthKit, HomeKit, ClassKit, ARKit, Camera/Photos API không được dùng cho quảng cáo hay khai thác dữ liệu.
5.1.5 Vị trí — chỉ dùng khi thật sự liên quan tính năng; phải thông báo và xin phép trước.
5.2 Sở hữu trí tuệ — không dùng logo, nhãn hiệu, nội dung có bản quyền của người khác; không nhái giao diện Apple; app "tải video từ YouTube/TikTok" gần như chắc chắn bị từ chối.
5.3 Cờ bạc — cờ bạc ăn tiền thật cần giấy phép và giới hạn theo lãnh thổ. Với Việt Nam, đây là vùng nên tránh hoàn toàn nếu chưa có tư vấn pháp lý.
Lý do | Guideline | Cách phòng |
|---|---|---|
Crash hoặc lỗi lúc reviewer thử | 2.1 | Test trên máy thật, mạng yếu, tài khoản mới tinh; chạy TestFlight nội bộ trước |
Không đăng nhập được / thiếu tài khoản demo | 2.1 | Tài khoản demo còn hạn + đường vòng OTP + backend bật 24/7 trong lúc review |
Thiếu nút xoá tài khoản | 5.1.1(v) | Đặt trong Settings của app, tối đa 2–3 bước, xoá thật chứ không chỉ vô hiệu hoá |
Bán nội dung số ngoài IAP | 3.1.1 | Chuyển toàn bộ gói premium sang StoreKit; bỏ mọi link "nạp tiền" trong app iOS |
Thiếu Sign in with Apple | 4.8 | Có Google/Facebook login thì thêm Sign in with Apple ngang hàng |
App chỉ là website đóng gói | 4.2 | Thêm tính năng native thật: offline, push, camera, widget, Face ID |
UGC không có báo cáo/chặn | 1.2 | Bổ sung report, block, lọc từ khoá, email liên hệ hiển thị công khai |
Nhãn App Privacy lệch thực tế | 5.1.1 | Đối chiếu ba nơi: nhãn ↔ privacy manifest ↔ chính sách riêng tư |
Metadata sai, ảnh chụp cũ, link hỗ trợ chết | 2.3 | Rà lại mô tả + ảnh + mọi URL ngay trước khi nộp |
Nhiều app trùng lặp / template | 4.3, 4.2.6 | Gộp thành một app đa tính năng, hoặc nộp bằng tài khoản của chính chủ nội dung |
Build bằng Xcode 26 / SDK 26 trở lên
Có PrivacyInfo.xcprivacy; SDK bên thứ ba đã nâng lên bản có manifest và chữ ký
Đủ chuỗi mô tả quyền trong Info.plist, viết cụ thể
ITSAppUsesNonExemptEncryption đã khai
Icon 1024×1024, không alpha; UI đã kiểm tra lại trên iOS 26
Không còn endpoint staging, log debug, hay tính năng bật/tắt ngầm
Đã test trên máy thật + mạng 3G yếu + tài khoản mới hoàn toàn
Có nút xoá tài khoản trong app (nếu cho đăng ký)
Có Sign in with Apple (nếu có login bên thứ ba)
Có report / block / lọc nội dung / liên hệ (nếu có UGC)
Mọi nội dung số bán qua IAP, có nút Restore Purchases
Link chính sách riêng tư và điều khoản hiển thị được ngay trong app
Không màn hình trống, không "coming soon", không link chết
Tên ≤ 30 ký tự, mô tả đúng thực tế
Ảnh chụp màn hình đúng kích thước bắt buộc (6.9" iPhone, 13" iPad)
Age rating trả lời theo bộ câu hỏi mới
App Privacy khai đủ, khớp manifest và chính sách
Tài khoản demo + Notes for Review chi tiết
URL hỗ trợ và URL marketing còn sống
Agreements, Tax, and Banking đã hoàn tất
Trader status (nếu phát hành ở EU)
Chọn chế độ phát hành: tự động, thủ công, hay phased release
Đọc kỹ Resolution Center. Apple ghi rõ guideline số mấy và thường kèm ảnh chụp màn hình. Đừng đoán.
Hỏi lại nếu chưa rõ. Bạn được trả lời trực tiếp trong Resolution Center; hỏi cụ thể "màn hình nào, bước nào" nhanh hơn là sửa mò rồi nộp lại.
Sửa đúng thứ bị nêu, đừng sửa tràn lan. Mỗi lần đổi binary là một vòng review mới.
Nếu chỉ sai metadata — sửa ngay trong App Store Connect, thường không cần build lại.
Nếu bạn tin là Apple hiểu nhầm — dùng App Review Board để khiếu nại, kèm giải thích và video minh hoạ.
Expedited review dành cho lỗi nghiêm trọng ảnh hưởng người dùng hoặc vấn đề pháp lý. Xin quá thường xuyên sẽ mất hiệu lực.
Nếu phải rút gọn cả bài này thành ba câu:
Reviewer phải vào được app. Tài khoản demo sống, backend bật, không crash — đây là nhóm lý do từ chối lớn nhất và cũng dễ tránh nhất.
Ba nơi khai dữ liệu phải khớp nhau: nhãn App Privacy, privacy manifest trong binary, và chính sách riêng tư.
Tiền phải chảy qua đúng đường: nội dung số thì IAP, hàng hoá vật lý thì không.
Xử lý xong ba nhóm đó cộng với checklist ở mục 7, xác suất qua ngay lần đầu là rất cao. Chúc bạn duyệt app thuận lợi.
Hướng dẫn đầy đủ ssh port forwarding (-L local, -R remote, -D SOCKS) và autossh để giữ tunnel luôn sống — bao gồm các tham số quan trọng (ServerAliveInterval, ExitOnForwardFailure, GatewayPorts), biến môi trường autossh, và systemd service. Mọi lệnh đã test trong Docker.