App Store submission checklist: ship without a rejection
An App Store submission checklist for iOS apps: developer account, review guidelines, privacy labels, screenshots, TestFlight and common rejection reasons.
Read the post ↗
Native vs cross-platform app development compared: Swift and Kotlin, React Native and Flutter, with the real trade-offs in cost, speed, performance and hiring.
The choice between native vs cross-platform app development is one of the first technical decisions on a mobile project, and one of the hardest to undo. Pick native and you write the app twice, once for iOS and once for Android. Pick cross-platform and you write most of it once. Neither answer is right for every product. This post lays out what each option really costs, where each one wins, and how to decide without a six-week debate.
Native means building each app with the tools the platform owner provides. On iOS that is Swift and SwiftUI (or UIKit) in Xcode. On Android it is Kotlin and Jetpack Compose in Android Studio. You get two codebases, usually two sets of engineers, and full access to everything the platform offers on the day it ships.
Cross-platform means one codebase that produces both apps. The two frameworks most teams compare today are React Native and Flutter. There are others, such as Kotlin Multiplatform, which shares business logic while letting you keep native screens, but React Native and Flutter cover most of the market.
A middle path also exists: a cross-platform app with a few native modules for the parts that need the platform directly, such as a custom camera flow or a background audio player. Most serious cross-platform apps end up here.
Both frameworks are mature, both are backed by large companies, and both ship apps that millions of people use every day. They differ in how they draw the screen and in the language you write.
React Native is maintained by Meta and written in JavaScript or TypeScript. It renders real platform components, so a button on iOS is an iOS button. Its newer architecture removed much of the old overhead between JavaScript and native code. Expo, the toolkit most new React Native projects start with, handles builds, updates and many device APIs out of the box.
The biggest practical advantage is people. If your company already has a React web team, they can read and contribute to the mobile code from week one, and some logic can be shared with the web app.
Flutter is maintained by Google and written in Dart. Instead of using platform components, it draws every pixel itself with its own rendering engine. That gives you identical layouts on both platforms and very smooth custom animation. The trade-off is that your app does not automatically pick up native component changes when Apple or Google redesign them, so the team has to keep the look current.
Dart is easy to learn, but fewer engineers know it already, so hiring can take longer in some markets.
| Factor | Native (Swift + Kotlin) | React Native | Flutter |
|---|---|---|---|
| Codebases | Two | One, plus native modules when needed | One, plus platform channels when needed |
| Language | Swift, Kotlin | JavaScript / TypeScript | Dart |
| UI | Platform components | Platform components | Own rendering engine |
| New OS features | Available on day one | Usually after a library update | Usually after a framework or plugin update |
| Performance | Best possible | Very good for most apps | Very good, strong for custom animation |
| Hiring pool | Two specialist pools | Large, overlaps with web | Growing, smaller |
| Typical cost | Highest | Lower | Lower |
The cost line is the one founders ask about most. A shared codebase does not halve the budget. Design, QA, store work and back-end development are needed either way, and each platform still needs its own testing. In practice the saving is real but smaller than people expect. For a fuller breakdown, see how much it costs to build an app.
Go native when the product lives close to the hardware or the operating system:
Native also makes sense for large companies that already run separate iOS and Android teams. The shared-code saving matters less when the teams exist anyway.
Go cross-platform when the app is mostly screens, forms, lists and network calls, which describes the majority of business apps:
Answer these five questions honestly, and the choice usually makes itself:
If the first answer is yes, lean native, or plan for native modules from the start. If the rest point to speed, both platforms and a web-savvy team, React Native is a strong default. If the design is highly custom and you want pixel-identical screens, look closely at Flutter.
“Cross-platform apps feel cheap.” That was true years ago. Today, poor feel usually comes from poor design and testing, not the framework.
“Native is always faster to build.” It is faster to reach a new OS feature. It is rarely faster to ship two full apps.
“You can switch later for free.” You can switch, but it is close to a rewrite. Treat native vs cross-platform app development as a day-one decision, and write down why you chose.
At Batriders we build both native and cross-platform apps, and where it fits the product, one codebase serves both stores. Where a feature needs the platform itself, we build for the platform. You can read more on our mobile app development page.
Neither wins outright. React Native suits teams with JavaScript or React experience and apps that should look like standard iOS and Android. Flutter suits highly custom designs that must look identical on both platforms. Both are production ready.
Yes. Both frameworks let you write native modules in Swift or Kotlin and call them from the shared code. Most mature apps use a few for features like payments, maps or background tasks.
No. The stores review the app you submit, not the framework behind it. Rejections come from things like crashes, missing privacy details or incomplete features, which our App Store submission checklist covers.
Usually, because one fix ships to both apps. You still have to test each platform, update libraries and keep up with yearly OS releases.
The right framework is the one your team can ship and maintain well, and that is a question about your product and people more than about the technology.
An App Store submission checklist for iOS apps: developer account, review guidelines, privacy labels, screenshots, TestFlight and common rejection reasons.
Read the post ↗A Google Play launch checklist: developer account, the closed testing rule for new personal accounts, data safety form, store listing, AAB and a staged rollout.
Read the post ↗Projects from $5,000 · Contracts and payments in USD