UserData в коді та проєктних файлах застосунку — тема, на яку багато розробників взагалі не звертають уваги. Зазвичай команда фокусується на функціональності, дизайні, підписках, ASO, скриншотах і App Review notes, а технічну "гігієну" збірки залишає на потім. Але саме в технічних метаданих іноді залишаються сліди старих проєктів, локальних середовищ, шаблонів, тестових акаунтів, SDK, внутрішніх конфігів і користувацьких налаштувань Xcode.
Короткий розбір цієї теми доступний у нашому YouTube Shorts.
Важливо одразу уточнити: сам факт наявності UserData не означає автоматичний бан Apple Developer акаунта. Apple публічно не розкриває точну логіку всіх внутрішніх перевірок і не говорить, що один технічний файл сам по собі блокує акаунт. Але App Store Review враховує якість застосунку, коректність метаданих, безпеку, приватність, SDK, схожість застосунків і ознаки повторюваних або низькоякісних збірок. Тому зайві технічні сліди можуть стати додатковим red flag-фактором, особливо якщо вони збігаються з історією проблемних застосунків або посилюють відчуття шаблонності.
Що зазвичай мають на увазі під UserData
У розмовній практиці під UserData часто об'єднують різні типи технічних даних, які не мають потрапляти у фінальну або публічну збірку. Це можуть бути локальні користувацькі файли Xcode, налаштування workspace, debug-конфігурації, тестові дані, старі ідентифікатори, артефакти попередніх проєктів, тимчасові plist-файли, неактуальні entitlement-налаштування, залишки SDK або внутрішні сигнатури шаблону.
У Xcode є, наприклад, директорії та файли на кшталт xcuserdata, які належать до користувацьких налаштувань середовища розробки. Вони можуть містити локальний стан інтерфейсу, схеми, breakpoints, workspace-налаштування та інші дані, корисні конкретному розробнику, але не потрібні команді й тим більше не потрібні релізній поставці.
Є й ширша категорія: дані, які знаходяться не просто в Xcode-проєкті, а всередині самого застосунку або поруч із ним. Це можуть бути hardcoded test IDs, старі bundle references, невикористані конфіги Firebase, debug flags, sample data, leftover assets, tracking identifiers, назви чужих проєктів, тимчасові endpoint-адреси, ключі, коментарі, локальні шляхи, старі схеми та сліди генераторів застосунків.
Чому це важливо для App Store Review
Apple в App Review Guidelines прямо говорить, що застосунок має бути протестований, метадані мають бути повними й точними, а розробник несе відповідальність за все, що входить у застосунок, включно зі сторонніми SDK. Це означає, що перевіряється не лише те, як застосунок виглядає для користувача, а й те, наскільки акуратно зібрана вся поставка.
Якщо в застосунку залишаються випадкові технічні дані, вони можуть створювати кілька проблем одночасно. По-перше, вони підвищують ризик privacy-питань, тому що застосунок може містити SDK або API, які потребують коректного опису в privacy manifest і App Privacy. По-друге, вони можуть створювати сліди шаблонності: однакові структури, однакові конфіги, однакові назви, однакові залишкові ресурси. По-третє, вони можуть пов'язувати новий проєкт зі старими або чужими збірками, якщо кодова база була скопійована без нормального очищення.
Для звичайного розробника це особливо неприємно, тому що проблема може бути не в навмисному порушенні. Команда могла купити шаблон, взяти старий проєкт за основу, підключити SDK, використати чужий boilerplate або зібрати застосунок на основі внутрішнього генератора. Якщо після цього не провести технічний аудит, у фінальну збірку можуть потрапити дані, які не мають стосунку до нового продукту.
Як це пов'язано з Design Spam
Guideline 4.3 Spam спрямований проти застосунків, які не дають користувачу нової цінності, є численними варіантами одного й того самого продукту або майже не відрізняються від уже наявних застосунків. Зазвичай розробники думають про Design Spam тільки як про візуальну проблему: схожий UI, однакові іконки, шаблонні скриншоти, однотипні функції.
Але схожість може проявлятися не тільки в дизайні. Якщо кілька застосунків мають однакову структуру проєкту, однакові залишкові ресурси, схожі конфіги, однакові SDK-зв'язки, старі назви всередині файлів, однакові тестові дані або сліди одного генератора, це посилює відчуття, що застосунок є черговим клоном або шаблонною варіацією.
Це не означає, що Apple обов'язково "банить за UserData". Правильніше говорити так: зайві технічні метадані можуть доповнити картину, якщо застосунок і так виглядає схожим на інші проєкти. Наприклад, якщо в застосунку слабка унікальність, шаблонний інтерфейс, однаковий paywall, схожі тексти, однотипна функціональність і при цьому всередині проєкту залишаються чужі або повторювані технічні сліди, ризик питань щодо Design Spam стає вищим.
Чому небезпечні старі SDK і конфіги
Окрема зона ризику — сторонні SDK. Apple підкреслює, що розробник відповідає за весь код SDK, включений у застосунок, і має розуміти практики збору та використання даних. З 2024 року Apple посилила вимоги до privacy manifests, required reason APIs і SDK signatures для низки популярних SDK. Це означає, що старий або випадково залишений SDK — не просто "зайвий файл", а потенційний compliance-ризик.
Наприклад, у проєкті міг залишитися SDK аналітики, реклами, attribution, crash reporting або social login, який більше не використовується в продукті, але все ще знаходиться у збірці. Такий SDK може вимагати privacy manifest, підпис, розкриття даних в App Privacy або обґрунтування доступу до певних API. Якщо команда вважає, що застосунок "не збирає дані", але всередині є SDK з потенційною data collection логікою, виникає невідповідність між фактичною збіркою і заявленими метаданими.
Саме такі невідповідності часто виглядають для App Review небезпечніше, ніж просто технічне сміття. Apple оцінює не лише наміри розробника, а й фактичну поставку.
Перед релізом переконайтеся, що в архів не потрапляють: xcuserdata, debug flags, тимчасові API endpoints, hardcoded test accounts, старі конфіги Firebase/RevenueCat/Apphud, невикористані SDK, зайві entitlements і placeholder-контент.
Які дані варто очищати перед збіркою
Перед релізом корисно пройти технічний чек-лист. Насамперед варто прибрати все, що належить до локального середовища розробника: xcuserdata, особисті workspace-налаштування, локальні breakpoints, тимчасові файли, DerivedData, користувацькі схеми і будь-які артефакти, які не мають потрапляти в репозиторій або релізний архів.
Потім потрібно перевірити дані, які можуть потрапити в застосунок:
- старі bundle IDs і назви попередніх проєктів;
- debug flags і тестові режими;
- тимчасові API endpoints;
- hardcoded test accounts;
- старі Firebase, Adapty, Apphud, Appsflyer, RevenueCat, OneSignal або інші конфіги;
- невикористані SDK і frameworks;
- зайві entitlements;
- неактуальні permissions в Info.plist;
- sample assets, demo content і placeholder-екрани;
- внутрішні коментарі, тестові ключі та локальні шляхи;
- невикористані tracking identifiers;
- privacy manifest, який не відповідає реальному коду;
- SDK без актуального підпису або вимог Apple.
Це не про те, щоб "замаскувати" застосунок. Це про те, щоб фінальна збірка відповідала реальному продукту, не несла чужу історію і не містила зайвих слідів, які можуть викликати питання.
Чим очищення відрізняється від обходу перевірки
Дуже важлива межа: технічне очищення не має використовуватися для приховування порушень. Не можна прибирати сліди лише для того, щоб обійти App Review, сховати заборонену функціональність, приховати збір даних, замаскувати клон або замести зв'язок із проблемним проєктом. Такий підхід сам по собі створює ризик для акаунта.
Правильне очищення — це інженерна гігієна. Розробник видаляє сміття, приводить SDK до ладу, синхронізує privacy manifest з реальним кодом, прибирає debug-артефакти, перевіряє permissions і робить застосунок прозорішим. У результаті збірка стає чистішою, стабільнішою і зрозумілішою як для команди, так і для review.
Якщо застосунок справді унікальний, корисний і відповідає правилам, очищення технічних даних допомагає уникнути хибних збігів і випадкових проблем. Якщо ж продукт побудований як копія, використовує сумнівні SDK або порушує правила, просте очищення UserData не вирішить проблему.
Як вибудувати безпечний процес перед релізом
Найкраще включити перевірку технічних метаданих у стандартний pre-release чек-лист. Перед кожною відправкою в App Store Connect команда має розуміти, що саме входить в архів, які SDK підключені, які permissions запитуються, які entitlements використовуються, які дані заявлені в privacy-розділі і які конфіги активні в release-збірці.
Корисно розділяти debug, staging і production середовища. Тестові дані не мають випадково потрапляти в production. Секрети не мають зберігатися в коді. Старі шаблони не мають тягнути за собою чужі назви, bundle references і assets. SDK потрібно регулярно оновлювати і перевіряти на відповідність вимогам Apple.
Також варто налаштувати нормальний .gitignore для Xcode-проєкту, щоб користувацькі локальні файли не потрапляли в репозиторій. Це знижує шум, зменшує ризик конфліктів і допомагає команді не переносити особисті налаштування одного розробника в загальний проєкт.
Практичний висновок
UserData та інші технічні метадані в проєкті не є автоматичною причиною бану Apple Developer акаунта. Але вони можуть стати додатковим red flag-фактором, якщо створюють зв'язок із проблемними збірками, посилюють відчуття шаблонності, конфліктують із privacy-даними, містять старі SDK або показують, що застосунок зібраний неакуратно.
Для звичайного розробника головний висновок простий: перед релізом потрібно перевіряти не тільки UI, ASO і підписки, а й внутрішню чистоту проєкту. Прибирайте локальні Xcode-дані, старі конфіги, зайві SDK, debug-артефакти, випадкові ідентифікатори і все, що не належить до реального продукту. Це не гарантує проходження review саме по собі, але знижує ймовірність зайвих питань, false-positive схожості і проблем, пов'язаних із Design Spam або некоректною технічною метадатою.
Individual $350 · Company $650 · Продовження $200. Напишіть нам — підберемо відповідний варіант.
Написати в Telegram