ITMS-90683: Missing purpose string in Info.plist
Захищений ресурс без пояснення в Info.plist.
Що таке ITMS-90683?
Відмова Apple для білда, який може звернутися до камери, геолокації, контактів чи іншого захищеного ресурсу, а в Info.plist немає речення, навіщо. Вона береться з бінарки, а не з того, що робить застосунок: плагін, який підключає камеру, приносить цю вимогу, навіть якщо камеру ніхто ніколи не відкриває. Тому білд, що чудово працює на телефоні, так і не доходить до TestFlight. Ми називаємо ключ і плагін, через який він потрібен.
Звідки це береться у Flutter-застосунку
App Store Connect шукає в кожному бінарнику фреймворки для камери, фото, геолокації, контактів, Bluetooth та інших захищених ресурсів — незалежно від того, чи застосунок колись про них просить. У Flutter-застосунку їх зазвичай приносить плагін: image_picker — камеру й фотобібліотеку, geolocator — геолокацію, camera і mobile_scanner — камеру. permission_handler, встановлений через CocoaPods, компілює дозвіл лише тоді, коли його макрос PERMISSION_… в ios/Podfile дорівнює 1; через Swift Package Manager — лише тоді, коли його ключ уже є в Info.plist.
Як виправити
- Запустіть безкоштовну перевірку білда на .ipa. Вона назве відсутній ключ і плагін, якому він потрібен.
- Якщо застосунок користується цим ресурсом, додайте ключ в
ios/Runner/Info.plistз реченням, навіщо він. - Якщо не користується, приберіть плагін або, для
permission_handler, виставте макрос цього дозволу в 0. - Переклад в
InfoPlist.stringsне замінює ключ у самомуInfo.plist.
Безкоштовна перевірка білда читає ваш .ipa в браузері й називає причину цієї та інших відмов, нічого не завантажуючи.
Або доручіть перевірити весь білд: аудит готовності до сторів — 190 €, 2 робочі дні.