Table of Contents
Publishing your first iOS app to the App Store is one of the most rewarding moments in a developer’s journey — and one of the most confusing. Between provisioning profiles, signing certificates, App Store Connect metadata, and Apple’s famously strict review process, it can feel like navigating a maze blindfolded.
I remember submitting my first app and getting rejected twice before it finally went live. The documentation was scattered, outdated tutorials assumed I already knew things I didn’t, and every guide seemed to skip the exact step I was stuck on.
This guide exists so you don’t have to go through that. It covers every single step — from creating your Apple Developer account to seeing your app live on the App Store — with real screenshots, actual costs, timeline expectations, and all the gotchas I wish someone had warned me about.
Whether you’re building with SwiftUI, UIKit, React Native, Flutter, or any other framework, the App Store submission process is the same. Let’s get your app published.
Quick Overview: What You Need
Before we dive into the detailed steps, here’s everything you’ll need at a glance:
| Requirement | Details | Cost |
|---|---|---|
| Mac computer | Any Mac running macOS 15 Sequoia or later | Varies |
| Xcode 17+ | Latest version from the Mac App Store | Free |
| Apple Developer Programme | Individual or Organisation membership | USD 99/year |
| Apple ID | With two-factor authentication enabled | Free |
| App Store Connect | Apple’s web portal for managing apps | Free (included with membership) |
| App icon | 1024×1024px PNG, no transparency, no rounded corners | — |
| Screenshots | For each supported device size | — |
| Privacy policy URL | Hosted publicly on the web | — |
| App binary | Your compiled .ipa file | — |
Total minimum cost to publish: USD 99 per year for the Apple Developer Programme. That’s it. There are no per-app fees, no submission fees, and no hosting fees for the binary itself.
Step 1: Enrol in the Apple Developer Programme
You cannot publish apps to the App Store without an active Apple Developer Programme membership. Here’s how to get one.
1.1 — Choose Your Membership Type
Apple offers two membership types:
| Type | Best For | Cost | Key Differences |
|---|---|---|---|
| Individual | Solo developers, freelancers | USD 99/year | Apps published under your personal name |
| Organisation | Companies, teams, studios | USD 99/year | Apps published under company name; requires D-U-N-S number |
If you’re publishing your first app as a personal project, Individual is the way to go. You can always convert to an Organisation account later.
Important: If you choose Organisation, you’ll need a D-U-N-S number from Dun & Bradstreet. Applying for one is free but can take up to 30 days, so plan ahead.
1.2 — Create or Sign In with Your Apple ID
- Go to developer.apple.com/programs
- Click Enrol
- Sign in with your Apple ID (or create a new one)
- Ensure two-factor authentication is enabled — Apple requires this for all developer accounts
1.3 — Complete Enrolment
- Fill in your personal details (legal name, address, phone number)
- Review and accept the Apple Developer Agreement
- Pay the USD 99 annual fee (accepted payment methods: credit/debit card)
- Wait for Apple to verify your identity — this typically takes 24–48 hours for individuals, but can take up to two weeks for organisations
Once approved, you’ll have access to:
- App Store Connect — where you manage apps, metadata, pricing, and analytics
- Developer portal — where you manage certificates, identifiers, and provisioning profiles
- TestFlight — for beta testing before public release
- Apple Developer Forums — for technical support
Step 2: Set Up Certificates and Provisioning Profiles
This is the step that trips up most first-time developers. Apple uses a system of certificates and provisioning profiles to verify that you are who you say you are and that your app is legitimately signed.
2.1 — Understanding the Signing System
Here’s a simplified breakdown:
| Component | What It Does |
|---|---|
| Signing Certificate | Proves your identity as a developer. Like a digital passport. |
| App ID | A unique identifier for your app (e.g., com.yourname.appname) |
| Provisioning Profile | Links your certificate, App ID, and device list together. Tells iOS “this app is legitimate.” |
2.2 — The Easy Way: Automatic Signing in Xcode
For your first app, I strongly recommend using Xcode’s automatic signing feature. It handles certificates and provisioning profiles for you.
- Open your project in Xcode
- Select your project in the Navigator panel (left sidebar)
- Select your target under “Targets”
- Go to the Signing & Capabilities tab
- Tick “Automatically manage signing”
- Select your Team from the dropdown (this should show your Apple Developer account)
- Xcode will automatically create and manage your signing certificate and provisioning profile
// Your Bundle Identifier should follow reverse domain notation:
// com.yourname.yourappname
// Example: com.xahidex.myfirstappTip: If you see a “No accounts with an Apple Developer Programme membership” error, ensure you’ve signed into Xcode with the same Apple ID used for your developer account. Go to Xcode → Settings → Accounts and add your Apple ID.
2.3 — The Manual Way (For Reference)
If you ever need manual signing (for CI/CD pipelines or complex setups), here’s the process:
- Create a Certificate Signing Request (CSR) via Keychain Access on your Mac
- Upload the CSR to the Apple Developer Portal to generate a Distribution Certificate
- Download and install the certificate
- Create an App ID in the developer portal with your Bundle Identifier
- Create a Distribution Provisioning Profile linking your certificate and App ID
- Download the profile and configure it in Xcode
For your first app, stick with automatic signing. You can learn manual signing later when you need it.
Step 3: Prepare Your App for Submission
Before uploading anything to Apple, your app needs to meet several technical and design requirements.
3.1 — App Icon
Your app icon is the first thing users see. Apple has strict requirements:
- Size: 1024×1024 pixels
- Format: PNG
- No transparency — the icon must be fully opaque
- No rounded corners — Apple applies the rounding automatically
- No alpha channel
Xcode will automatically generate all required icon sizes from your single 1024×1024 source image.
To add your icon:
- In Xcode, open
Assets.xcassets - Select AppIcon
- Drag your 1024×1024 PNG into the “All Sizes” slot (Xcode 17 uses a single icon slot)
Design tip: Keep your icon simple. It needs to be recognisable at 29×29 pixels on a notification badge. Avoid text, tiny details, or overly complex illustrations. Look at the top-charting apps for inspiration — they almost all use bold, simple shapes with distinct colours.
3.2 — Launch Screen
Every iOS app must have a launch screen. In modern Xcode projects, this is typically a Launch Screen storyboard (LaunchScreen.storyboard) or configured via the Info.plist.
The launch screen should:
- Match the initial state of your app (same background colour, basic layout)
- Not contain logos, branding, or loading indicators (Apple’s guideline)
- Load instantly without any dynamic content
3.3 — Set Your Build Number and Version
In your target’s General tab:
- Version (CFBundleShortVersionString): The public-facing version number (e.g.,
1.0.0). This is what users see on the App Store. - Build (CFBundleVersion): An internal number that must be unique for each upload (e.g.,
1,2,3or1.0.1).
Version: 1.0.0
Build: 1
Rule: Each build you upload to App Store Connect must have a unique Build number. If you upload version
1.0.0build1and need to upload a fix, increment to build2(still version1.0.0).
3.4 — Deployment Target
Set your Minimum Deployment Target thoughtfully. As of 2026:
| iOS Version | Approximate Market Share | Recommendation |
|---|---|---|
| iOS 19 (latest) | ~45% | Target if using latest APIs |
| iOS 18 | ~35% | Good balance of modern APIs and reach |
| iOS 17 | ~15% | Broadest reasonable reach |
| iOS 16 and below | ~5% | Only if you have a specific reason |
For most new apps, targeting iOS 17 or iOS 18 gives you access to modern SwiftUI features whilst reaching the vast majority of active devices.
3.5 — Privacy and Permissions
If your app accesses sensitive data, you must declare usage descriptions in your Info.plist:
<!-- Camera access -->
<key>NSCameraUsageDescription</key>
<string>We need camera access to let you take profile photos.</string>
<!-- Photo library -->
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photos to let you choose a profile picture.</string>
<!-- Location -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to show nearby restaurants.</string>Critical: Every permission must have a clear, user-friendly description explaining why you need it. Vague descriptions like “This app needs your location” will get your app rejected.
Step 4: Create Your App in App Store Connect
App Store Connect is the web portal where you manage everything about your app’s App Store presence — metadata, pricing, screenshots, TestFlight builds, analytics, and more.
4.1 — Log Into App Store Connect
- Go to appstoreconnect.apple.com
- Sign in with your Apple Developer account
- Click My Apps
- Click the + button → New App
4.2 — Fill In the New App Form
| Field | What to Enter |
|---|---|
| Platforms | iOS (tick the checkbox) |
| Name | Your app’s name as it will appear on the App Store (max 30 characters) |
| Primary Language | English (UK) or your preferred language |
| Bundle ID | Select the Bundle Identifier matching your Xcode project |
| SKU | A unique internal reference (e.g., myfirstapp2026) — not shown to users |
| User Access | Full Access (default) |
Naming tip: Your app name must be unique across the entire App Store. If someone else already has “Weather App”, you’ll need something different. Check availability before settling on a name. Apple also prohibits generic terms, trademarked names, or names that include “Apple” or iOS-specific terminology.
4.3 — App Information
After creating the app, you’ll need to fill in several tabs. Let’s go through the most important ones:
App Information tab:
- Subtitle — a short tagline (max 30 characters). Use it to highlight your key feature.
- Category — choose a primary and optional secondary category (e.g., Productivity, Utilities, Health & Fitness)
- Content Rights — confirm you own or have licensed all content
- Age Rating — fill in the questionnaire about your app’s content (violence, language, etc.)
Pricing and Availability tab:
- Choose Free or set a price tier
- Select which countries/regions to distribute in (or choose “All territories”)
- Configure pre-orders if desired
Step 5: Prepare App Store Metadata
This is where many developers rush and cost themselves downloads. Your App Store listing is your storefront — treat it with the same care you’d give the app itself.
5.1 — App Name and Subtitle
| Element | Max Length | SEO Impact | Tips |
|---|---|---|---|
| App Name | 30 chars | Very High | Include your primary keyword naturally |
| Subtitle | 30 chars | High | Highlight your unique value proposition |
Examples:
- ✅
Expense Tracker — Budget Smart(clear, keyword-rich) - ❌
My Amazing App!!!(wastes characters, no keywords)
5.2 — Description
Your description can be up to 4,000 characters. The first three lines are critical — they’re what users see before tapping “More.”
Structure your description like this:
- Hook (first 2–3 lines) — What does your app do? Why should someone care?
- Key features — bullet-pointed list of your best features
- Social proof — testimonials, press mentions, or awards (if any)
- Call to action — encourage the download
Important: The App Store description is not indexed by Apple’s search algorithm. It’s for convincing users to download once they’ve found you. Your keywords field (covered below) is what drives search.
5.3 — Keywords Field
You get 100 characters for keywords. This is the single most important field for App Store search visibility.
Best practices:
- Separate keywords with commas, no spaces
- Don’t repeat words already in your app name or subtitle
- Don’t include “app”, “free”, or your company name
- Use singular forms (Apple matches plurals automatically)
- Include common misspellings and alternative terms
budget,expense,tracker,money,finance,spending,savings,wallet,receipt,income
5.4 — Screenshots
Screenshots are your biggest conversion lever. Apple requires screenshots for each device size you support:
| Device | Screenshot Size | Required? |
|---|---|---|
| iPhone 6.9” (iPhone 16 Pro Max) | 1320 × 2868 px | Yes (if supporting 6.9”) |
| iPhone 6.7” (iPhone 16 Plus / 15 Pro Max) | 1290 × 2796 px | Yes |
| iPhone 6.5” (iPhone 11 Pro Max / XS Max) | 1242 × 2688 px | Optional (older size) |
| iPhone 5.5” (iPhone 8 Plus) | 1242 × 2208 px | Only if supporting these devices |
| iPad Pro 13” | 2064 × 2752 px | Only if your app runs on iPad |
Rules:
- Minimum 2 screenshots, maximum 10 per device size
- PNG or JPEG format
- Can include device frames, text overlays, and backgrounds — but the screenshots must accurately represent the app experience
- No misleading imagery — screenshots must show actual app functionality
Pro tip: You can submit screenshots for the 6.7-inch size only, and App Store Connect will use them for all iPhone sizes. This saves enormous time if you’re a solo developer. Just tick the checkbox “Use 6.7-inch Display screenshots for all iPhone sizes.”
Design tips for high-converting screenshots:
- Put your strongest feature in screenshot #1 — most users never swipe
- Add short, bold text captions above each screenshot explaining the benefit
- Use your brand colours for backgrounds
- Show the app in action, not empty states
- Consider creating an App Preview video (15–30 seconds) — apps with videos have higher conversion rates
5.5 — App Preview Videos (Optional but Recommended)
App Preview videos auto-play on the App Store listing and significantly boost conversion rates.
- Duration: 15–30 seconds
- Format: H.264, MP4
- Resolution: Must match the device screenshot size
- Record directly on a device or simulator using Xcode’s screen recording tools
- Show real app usage — no cinematic trailers or rendered mockups
5.6 — What’s New (For Updates)
For your first submission, this field isn’t required. For future updates, write clear, user-friendly release notes:
What's New in Version 1.1:
- Added dark mode support
- Fixed a bug where notifications weren't appearing
- Improved loading speed by 40%
5.7 — Privacy Policy
Apple requires a privacy policy URL for all apps — even if your app collects zero data.
Your privacy policy must:
- Be hosted on a publicly accessible URL
- Clearly state what data you collect (or explicitly state you collect none)
- Explain how data is used, stored, and shared
- Be written in at least the same language(s) your app supports
Free option: If you need a simple privacy policy, tools like Termly or PrivacyPolicies.com can generate one for free. You can host it as a simple page on your website or even as a GitHub Pages site.
5.8 — App Privacy Details (Nutrition Labels)
Since iOS 14, Apple requires you to declare your app’s data collection practices. This appears as the “App Privacy” section on your App Store listing.
You’ll need to answer:
- Do you or your third-party partners collect data? (Yes/No)
- What types of data? (Contact info, location, browsing history, etc.)
- How is each data type used? (Analytics, advertising, personalisation, etc.)
- Is the data linked to the user’s identity?
Be honest and thorough. Apple and users both take this seriously, and inaccurate privacy labels can lead to rejection or removal.
Step 6: Build, Archive, and Upload Your App
This is the moment of truth — packaging your app and sending it to Apple.
6.1 — Final Pre-Upload Checklist
Before archiving, run through this checklist:
- App icon is set (1024×1024, no transparency)
- Launch screen is configured
- Bundle Identifier matches App Store Connect
- Version number is set correctly
- Build number is unique
- Signing is configured (automatic or manual)
- All permission descriptions are clear and specific
- App runs without crashes on a real device
- No references to competing platforms (Android, Windows, etc.) in your UI
- No placeholder content, test data, or
lorem ipsum - Debug/development code is removed
6.2 — Select the Right Build Destination
In Xcode:
- In the toolbar, set the build destination to Any iOS Device (arm64) — not a simulator
- This ensures the build is compiled for real hardware
6.3 — Archive Your App
- Go to Product → Archive in the menu bar
- Xcode will compile your app in Release configuration
- When the archive is complete, the Organiser window will open automatically
- Your new archive appears in the list with a timestamp
Troubleshooting: If “Archive” is greyed out, make sure your build destination is set to a real device (not a simulator). Archiving is only available for physical device destinations.
6.4 — Upload to App Store Connect
From the Organiser window:
- Select your archive
- Click Distribute App
- Choose App Store Connect as the distribution method
- Select Upload (not Export)
- Leave the default options:
- ✅ Upload your app’s symbols (for crash reporting)
- ✅ Manage version and build number
- Click Upload
Xcode will validate your build, check for common issues, and upload to App Store Connect. This usually takes 2–10 minutes depending on your app size and internet speed.
6.5 — Alternative: Upload via Transporter
If you’re using a CI/CD pipeline or prefer a separate tool, Apple provides Transporter (free on the Mac App Store). You can export your archive as an .ipa file from Xcode and upload it via Transporter.
6.6 — Wait for Processing
After uploading, App Store Connect needs time to process your build:
- Processing time: 5–30 minutes typically
- You’ll receive an email when processing is complete
- If there are issues (missing icons, invalid entitlements, etc.), you’ll receive an email detailing the errors
- Once processed, the build appears in the TestFlight tab and can be selected for App Review
Common processing error: “Missing compliance” — if your app uses encryption (including HTTPS calls), you’ll need to answer an export compliance question. For most apps using standard HTTPS/TLS, select “No” to the question about non-standard encryption. You can also add the
ITSAppUsesNonExemptEncryptionkey set toNOin yourInfo.plistto skip this prompt for future builds.
<key>ITSAppUsesNonExemptEncryption</key>
<false/>Step 7: Test with TestFlight (Highly Recommended)
Before submitting for App Review, test your app with real users through TestFlight — Apple’s built-in beta testing platform.
7.1 — Why Use TestFlight?
- Test on real devices you don’t own
- Get feedback from friends, family, or beta users
- Identify crashes and bugs before public release
- TestFlight builds don’t go through full App Review (internal testers are instant; external testers have a lighter review)
7.2 — Internal Testing
- In App Store Connect, go to your app → TestFlight tab
- Click Internal Testing → Create Group
- Add testers by Apple ID (up to 100 internal testers)
- Select the build you uploaded
- Testers receive an email invitation and install via the TestFlight app
Internal testers must be part of your App Store Connect team. There’s no review required — builds are available immediately.
7.3 — External Testing
- In the TestFlight tab, click External Testing → Create Group
- Add testers by email (up to 10,000 external testers)
- External builds go through a light beta review (usually approved within 24–48 hours)
- You can share a public TestFlight link for open betas
Pro tip: Even if you don’t have a big testing group, send it to at least 3–5 people. Fresh eyes catch things you’ll never spot yourself — awkward flows, confusing labels, crashes on device sizes you didn’t test.
Step 8: Submit for App Review
This is the final gate between your app and the App Store.
8.1 — Select Your Build
- In App Store Connect, go to your app → App Store tab
- Scroll to the Build section
- Click the + button and select the processed build you want to submit
- Ensure all metadata (description, screenshots, keywords, privacy policy, etc.) is complete
8.2 — App Review Information
Fill in the App Review Information section:
- Contact Information — your name, phone number, and email. The review team may contact you if they have questions.
- Sign-In Required — if your app requires a login, provide a demo account with username and password. This is absolutely critical. If the reviewer can’t access your app, it will be rejected immediately.
- Notes for Reviewer — use this field to explain anything non-obvious. For example:
- “This app requires Bluetooth to connect to a fitness tracker. The core features can be tested without a device by tapping ‘Demo Mode’ on the home screen.”
- “Location features work best in the United States. Use the provided test account for full access.”
8.3 — Version Release Options
Choose how you want your app to go live after approval:
| Option | Best For |
|---|---|
| Automatically release | Most first-time apps — goes live as soon as it’s approved |
| Manually release | When you want to coordinate launch timing (press, marketing) |
| Scheduled release | Set a specific date and time |
8.4 — Submit
Click Submit for Review. Your app’s status changes to Waiting for Review.
8.5 — The Review Timeline
As of 2026, here’s what to expect:
| Stage | Typical Duration |
|---|---|
| Waiting for Review | 0–24 hours |
| In Review | 4–48 hours |
| Total (submission to decision) | Usually 24–48 hours |
Apple states that 90% of submissions receive a response within 24 hours. In my experience, most straightforward apps are reviewed within 12–24 hours.
Important: Review times can spike around major events — WWDC (June), new iPhone launches (September), and the holiday season (December). Plan accordingly.
Step 9: Handling Rejection (It Happens to Everyone)
Don’t panic if your app gets rejected. It’s incredibly common, especially for first submissions. Apple will provide a specific reason and guideline reference.
9.1 — Most Common Rejection Reasons in 2026
Based on Apple’s transparency reports and developer community data, here are the top rejection reasons:
| # | Reason | Guideline | How to Fix |
|---|---|---|---|
| 1 | Performance: App Completeness | 2.1 | Remove placeholder content, broken features, test data |
| 2 | Performance: Accurate Metadata | 2.3 | Ensure screenshots and descriptions match actual app |
| 3 | Design: Minimum Functionality | 4.2 | App must offer meaningful functionality beyond a simple website |
| 4 | Legal: Privacy | 5.1.1 | Add required privacy policy; declare data collection accurately |
| 5 | Business: Payments | 3.1.1 | Use In-App Purchase for digital goods/services (not external payment links) |
| 6 | Safety: Objectionable Content | 1.1 | Remove inappropriate content or add content filters |
| 7 | Performance: Software Requirements | 2.4.5 | Don’t use private APIs or undocumented frameworks |
| 8 | Design: Copycat | 4.1 | App must be sufficiently unique; don’t clone existing apps |
| 9 | Bugs and Crashes | 2.1 | Fix all crashes, especially on launch and core user flows |
| 10 | Missing Demo Account | — | Provide working login credentials for apps requiring authentication |
9.2 — How to Respond to a Rejection
- Read the rejection message carefully — it will reference a specific App Store Review Guideline number
- Go to the Resolution Centre in App Store Connect to see the full details
- You can reply directly to the reviewer to ask for clarification or provide additional context
- Fix the issue(s), increment your build number, upload a new build, and resubmit
- In your resubmission notes, explain what you changed
Tip: Be polite and specific in your Resolution Centre replies. Reviewers are human. A clear, respectful explanation of why you believe your app complies — or what changes you’ve made — goes a long way.
9.3 — Appealing a Rejection
If you believe the rejection is incorrect:
- Reply in the Resolution Centre with your reasoning
- If unresolved, file an appeal through the App Store Review Board
- Appeals are reviewed by a senior team and typically responded to within 3–5 business days
Step 10: Your App Is Live! Now What?
Congratulations — your app is on the App Store! But launching is just the beginning. Here’s what to do next.
10.1 — Monitor Crash Reports and Analytics
App Store Connect provides built-in analytics:
- Impressions — how many times your app appeared in search or browse results
- Product Page Views — how many users viewed your listing
- Downloads — total installs (first-time + re-downloads)
- Conversion Rate — the percentage of page viewers who downloaded
- Crashes — monitored through Xcode Organiser or App Store Connect
Focus on your conversion rate first. If lots of people view your listing but few download, your screenshots or description need work.
10.2 — Respond to User Reviews
Replying to reviews shows that you care and can significantly improve your app’s reputation:
- Thank users for positive reviews
- Address negative reviews constructively — ask for details, explain fixes, show empathy
- Never be defensive or dismissive
10.3 — Plan Your First Update
Ship an update within the first 2–4 weeks of launch. This signals to Apple’s algorithm that your app is actively maintained. Include:
- Bug fixes reported by early users
- Performance improvements
- Small feature additions based on feedback
10.4 — App Store Optimisation (ASO) Basics
To improve your app’s visibility in App Store search:
- Iterate on your keywords — use App Radar, Sensor Tower, or AppTweak to research keyword rankings
- Update screenshots periodically — especially after adding major features
- Localise your listing in key languages — even just adding Arabic, Spanish, and German can significantly expand your reach
- Encourage ratings — use the native
SKStoreReviewControllerAPI to prompt users at the right moment (after a positive interaction, not at launch)
import StoreKit
// Request a review at an appropriate moment
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
SKStoreReviewController.requestReview(in: windowScene)
}Complete Timeline: From Zero to App Store
Here’s a realistic timeline for publishing your first app:
| Phase | Duration | Details |
|---|---|---|
| Apple Developer enrolment | 1–2 days | Account verification (up to 2 weeks for organisations) |
| Development | Varies | Depends on app complexity |
| Preparing App Store assets | 1–3 days | Icon, screenshots, descriptions, privacy policy |
| App Store Connect setup | 1–2 hours | Creating the app record and filling metadata |
| TestFlight testing | 3–7 days | Internal and external beta testing |
| App Review | 1–2 days | Typically within 24 hours |
| Handling rejection (if any) | 1–5 days | Fix, resubmit, re-review |
| Total (after development) | 1–3 weeks | From “ready to submit” to “live on App Store” |
Cost Breakdown: What You’ll Actually Spend
| Item | Cost | Frequency |
|---|---|---|
| Apple Developer Programme | USD 99 | Annual |
| Xcode | Free | — |
| Mac computer (minimum: Mac mini) | From USD 599 | One-time |
| App Store screenshot design tool (e.g., Previewed, AppMockUp) | Free–USD 10/month | Optional |
| Privacy policy generator | Free | One-time |
| ASO tool (App Radar, etc.) | Free–USD 50/month | Optional |
| Total first-year minimum | USD 99 | (Assuming you already own a Mac) |
No Mac? You have a few options: rent a Mac in the cloud through services like MacStadium or AWS EC2 Mac instances, use a Hackintosh (not officially supported), or borrow a friend’s Mac. For serious iOS development, investing in a Mac mini is the most cost-effective long-term solution.
Framework-Specific Notes
Regardless of what framework you used to build your app, the submission process is identical. But here are some framework-specific tips:
SwiftUI / UIKit (Native)
- Archive and upload directly from Xcode as described above
- Ensure your
@mainapp entry point is correct - SwiftUI Previews won’t affect your production build, but remove any
#Previewmacros that reference development-only code
React Native
- After building your JavaScript bundle, open the
ios/directory in Xcode - Run
npx react-native build-ios --mode=Releaseor archive from Xcode - Ensure
Hermesengine is enabled for better performance - Common issue: missing
Podfile.lock— runcd ios && pod installbefore archiving
Flutter
- Run
flutter build ipato generate the archive - The
.ipafile will be atbuild/ios/ipa/ - Upload via Xcode Organiser or Transporter
- Ensure your
Info.plistandRunner.xcodeprojsettings are correct
Expo (React Native)
- Run
eas build --platform iosto build in the cloud - Use
eas submit --platform iosto upload directly to App Store Connect - Expo’s EAS Build handles signing certificates and provisioning profiles automatically
- Requires an Apple Developer account linked to your Expo account
Apple’s App Review Guidelines: The Rules You Must Know
Apple’s App Store Review Guidelines are comprehensive. Here are the sections most relevant to first-time developers:
Safety (Section 1)
- No objectionable content (hate speech, graphic violence, pornography)
- User-generated content apps must have reporting and moderation features
- Medical and health apps must not provide inaccurate diagnoses or treatment advice
Performance (Section 2)
- Apps must be complete — no beta labels, placeholder content, or broken features
- Must work on the current shipping iOS version
- Must not contain hidden features or functionality
- Accurate metadata — screenshots must show the real app
Business (Section 3)
- Digital goods and subscriptions must use In-App Purchase (Apple’s 30% commission, or 15% for small businesses earning under USD 1 million)
- Physical goods and services (food delivery, ride-hailing, etc.) can use external payment
- Apps must not trick users into making purchases
Design (Section 4)
- Must offer meaningful functionality — “apps that are simply a song, a movie, or a book” don’t qualify
- Must feel native to iOS — avoid web-wrapper apps with no native functionality
- Apps that duplicate existing Apple features without adding value may be rejected
Legal (Section 5)
- Must have a privacy policy
- Must comply with GDPR, CCPA, and local data protection laws
- Must request only necessary permissions
- Children’s apps have additional requirements under COPPA
Troubleshooting Common Issues
”No accounts with Apple Developer Programme membership”
Fix: Sign into Xcode → Settings → Accounts with the Apple ID linked to your developer programme membership.
”Archive” menu option is greyed out
Fix: Change the build destination from a simulator to “Any iOS Device (arm64).”
Build upload stuck at “Authenticating with the App Store”
Fix: Check your internet connection. Try signing out and back into your Apple account in Xcode. As a last resort, use Transporter instead.
”Missing Compliance” warning after upload
Fix: Add ITSAppUsesNonExemptEncryption key to Info.plist set to NO (if you only use standard HTTPS/TLS encryption).
”Invalid Binary” rejection
Fix: Usually means you’re using a deprecated API, missing required device capabilities, or have an issue with your provisioning profile. Read the specific error in the email from Apple.
App crashes only on the reviewer’s device
Fix: Test on as many real devices as possible. Use TestFlight with external testers. Check crash logs in Xcode Organiser. Common culprits: force-unwrapped optionals, memory issues on older devices, network timeout handling.
”Guideline 4.2 — Minimum Functionality”
Fix: Your app must do more than a website could. Add native features: push notifications, widgets, offline support, camera integration, haptic feedback. Show the reviewer what makes your app uniquely valuable as a native experience.
Publishing Checklist: Your Final Pre-Submission Audit
Use this checklist before every submission:
Technical:
- App runs without crashes on multiple device sizes
- All features work as described in the metadata
- No placeholder content, test data, or
lorem ipsum - Performance is acceptable (no major lag, memory leaks, or excessive battery drain)
- App works offline (or gracefully handles no network)
- All third-party SDKs are up to date and compliant
App Store Connect:
- App name, subtitle, and description are complete and compelling
- Keywords field is optimised (100 characters, no waste)
- Screenshots are uploaded for all required device sizes
- App icon is 1024×1024, no transparency, no rounded corners
- Privacy policy URL is valid and accessible
- App Privacy details (nutrition labels) are filled accurately
- Contact information and demo account provided for reviewers
- Age rating questionnaire completed
- Pricing and availability configured
- Version release method chosen (automatic, manual, or scheduled)
Legal & Compliance:
- Privacy policy exists and is accurate
- GDPR/CCPA compliance (if applicable)
- Permissions usage descriptions are clear and specific
- Export compliance declared (encryption question answered)
- No third-party intellectual property used without licence
FAQs
How much does it cost to publish an app on the Apple App Store?
The only mandatory cost is the Apple Developer Programme at USD 99 per year. There are no per-app submission fees, no upload fees, and no download fees charged to you. Apple takes a 30% commission on paid app sales and in-app purchases (15% if you qualify for the Small Business Programme earning under USD 1 million per year).
How long does it take to get an app approved on the App Store?
Apple states that 90% of app submissions are reviewed within 24 hours. In practice, most straightforward apps are approved within 12–48 hours. Complex apps, apps with in-app purchases, or submissions during busy periods (WWDC, iPhone launch, holidays) may take 2–5 days.
Can I publish an iOS app without a Mac?
Not directly. You need Xcode to archive and sign your app, and Xcode only runs on macOS. Alternatives include renting a Mac in the cloud (MacStadium, AWS EC2 Mac), using Expo EAS Build for React Native apps (builds in the cloud), or Codemagic/Bitrise CI/CD services that provide Mac build machines. You’ll still need a Mac for initial setup and debugging.
What is the minimum iOS version I should target?
For new apps in 2026, targeting iOS 17 gives you the best balance of modern API access and device reach (~95% of active iPhones). If you’re using latest SwiftUI features, iOS 18 is a pragmatic minimum. Only target iOS 16 or below if you have a specific business requirement.
Can I publish an app for free on the App Store?
You can list your app as free for users, meaning no purchase price. However, you still need the USD 99/year Apple Developer Programme membership to publish. There’s no way to publish without this fee.
What happens if my app gets rejected?
You’ll receive a detailed message in the Resolution Centre (App Store Connect) explaining which guideline was violated. Fix the issue, increment your build number, upload a new build, and resubmit. You can also reply to the reviewer for clarification. Rejections are normal — even experienced developers get them.
Do I need a privacy policy for my iOS app?
Yes, always. Apple requires a privacy policy for every app submitted to the App Store, regardless of whether you collect user data. If your app collects no data, your privacy policy can simply state that. The policy must be hosted on a publicly accessible URL.
How do I update my app after it’s published?
Create a new version in App Store Connect, increment your version number (e.g., 1.0.0 → 1.1.0), archive and upload the new build, fill in the “What’s New” field, and submit for review. Updates go through the same review process but are typically approved faster than initial submissions.
Can I publish the same app on both the App Store and Google Play?
Absolutely. If you’re using a cross-platform framework like React Native, Flutter, or Kotlin Multiplatform, you can maintain a single codebase and publish to both stores. The submission processes are completely separate — you’ll need both an Apple Developer account (USD 99/year) and a Google Play Developer account (USD 25 one-time).
What percentage does Apple take from app sales?
Apple charges a 30% commission on paid app downloads and in-app purchases. Developers earning under USD 1 million per year qualify for the App Store Small Business Programme, which reduces the commission to 15%. Subscription apps also receive the reduced 15% rate after a subscriber has been active for more than 12 months.
How do I get more downloads after launching?
Focus on App Store Optimisation (ASO) — optimise your keywords, screenshots, and description. Encourage happy users to leave ratings using the native SKStoreReviewController. Share your app on social media, relevant forums, and communities. Consider running Apple Search Ads for targeted visibility. Most importantly, ship regular updates — active apps rank higher in search results.
Is TestFlight mandatory before submitting?
No, TestFlight is optional. You can submit directly to App Review without beta testing. However, I strongly recommend testing with at least a few real users. They’ll catch bugs, UX issues, and edge cases you’d never find yourself. It’s much better to fix these before your public launch than to get 1-star reviews.


