Mobile App Developer · Focus area 1: Choose your ecosystem

MA3: Native or cross-platform: Swift, Kotlin, Flutter and React Native

Goal: explain how native Android (Kotlin), native iOS (Swift), Flutter and React Native build apps, compare them fairly for a given team and product, and reach native features from a cross-platform app when you need them.

You'll need: MA1, MA2, Module 29 (Modules, Classes, Generics and Utility Types), Module 97 (Product Development), and the KhetNote practice kit (package.json, app.json).

Where this is used: every mobile team makes this choice, and revisits it as the product grows. Large companies use all four, sometimes in the same app.

How it differs: MA2 taught one toolkit. This module steps back to compare the main ways of building apps, so you can choose with evidence and work alongside developers who use the others.

Time: reading about 2½ hours · practice (the Try it tasks) about 2 hours · assignment about 3 hours.

Lessons

  1. 1Native Android with KotlinReading 15–25 minutes, plus practice✓
  2. 2Native iOS with SwiftReading 15–25 minutes, plus practice✓
  3. 3Cross-platform with React Native and FlutterReading 15–25 minutes, plus practice✓
  4. 4Choosing an approachReading 15–25 minutes, plus practice✓
  5. 5Reaching native features from a cross-platform appReading 15–25 minutes, plus practice✓

🛠️Assignment: Choosing KhetNote's approach

  1. Describe the three approaches (native, React Native, Flutter) in your own words, with how each draws screens.
  2. Write weighted criteria for KhetNote, with weights totalling 100, agreed before scoring.
  3. Score each approach with a sentence of evidence per score, and total them.
  4. Choose, and say what result from a prototype would make you change your mind.
  5. Plan one native feature (photo, location or notifications): the module, the permission and the build needed.

Self-check before you finish:

✅Module check

Explain in a few sentences, in your own words:

How would you choose between native and cross-platform for an app like KhetNote?

Show a good answer

A good answer mentions: native Android with Kotlin and Compose and native iOS with Swift and SwiftUI, which give full platform access but two codebases (and iOS needs a Mac or cloud builds); React Native, which draws native views from JavaScript, and Flutter, which draws with its own engine from Dart; criteria such as team skills, users' platforms, needed features, performance on low-cost phones, offline storage and cost, weighted before scoring; a prototype of the riskiest feature; a written decision with a revisit point; and Expo modules, config plugins and development builds for native features.

📚Official references

Official documentation and guidance for this module's topics, chosen on 2 November 2026. Tools, laws and standards change, so check the current version before you rely on a detail. If a link has moved, search the same site.

📝Module quiz

10 questions · 10 marks each · 100 marks in all · pass mark 70% · retry as often as you like ·

1. Which toolkit builds Android screens from functions that describe the UI, much like React components?

Why each option is right or wrong

  • “Gradle, the system that builds Android apps” (Incorrect): Gradle builds; it doesn't describe screens.
  • “Room, the library that stores data in SQLite” (Incorrect): Room is for storage.
  • “Xcode, the editor that builds Android apps” (Incorrect): Xcode is Apple's editor.
  • “Jetpack Compose, Android's modern UI toolkit” is correct.

    Composable functions describe screens.

    • List: LazyColumn draws only what's on screen.

📖 Revise: Lesson 1: Native Android with Kotlin

Question ID sp-mobile-03-q1 · Report a mistake in this question
2. A team uploads an .apk for a new app to Google Play and it's refused. What's the likely reason?

Why each option is right or wrong

  • “The app needs to be written in Java, not Kotlin” (Incorrect): Kotlin is Google's recommended language.
  • “Play accepts only apps that also exist on iOS” (Incorrect): Android-only apps are common.
  • “Apps must be built with Flutter for Play” (Incorrect): Play accepts apps from any toolkit.
  • “New apps are expected as Android App Bundles (.aab)” is correct.

    Play builds device-specific files from the bundle.

    • Use .apk: for direct testing on a phone.

📖 Revise: Lesson 1: Native Android with Kotlin

Question ID sp-mobile-03-q2 · Report a mistake in this question
3. A learner without a Mac wants to build and test an iOS app. What's a workable plan?

Why each option is right or wrong

  • “Build it in Android Studio and copy the file to an iPhone” (Incorrect): Android Studio doesn't build iOS apps.
  • “Skip iOS testing until the app is in the App Store” (Incorrect): Untested releases risk bad reviews.
  • “Use only the iOS simulator, which runs on any computer” (Incorrect): The simulator also needs macOS.
  • “Cloud builds, then testing on an iPhone via TestFlight” is correct.

    Cloud builds run on Macs for you.

    • Example: EAS Build.

📖 Revise: Lesson 2: Native iOS with Swift

Question ID sp-mobile-03-q3 · Report a mistake in this question
4. What is SwiftUI?

Why each option is right or wrong

  • “A cross-platform toolkit that uses the Dart language” (Incorrect): That's Flutter.
  • “A testing service for sending beta builds to users” (Incorrect): That's TestFlight.
  • “Android's library for storing data on the phone” (Incorrect): That's Room.
  • “Apple's modern toolkit for building screens in Swift” is correct.

    Views are described in code.

    • Older: UIKit, still widely used.

📖 Revise: Lesson 2: Native iOS with Swift

Question ID sp-mobile-03-q4 · Report a mistake in this question
5. How does Flutter draw its screens, compared with React Native?

Why each option is right or wrong

  • “Both draw HTML pages inside a hidden web browser” (Incorrect): Neither works that way.
  • “Flutter draws native views, React Native draws pixels itself” (Incorrect): It's the other way round.
  • “Neither draws anything; the phone builds the screens” (Incorrect): The toolkit decides how screens are drawn.
  • “Flutter draws every pixel with its own engine” is correct.

    React Native uses the platforms' native views.

    • So: Flutter looks the same on both unless styled.

📖 Revise: Lesson 3: Cross-platform with React Native and Flutter

Question ID sp-mobile-03-q5 · Report a mistake in this question
6. A team of four React web developers needs Android and iOS apps in three months. Which approach most likely suits them?

Why each option is right or wrong

  • “Native Kotlin and Swift, learning both languages first” (Incorrect): Two new languages and two codebases are slow to start.
  • “Flutter, because Dart is the same language as JavaScript” (Incorrect): Dart is a different language.
  • “A website only, because apps can't be built in three months” (Incorrect): Apps can be built in that time.
  • “React Native, using the React skills they already have” is correct.

    One codebase builds on their skills.

    • Plan: help for any native module they need.

📖 Revise: Lesson 3: Cross-platform with React Native and Flutter

Question ID sp-mobile-03-q6 · Report a mistake in this question
7. A team scored three approaches, then changed the weights until their favourite won. What's the main problem?

Why each option is right or wrong

  • “The scores should have been out of 10 instead of 5” (Incorrect): The scale isn't the issue.
  • “They should have compared more than three approaches” (Incorrect): More options don't fix bent weights.
  • “Weighted scoring doesn't work for technology choices” (Incorrect): It works when weights are agreed first.
  • “Weights set after scoring can be bent to fit a favourite” is correct.

    Agree weights first, then score.

    • Then: check if small changes flip the result.

📖 Revise: Lesson 4: Choosing an approach

Question ID sp-mobile-03-q7 · Report a mistake in this question
8. A team needs a Bluetooth printer SDK that exists only for native Android and iOS. What should they do before choosing a toolkit?

Why each option is right or wrong

  • “Choose whatever toolkit is newest and deal with it later” (Incorrect): The blocker would appear after the choice.
  • “Avoid printing and ask users to write receipts by hand” (Incorrect): That drops a needed feature.
  • “Ask the SDK's makers to rewrite it in JavaScript” (Incorrect): It may not happen, or not in time.
  • “Prototype the printer connection in each candidate first” is correct.

    The riskiest feature decides the approach.

    • Cost: days now, instead of a lost month later.

📖 Revise: Lesson 4: Choosing an approach

Question ID sp-mobile-03-q8 · Report a mistake in this question
9. An app with a new barcode library works in development but crashes in Expo Go for testers. Why?

Why each option is right or wrong

  • “The testers' phones are too old to scan barcodes” (Incorrect): It works in development on similar phones.
  • “Barcodes can only be scanned in native Kotlin apps” (Incorrect): Cross-platform apps can use scanning libraries.
  • “The library only works when the phone is offline” (Incorrect): Network state isn't the cause.
  • “Expo Go lacks its native code; use a development build” is correct.

    Development builds include your app's native modules.

    • Also: a preview build for wider testing.

📖 Revise: Lesson 5: Reaching native features from a cross-platform app

Question ID sp-mobile-03-q9 · Report a mistake in this question
10. A developer edits the generated Android project by hand to add a permission, and the change disappears after the next prebuild. What's better?

Why each option is right or wrong

  • “Stop running prebuild, to keep the edits safe” (Incorrect): That blocks future updates.
  • “Keep a note of the edit and redo it after every build” (Incorrect): Manual steps get forgotten.
  • “Remove the permission, so nothing needs to be edited” (Incorrect): The feature may need it.
  • “Add the permission through app.json or a config plugin” is correct.

    Config is applied every time the project is generated.

    • Example: a module's plugin adds its permission text.

📖 Revise: Lesson 5: Reaching native features from a cross-platform app

Question ID sp-mobile-03-q10 · Report a mistake in this question

ProLearners Assist