Skip to content
Bugwise
Menu
Mobile Testing

Simulators and Emulators

What the iOS Simulator and Android Emulator can and can't do, how to set them up for testing, and how to decide when only a real device will do.

25 min beginner Mobile

The team behind a running app shipped version 3.0 with a shiny new live-run tracker. It passed every test case. The map followed the route perfectly, the distance was right, the summary screen looked great. Every single test had been run on the iOS Simulator using its built-in “City Run” location.

Launch day: hundreds of one-star reviews. “Stopped recording after 10 minutes.” On real iPhones, once the screen locked, the app lost its location updates, because the background location setup was wrong. The simulator never locked, never got hot, never lost GPS signal under a bridge. It just kept feeding perfect coordinates.

The simulator wasn’t the problem. Testing only on the simulator was.

Why it matters

Nobody can own every phone. There are dozens of iPhone and iPad models and thousands of Android devices (that’s fragmentationFragmentationThe huge variety of device models, screen sizes and OS versions an app must support.Open in glossary →). Virtual devices let you test many screen sizes and OS versions for free, in seconds. But they are imitations, and you need to know exactly where the imitation ends, so the right tests happen on a real deviceReal deviceA physical phone or tablet used for testing, as opposed to an emulator or simulator.Open in glossary →.

By the end of this lesson you’ll know:

Simulator vs emulator vs real device

People use the words loosely, but there is a real difference:

  • The iOS Simulator (part of Xcode, Mac only) runs your app compiled for the Mac. It imitates how iOS behaves, but it does not pretend to be iPhone hardware. That’s why it’s fast.
  • The Android Emulator (part of Android Studio, on Mac, Windows and Linux) runs a complete Android system image on a virtual phone: virtual CPU, sensors, modem, battery. It runs the same APK you ship.
  • A real device is a physical phone, with the real camera, GPS, radio, battery and the manufacturer’s own changes to the OS.

iOS Simulator

Imitates the software

  1. Your appcompiled for the Mac's processor
  2. iOS frameworkssimulator versions running on macOS
  3. macOSyour Mac's operating system
  4. Mac hardwareMac CPU, GPU, RAM, network

No phone hardware is emulated at all. Fast, but not a real iPhone.

Android Emulator

Imitates the device

  1. Your appthe same APK you ship
  2. Android OSa real system image (API level)
  3. Virtual hardwareemulated phone: sensors, modem, battery…
  4. Your computerhost CPU, GPU, RAM, network

A full virtual phone. Closer to reality, but still powered by your computer.

Real device

The real thing

  1. Your appinstalled build (TestFlight, APK…)
  2. iOS / Androidplus vendor changes (Samsung, Xiaomi…)
  3. Phone hardwarecamera, GPS, modem, Bluetooth, NFC, sensors
  4. Battery & radioreal power limits, real signal

What your users have. Slow to scale, but tells the truth.

What each is good for

iOS SimulatorAndroid EmulatorReal device
Cost and speedFree, starts in secondsFree, starts in under a minuteCosts money, has to be charged, updated, shared
Screen sizes and OS versionsEvery current iPhone/iPad, several iOS versionsAny size, foldables, tablets, many API levelsOnly the phones you own
Layout, text, translations, dark modeGreatGreatGreat
Fake location, battery, networkLocation yes; battery no; network via Mac toolsLocation, battery, cellular, signal: all built inOnly by really going places
Deep links, push payloads, permissionsYesYesYes
Real performanceNo (runs on the Mac’s CPU)No (uses your computer’s CPU/GPU)Yes
CameraNoneVirtual scene or webcamYes
Bluetooth, NFC, real cellularNoVery limitedYes
Phone calls and SMSNoSimulated incoming call / SMSYes
Face ID / fingerprintSimulated match / no matchSimulated fingerprint touchReal sensor
Battery drain, heat, memory pressureNoNoYes

Simulator, emulator or real device?

The honest answer is often “start virtual, finish real”. Pick a scenario to see why:

Simulator, emulator or real device?

Pick what you need to test and see where to test it.

Recommendation

Start on the simulator/emulator, sign off on a real device

You can check the content, the tap action and the permission prompt without a phone. But the real delivery path (APNs or FCM), lock-screen behavior, Focus / Do Not Disturb and battery optimization that kills background apps only show their true colors on real hardware.

iOS Simulator
Partly

Drag an .apns file onto the window or use xcrun simctl push. Real remote push works on Apple silicon / T2 Macs with macOS 13+.

Android Emulator
Good fit

Images with Google Play or Google APIs receive real FCM pushes.

Real device
Good fit

The only way to see real delivery timing, Focus modes and vendor battery savers.

Tester tip: Test the "app killed" case: swipe the app away, send a push, then tap it. Deep-link-from-push bugs love this path.

Setting up the iOS Simulator

The Simulator comes with Xcode, which is free on the Mac App Store. You don’t need to be a developer to use it.

  1. Install Xcode from the Mac App Store and open it once so it can install its extra components. iOS runtimes for older versions can be added later in Xcode › Settings › Components (called Platforms in older Xcode versions).
  2. Open the Simulator. In Xcode choose Xcode › Open Developer Tool › Simulator. You can also keep it in your Dock and open it like any app.
  3. Choose a device. Use File › Open Simulator and pick a model and iOS version, for example a small iPhone SE and a large Pro Max. To add more models, go to Window › Devices and Simulators in Xcode, open the Simulators tab and click +.
  4. Install the app. If a developer runs the app from Xcode, it installs automatically. If they give you a simulator build (a .app folder), drag it onto the Simulator window.
  5. Start testing, using the menus below to fake the world around the app.

The menus testers use most

MenuItemWhat it’s for
FeaturesFace ID › Enrolled, then Matching Face / Non-matching FaceTest biometric loginBiometric authenticationUnlocking a saved login with Face ID, Touch ID or a fingerprint.Open in glossary → success, failure and fallback
FeaturesLocation › Custom Location…, Apple, City Run, Freeway DriveTeleport to an address or play a moving route
FeaturesToggle Appearance (⇧⌘A)Switch between light and dark modeDark modeA display setting that uses light text on dark backgrounds.Open in glossary →
FeaturesToggle Increased ContrastCheck the high-contrast accessibility setting
DeviceRotate Left / Right (⌘← / ⌘→)Test orientationOrientationWhether the device is held upright (portrait) or sideways (landscape).Open in glossary → changes and lost state
DeviceShake (⌃⌘Z)Trigger “shake to report a bug” or “shake to undo”
DeviceHome (⇧⌘H), Lock (⌘L)Send the app to the background: an app lifecycleApp lifecycleThe states an app moves through: not running, foreground, background, suspended and terminated.Open in glossary → test
DeviceErase All Content and Settings…A clean phone, like a fresh install
I/OKeyboard › Toggle Software Keyboard (⌘K)Show the on-screen keyboard (see the warning below)
FileSave Screen (⌘S), Record Screen (⌘R)Screenshots and videos for your bug reportBug reportA clear written description of a bug so developers can reproduce and fix it.Open in glossary →
DebugSlow AnimationsCatch glitches that happen too fast to see

You can also drag files onto the Simulator window: photos and videos go to the Photos app (handy for testing an avatar upload), a .app installs, and an .apns file delivers a test push notificationPush notificationA message an app sends to the device that appears even when the app is closed.Open in glossary →.

Useful command-line tricks

Xcode includes simctl, which is great for repeatable setups. booted means “the simulator that is currently running”.

xcrun simctl list devices                                   # all simulators and their state
xcrun simctl install booted ShopApp.app                     # install a simulator build
xcrun simctl openurl booted "shopapp://product/42"          # open a deep link
xcrun simctl location booted set 52.5219,13.4132            # set GPS to Berlin
xcrun simctl push booted com.example.shopapp payload.apns   # send a test push
xcrun simctl ui booted appearance dark                      # dark mode
xcrun simctl ui booted content_size accessibility-extra-large  # very large text
xcrun simctl io booted screenshot bug.png                   # screenshot
xcrun simctl io booted recordVideo bug.mp4                  # record (Ctrl+C to stop)

Setting up the Android Emulator

The emulator comes with Android Studio, free for Mac, Windows and Linux.

  1. Install Android Studio from developer.android.com and finish the setup wizard. It downloads the SDK, the emulator and a first system image.
  2. Open the Device Manager. Use the Device Manager icon in the right-hand toolbar, or View › Tool Windows › Device Manager.
  3. Create a virtual device. Click + › Create Virtual Device, then pick a hardware profile: a phone such as Pixel or Medium Phone, a small phone, a tablet or a foldable.
  4. Choose a system image (API level). Each Android version has an API level (Android 15 is API 35, for example). Pick images marked Google Play if the app needs Google services like maps or push. On Apple silicon Macs choose arm64 images; on Intel/AMD PCs choose x86_64.
  5. Name it and adjust settings. You can set the startup orientation, RAM, storage and which camera to use (virtual scene or webcam). Click Finish.
  6. Start it with the ▶ button. By default it opens inside Android Studio’s Running Devices window; it can also run as a separate window.

Extended controls

Click the ⋮ / … (More) button on the emulator’s toolbar to open Extended controls. This is where you fake the outside world:

PanelWhat you can doExample test
LocationSet a single point, save places, play a route, import GPX/KMLDelivery zone ends at the city border
CellularNetwork type (e.g. LTE, 5G), signal strength, data and voice status, roamingApp on a weak signal or while roaming
BatteryCharge level, charger connection, battery health and statusLow-battery banner, Battery Saver behavior
PhoneCall the device from a number, send an SMSIncoming call in the middle of checkout; SMS one-time codes
Fingerprint“Touch” the sensor with an enrolled fingerFingerprint login, and a non-enrolled finger failing
CameraUse a virtual 3D room or your webcamCamera screen opens, permission prompts
Virtual sensorsRotate the device, change accelerometer, proximity, lightRotation, shake, auto-brightness logic
Record and PlaybackRecord the screen as a videoAttach a video to a bug report

Try it yourself. Change the location, battery, network and theme and watch the delivery app react:

Extended controls playground

A food delivery app running in an Android Emulator. Fake the world around it.

14:0280%

Deliver to

Alexanderplatz

Search dishes or restaurants

Order #4821 is on the way

Live tracking · courier 1.2 km away

Near you

  • CCurry CornerStreet food · 20–30 min4.6
  • SSpree SushiJapanese · 25–35 min4.8
  • DDöner LabTurkish · 15–25 min4.5
Location

Lat, long: 52.5219, 13.4132

Battery
Cellular / network
Display

Change a control on the right. Each one is a real setting in the emulator's Extended controls (the "…" button on its toolbar).

Installing builds

Useful toggles for testers

These settings find a surprising number of bugs. All of them work on virtual devices:

WhatiOS SimulatorAndroid Emulator
Dark modeFeatures › Toggle Appearance (⇧⌘A)Quick Settings tile, or Settings › Display (Display & touch on newer versions) › Dark theme
Large textSettings › Accessibility › Display & Text Size › Larger Text, or Xcode’s Environment Overrides while runningSettings › Display › Display size and text (font size)
Language and regionSettings › General › Language & Region, or the scheme’s App Language in XcodeSettings › System › Languages
RotationDevice › Rotate Left / RightRotate buttons on the emulator toolbar
LocationFeatures › LocationExtended controls › Location

Large textDynamic TypeThe phone setting that lets users make text bigger or smaller across apps.Open in glossary → and long languages (German, Finnish) are the fastest way to find truncationTruncationText that gets cut off because it doesn't fit its space.Open in glossary → bugs. Changing the localeLocaleRegional settings that control language and formats for dates, numbers and currency.Open in glossary → also changes date, number and currency formats, so check prices and dates while you’re at it.

What to test where

Safe to test on simulators and emulators

Needs a real device

Bugs that slip through when you only test virtually

#BugWhat you seeTypical severity
1Background tracking stopsRun or delivery tracking freezes when the screen locks on real phonesHigh
2Keyboard covers the buttonOn the Simulator the hardware keyboard hid the on-screen one; on a phone you can’t reach PayHigh
3Janky scrollingSmooth on the emulator, stuttering on a budget phone with 3 GB RAMMedium
4Camera screen crashes or stays blackThe scanner was never exercised because the Simulator has no cameraHigh
5Push never arrivesWorks with drag-and-drop payloads, but the real server uses the wrong APNs environmentHigh
6Killed by battery saverReminders or uploads silently stop on some Android brandsMedium
7State lost after background killReal phones with little memory kill the app; the cart or form is empty on returnMedium
8Breaks on network switchUpload fails when walking out of Wi-Fi onto mobile dataMedium

Practice: where would you test it?

You’re planning testing for a shopping and fitness app with three emulators, two simulators and two real phones. Sort each idea into the right place:

Sort the test ideas

Is a simulator/emulator enough, or do you need a real device?

0/10
  1. 01Check the checkout screen layout on iPhone SE, iPhone 16 Pro Max and iPad.

  2. 02Scan the QR code printed on a paper receipt to collect loyalty points.

  3. 03Check that the "Low battery: tracking paused" banner appears at 10% on Android.

  4. 04Check that scrolling the product feed stays smooth on a 3-year-old budget Android.

  5. 05Look for truncated labels in the German translation.

  6. 06Pair the fitness app with a heart-rate chest strap over Bluetooth.

  7. 07Check every screen in dark mode for unreadable text.

  8. 08Check that the link shopapp://product/42 opens the right product page.

  9. 09Track a 45-minute outdoor run with GPS and check battery drain.

  10. 10Receive a phone call on an iPhone while a payment is processing.

Cloud device farms

When you need a phone you don’t own (a specific Samsung model, an old iPhone, a tablet), a cloud device farm rents you real devices through the browser. You install the build, tap around remotely, and record videos and logs.

Common options are BrowserStack, Sauce Labs, LambdaTest, AWS Device Farm and Firebase Test Lab (the last two are aimed mostly at automated tests). They’re great for reproducing a bug a user reported on “Galaxy A14, Android 14”, but there is some lag, and you can’t hold the device, walk outside or plug in a Bluetooth gadget.

Example test cases

TC-ENV-001Checkout layout on the smallest supported iPhone

Preconditions

  • iOS Simulator with iPhone SE (3rd generation)
  • Software keyboard shown (⌘K)

Steps

  1. Add an item to the cart
  2. Open Checkout
  3. Tap the card number field
  4. Scroll to the bottom

Expected result

All fields and the Pay button are reachable with the keyboard open. Nothing is cut off or hidden behind the keyboard.

TC-ENV-002Restaurant list updates when location changes

Preconditions

  • Android Emulator, location permission granted

Steps

  1. Extended controls › Location: set Berlin, Alexanderplatz
  2. Open the app
  3. Set location to Munich, Marienplatz
  4. Pull to refresh

Expected result

The delivery address changes to Marienplatz and only Munich restaurants are listed.

TC-ENV-003Outside the delivery zone shows an empty state

Preconditions

  • Android Emulator

Steps

  1. Set a location outside the delivery area
  2. Open the app

Expected result

A friendly "We don't deliver here yet" message is shown, with an option to change the address. No endless spinner.

TC-ENV-004Low battery banner at 10%

Preconditions

  • Android Emulator
  • Active order with live tracking

Steps

  1. Extended controls › Battery: Charger connection None
  2. Set charge level to 10%

Expected result

The app shows that live tracking updates less often. Order details remain usable.

TC-ENV-005Face ID failure falls back to password

Preconditions

  • iOS Simulator
  • Features › Face ID › Enrolled is checked
  • Face ID login enabled in the app

Steps

  1. Lock and reopen the app
  2. When Face ID is requested, choose Features › Face ID › Non-matching Face
  3. Repeat

Expected result

The app shows a clear error and offers login with password. It never logs the user in.

TC-ENV-006Run tracking continues with the screen locked

Preconditions

  • Real iPhone and real Android phone
  • Location permission: Always / Allow all the time

Steps

  1. Start a run outdoors
  2. Lock the phone
  3. Walk for 15 minutes
  4. Unlock and stop the run

Expected result

The route has no gaps and the distance matches the walk (within a few percent).

Tip: click a test case to expand it.

Checklist

Simulator and emulator testing checklist

0 of 11 checked

Check your understanding

Quick quiz

0/5 answered · 0 correct

  1. 1.What is the main technical difference between the iOS Simulator and the Android Emulator?

  2. 2.You must test how a budget Android phone handles a long product feed. Where should you test?

  3. 3.Which test can the Android Emulator do but the iOS Simulator cannot?

  4. 4.A developer sends you a TestFlight link. Can you test that build on the iOS Simulator?

  5. 5.Forms look perfect on the Simulator, but users say the keyboard hides the Pay button. What probably went wrong in testing?

Key takeaways

  • The iOS Simulator imitates iOS on your Mac; the Android Emulator emulates a full virtual phone. Neither is a real device.
  • Use virtual devices for layout, flows, settings and fake-able conditions: screen sizes, OS versions, dark mode, large text, languages, location, battery, network.
  • Use real devices for hardware, performance, the physical world, real interruptions and the final sign-off.
  • Know the menus: Features and Device on the Simulator, Extended controls on the Emulator.
  • Fill the gaps with a small real-device lab and a cloud device farm.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.