Have you developed your first mobile app? Congratulations! 🎉 But it's too early to relax — one of the most nerve-wracking stages is ahead: moderation. According to the feelings (and the practice of the teams), approximately every second the first publication gets a "rejection" or a list of edits. Let's figure out what most often goes wrong — and how to pass the review the first time.

Russian specifics: what do you need to know?
Before diving into the technical details, it is important to understand the current "market realities" for Russian developers. They affect accounts, payments, APIs, and monetization — and therefore the chance to pass moderation smoothly.
Problem with developer account payment
Apple and Google can block payments with Russian cards. What they usually do:
Use accounts of friends/partners abroad
Work through foreign intermediary companies
Use international virtual cards (e.g. Wise)
For Android, alternatives are considered: RuStore, NashStore, AppGallery
Regional restrictions
Some services and APIs may be unavailable or work with nuances:
Cards: Google Maps API — restrictions may apply; alternatives: Yandex Maps, OpenStreetMap
Payments: foreign options may work to a limited extent; think about the monetization model in advance
Push: Firebase usually works, but "sudden nuances" are possible — keep plan B
Next comes the most important part: why they reject apps. Let's analyze both platforms in a human way and with examples.
🍎 Top 5 reasons for rejection in the App Store
1) Incorrect metadata and description
What's going wrong:
The description contains contacts (email, phone) or links to social networks
Screenshots do not correspond to the real functionality
The description mentions Android/Google Play/other platforms
Keywords contain brand/competitor names
How to do it right:
❌ Bad
Лучшее приложение! Пишите на email@example.com
Доступно также в Google Play!✅ Good
Планируйте задачи, управляйте проектами и повышайте продуктивность.
Синхронизация между устройствами, напоминания и удобный интерфейс.Important for Russian developers: if you have a web version with a Russian domain, do not insert a link in the description "on the machine". Apple can find fault with the content of the site.
2) Minimum Functionality (too "empty" MVP)
Reject if:
This is too simple a web wrapper without value
The application duplicates the built-in iOS functions (flashlight/calculator) without additional meaning
The app doesn't work without an account, but you didn't give the moderators a test login
Solution:
Give a demo account with filled in data
Describe in the notes what and where to click (yes, it really helps)
Add unique value (not just a web-view)
3) Confidentiality and privacy
Common mistakes:
Data collection without consent
No Privacy Policy
Requesting permissions without a clear explanation
Tracking without correct permission (ATT)
Example: in iOS, do not write "I need a camera because I need it." Write specifically and to the point.
// When requesting a camera in Info.plist, be sure to:
<key>NSCameraUsageDescription</key>
<string>Приложению нужен доступ к камере для
сканирования QR-кодов ваших заказов</string>
// AND NOT just:
<string>Нужен доступ к камере</string>Privacy Policy is better to have in English (for international) and Russian (for the audience)
Link to Privacy Policy is required in App Store Connect
If you are collecting email/phone, explain directly why
4) Bugs and crashes during testing
Moderators are actually testing the app. If it crashes on the first launch or shows a white screen, you will be out of the review faster than you can blink 😅
Typical problems:
Crash on first startup
White screen/freeze
Buttons not working
Problems with the iPad version (if support is specified)
How to check yourself:
Test on real devices (not just a simulator)
Check the main scenarios: first launch, login, key screens
Use TestFlight for beta testing
5) Purchases and monetization
Critical errors:
Payment "bypassing" IAP (In-App Purchase)
Mention of more favorable prices on the website
Subscription without management in the application
Hard reality: if you can't accept payments through Apple IAP (for example, there is no foreign company), consider the model: free app, activation via the web (without mentioning prices), or publication in alternative stores.

🤖 Top 5 reasons for rejection on Google Play
1) Inconsistency of the target API level
Google requires an up-to-date targetSdkVersion. If you are using the old one, prepare for a refusal.
// In 2025, at least (example):
android {
compileSdk 34
defaultConfig {
targetSdk 34 // Not lower!
minSdk 24
}
}Why they reject: old targetSdk (for example, 28/30). Solution: update the project and dependencies.
2) Violation of the Content Policy
Frequent problems:
Icons/name are misleading (too similar to well-known brands)
18+ content without rating
Spam functionality (automatic actions without consent)
Medical/financial advice without disclaimer
For the Russian market: if the app is related to finance, clearly state that it is not a financial advisor. Be careful with cryptocurrency topics – moderation can be strict.
3) Permissions issues
What annoys moderators: when you request everything, but use 1 button.
<!-- ❌ Плохо: просите всё подряд -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- но реально используете только камеру -->Rule: each permission must be justified (including in Data Safety / declarations).
4) There is no mandatory information on data collection (Data Safety)
Google requires you to fill in Data Safety: what you collect, how you use it, whether you transfer it to third parties, and whether you can delete the data.
Life hack: even if you don't collect anything, just say so No data collected. Skipping this step often ends in failure.
5) Broken or test items
Debug was uploaded instead of Release
Left test buttons/features
Logs in the console (remove
console.log,Log.d())AAB size too large
✅ Собрали Release-версию
✅ Включили ProGuard/R8
✅ Удалили console.log / Log.d
✅ Протестировали на разных экранах
✅ Проверили работу на Android 14⚠️ Common errors for both platforms
Incorrect sizes of icons and screenshots
App Store
Icon 1024×1024px (no alpha channel, no rounding)
Separate screenshots for iPhone and iPad
Different screen sizes (e.g. 6.7", 6.5", 5.5")
Google Play
Icon 512×512px
Feature Graphic 1024×500px
Minimum 2 screenshots (maximum 8)
JPG/PNG up to 8MB
A typical trap: you upload “iPhone screenshots” with rounded corners to Google Play, and Play adds its own rounded corners. It turns out to be a double frame and a "cheap look".
Problems with age rating
Even mentioning alcohol can raise the rating
Chat/forum = potentially higher rating
Scary/shocking content even "as a joke" = higher rating
Tip: It's better to overstate honestly than to understate and get rejected with a resubmission.
Unable to delete account
Requirement of recent years: if a user can create an account, they should be able to delete it directly in the app (and not “write to support”).
// Minimum version
async function deleteAccount() {
if (confirm('Are you sure you want to delete the account? Data cannot be recovered.')) {
await api.deleteUser(userId);
await logout();
showMessage('Account deleted');
}
}Alternative sites (if it is very difficult)
RuStore — growing audience, own moderation
NashStore - an alternative for Android
AppGallery - Huawei store, large audience in Asia
😵 What to do if you are rejected
Don't panic. Rejection is normal, especially on the first publication.
Carefully read the reason for the refusal (it comes to the email/console)
Correct specific points
In the Resolution Center/response, describe what exactly was corrected
Resubmit
If the reason is unclear, ask for clarification. Moderators usually respond. For Russian-speaking developers: write in simple English, without slang.
🏁 Conclusion: the main rules
Golden rule #1: read the guidelines. Most rejections are due to ignoring the documentation.
Golden Rule #2: test on real devices. The emulator will not show all the problems.
Golden Rule #3: be honest. Rating, permissions, functionality — without "tricks".
Golden Rule #4: take your time. A week of preparation saves a month of resubmissions.
For Russian developers: keep a backup plan. Restrictions can change suddenly. Have contacts of people/companies for publication and think about alternative stores.
🎓 Want to get a deeper understanding of mobile development?
Publication is the final touch in a long journey. Codice we take care of the entire process from idea to release:
Development on React Native, Flutter and native technologies
Mobile application architecture
Working with APIs and databases
Setting up CI/CD for automatic publishing
Monetization and analytics
Practical tasks and projects — without water
Need support? We're here! 🤝
Stuck with an error? Moderation is not working? Not sure how to properly design Data Safety or metadata?
Join our Telegram community: more than 2000 active developers will help you figure it out.
👉 Find the Code in Telegram and become part of an active developer community!
