Expo’s official documentation separates the iOS Simulator workflow from cloud builds, and Apple lists macOS as the host environment for Xcode and its simulator (Expo iOS Simulator guide; Apple Xcode system requirements). That creates two clear routes: use Windows for coding, Expo Go, a real iPhone, and cloud builds; use macOS when your course requires the iOS Simulator, Xcode logs, or local native debugging.
Symptom: You can write Expo code on Windows, but a simulator or native error stops you.
Fastest fix: Stay on Windows for basic lessons, then use a remote Mac only when the assignment reaches a Mac-specific step. Do not buy a Mac before you know that your course requires one.
Who should read this guide?
This guide is for students with only a Windows computer who want to learn cross-platform app development with Expo.
It also fits learners who can already preview an app with Expo Go but are blocked by native dependencies, development builds, simulator screenshots, or iOS error messages.
What computer do you need for Expo iOS development?
For most beginner Expo lessons, you do not need to start with a Mac. A Windows laptop can handle code editing, JavaScript or TypeScript practice, project files, Android testing, and many basic previews through Expo Go.
The important distinction is between four different jobs:
- Writing code: Windows is usually enough.
- Previewing supported features: Windows plus Expo Go and a compatible iPhone can be enough.
- Building an iOS app: Windows can start a cloud build through Expo’s build services.
- Running the iOS Simulator or debugging native iOS code locally: You need macOS with Xcode.
Think of the project as a school science assignment. Windows is your desk where you write the report. Expo Go is a standard classroom experiment kit. A real iPhone is the test device. Xcode and the iOS Simulator are a specialist laboratory. You can complete the report without owning the laboratory, but some experiments cannot be performed with the standard kit.
Expo’s project creation documentation supports starting an Expo project from a development computer such as Windows. That does not mean every iOS task is available on Windows. It means the first part of the learning path is not blocked by your operating system.
The first decision
Choose your current Windows computer if your immediate goal is to:
- learn layouts, navigation, forms, and basic state;
- build screens for a class project;
- preview supported features with Expo Go;
- test on Android;
- send an iOS build to a cloud service rather than building locally.
Plan access to a Mac if your assignment specifically requests:
- an iOS Simulator screenshot;
- testing across simulated iPhone sizes;
- Xcode console output;
- native project changes;
- a library that is not included in Expo Go;
- local diagnosis of an iOS-only crash.
This is a decision about the next assignment, not a verdict on which operating system is universally better.
Windows learning route
A beginner can make useful progress on Windows, but the preview method matters.
Expo Go and real-device preview
Expo Go is a ready-made app for opening compatible Expo projects. You edit the project on Windows, start the development server, and open the project on a phone. A QR code commonly provides the handoff between the computer and the device.
This route works well for simple screens and interactions that Expo Go already supports. It lets you see whether a button changes state, whether a list renders, or whether a navigation flow behaves as expected.
Expo Go is not a complete replacement for an iOS development environment. It contains a fixed set of native capabilities. If your project requests a native module outside that set, the JavaScript code may look correct while the preview fails because the installed app does not contain the required native code. Expo explains this boundary in its guide to third-party library compatibility.
Network problems are not always code problems
A QR-code preview can fail for reasons unrelated to your app:
- the Windows computer and iPhone are on different networks;
- a school network blocks device-to-device traffic;
- a firewall prevents the development server from being reached;
- the connection method is unsuitable for a restricted network;
- a public network cannot route the local development address back to your computer.
First try a trusted private network. If the phone still cannot connect, change the connection method offered by the Expo tooling and check the firewall. Do not immediately rewrite the app.
A useful test is simple: if a brand-new sample project cannot open on the phone, your first problem is probably connectivity or device setup. If the sample opens but your project fails after adding a library, investigate the library and its native requirements.
No iPhone available
Without an iPhone, you can still study the code and use Android for many interface lessons. You can also create an iOS build through a cloud workflow. However, you cannot use an Android phone to prove that an iOS-only behavior, permission prompt, font rendering detail, or Apple-specific screen behaves correctly.
For a course that only checks source code and a general demonstration, Windows plus Android may be acceptable. For a course that grades an iOS recording or requires iOS screenshots, arrange access to an iPhone or a Mac-based simulator before the deadline.
The route comparison
Use this table before buying hardware. The “best fit” column is about a student’s current task, not long-term ownership.
| Route | Code on Windows | iOS preview | iOS Simulator | Native iOS debugging | Best fit |
|---|---|---|---|---|---|
| Windows + Expo Go | Yes | Supported features on a real iPhone | No | No | First Expo lessons and basic UI |
| Windows + Android device | Yes | No proof of iOS behavior | No | No | Cross-platform coding practice |
| Windows + cloud build | Yes | Installable build, subject to signing and project requirements | No | Limited | Build practice and remote iOS packaging |
| Mac with Xcode | Yes | Yes | Yes | Yes | Simulator work and native troubleshooting |
| Windows + remote Mac | Yes, with remote access | Yes, if a device or simulator is available | Yes | Yes, subject to connection quality | Short courses and Mac-specific assignments |
The table shows why “Can Windows run Expo?” has an incomplete answer. Windows can run the coding workflow. It cannot provide every Apple development tool locally.
iOS Simulator requirements
The iOS Simulator is an Apple device simulation tool integrated with Xcode. It is useful when you need to test without a physical iPhone, capture a consistent screen for coursework, compare simulated device sizes, or inspect iOS behavior during development.
Expo’s official simulator instructions describe the iOS Simulator workflow on macOS. Apple’s documentation also covers running an app on simulated and physical devices. These sources establish the practical boundary: installing an iOS Simulator on Windows is not a supported local route.
Three responses to a simulator requirement
Use a real iPhone.
This is often the simplest option for testing touch behavior and physical permissions. It does not replace simulator screenshots or simulated device profiles when those are part of the assignment.
Use a remote Mac.
A remote Mac gives you access to macOS, Xcode, and the simulator without requiring you to purchase a computer for a short course. Your Windows machine remains the main keyboard and screen, while the remote Mac performs the Mac-specific work.
Complete only the non-iOS portion temporarily.
This is reasonable only when the course permits it. Mark the simulator-dependent task clearly and return to it before submission. Do not assume a later cloud build will generate the screenshots or logs your instructor requested.
Important: A successful Expo Go preview proves that a supported feature works inside Expo Go. It does not prove that the project works with every native module, on every iOS device profile, or inside a custom development build.
Native libraries and development builds
Many beginners first meet this problem after adding a camera, Bluetooth, health, payment, background task, or other native library. The screen may work in a basic Expo Go project and then fail after the library is installed.
The reason is easier to understand with two experiment boxes. Expo Go is a standard box with preinstalled equipment. A development build is a custom box assembled for your project. If your library needs equipment that is not inside the standard box, you need the custom one.
Expo’s development build FAQ explains when Expo Go is not sufficient. Its development build introduction covers the custom app approach. Expo also documents how customizing native code changes the project boundary.
When Xcode becomes necessary
Your project may need Xcode when you must:
- inspect native compiler output;
- change an iOS project setting;
- modify native files;
- test a native module that needs a custom build;
- attach a debugger to an iOS process;
- reproduce an iOS-only failure locally;
- run the project in the iOS Simulator.
A cloud development build can produce an app from a Windows-initiated workflow. That is valuable, but it does not give Windows the local Xcode tools. If the build fails because of a native configuration issue, you may receive a build log without being able to reproduce the same failure on your own computer.
This is why a cloud build can be successful while debugging is still incomplete. Packaging and diagnosis are different jobs.
Cloud builds from Windows
Expo’s build documentation describes cloud-based application builds. The practical benefit for a Windows student is that you can prepare project files and request an iOS build without first installing Xcode locally.
A cloud build is useful for:
- checking whether the project can be packaged for iOS;
- producing a build for permitted testing;
- learning the basic submission workflow;
- separating JavaScript work from local Mac ownership;
- sharing a build with a teacher or teammate when the project setup allows it.
A build result is not the same as a debugging environment. If the app launches but a native feature fails only on iOS, you still need an iOS device, simulator, or Mac-based toolchain to investigate. If your class requires an Xcode screenshot, a cloud build does not satisfy that requirement by itself.
Expo also documents the iOS submission process. Treat submission as a separate stage from learning. It can help you deliver an app, but it does not remove the need to follow Apple’s account, signing, and review requirements. Do not share developer credentials or attempt to bypass school device controls.
A five-step route for beginners
Step one: identify the grading requirement
Read the assignment before selecting hardware. Write down whether it asks for source code, a video, an iOS screenshot, a physical-device test, a development build, native logs, or store submission.
Each item points to a different environment. “Show the app running” is not precise enough to choose a computer.
Step two: start with Windows
Create the Expo project and complete the basic screens on your existing computer. Keep the first milestone narrow: navigation, layout, text input, lists, and the data flow required by the lesson.
This avoids paying for Mac access while you are still learning general application concepts.
Step three: test the smallest preview
Open the project with Expo Go if its features fit the standard runtime. If you have an iPhone, test there. If not, use Android for general interaction and record which iOS-specific checks remain outstanding.
Do not describe the project as “iOS tested” when you have only used Android or Expo Go without an iOS device.
Step four: classify the blocker
Use this quick diagnosis:
- QR code does not open: check network access and firewall settings.
- A standard screen works: continue with Windows.
- A library fails in Expo Go: check whether it requires a development build.
- A simulator is required: arrange macOS access.
- A native build error needs local inspection: use Xcode on a Mac.
- Only packaging is required: try the documented cloud build route.
Step five: rent or borrow Mac access only for the blocked stage
If your course reaches the simulator, native debugging, or a Mac-only screenshot, schedule access to a remote Mac around that task. Save the project in a version-controlled repository or another permitted storage location so that your Windows and Mac sessions use the same source.
Before starting, confirm that you can connect, open a terminal, access the project, launch the simulator, and save changes. A remote setup should be tested before the submission day, not for the first time during a graded demonstration.
Step six: verify the result on the required target
Run the exact acceptance test from the assignment. Check the requested simulator profile or physical device, capture the required evidence, and record any limitation. A green cloud build is useful evidence, but it does not replace a required simulator run or native log.
Choosing between Windows, a remote Mac, and ownership
Stay with Windows when your lessons focus on general programming, Expo layouts, JavaScript, navigation, and supported Expo Go features. Its main advantages are that you already own it, you avoid a second computer, and you can learn the shared part of cross-platform development immediately.
Its limitations are equally clear:
- no local iOS Simulator;
- no local Xcode console or native project editing;
- real-device access may be limited;
- school or public networks can disrupt phone previews;
- native dependency problems may require another environment.
Choose a remote Mac when the Mac-specific task is occasional or tied to a course milestone. KVMNODE provides remote Mac access through remote connection methods such as VNC, SSH, or a web console, depending on the selected environment. Review the KVMNODE Mac access options and confirm the connection method before committing to a study workflow.
A fixed Mac becomes more reasonable when you repeatedly maintain native iOS code, need local hardware access, or expect regular Xcode work over a long period. It is less sensible when you are still deciding whether mobile development suits you or when the course uses Expo only for basic cross-platform lessons.
For a short assignment, remote access avoids several ownership costs: an upfront hardware purchase, carrying a second computer, keeping macOS available when you are not studying, and troubleshooting a machine that may sit unused. It also introduces real trade-offs: remote display delay, dependence on your internet connection, file-transfer planning, and the need to verify that the project persists between sessions.
The decision in one minute
- Only learning Expo basics? Keep Windows and use Expo Go or Android.
- Need to demonstrate iOS behavior? Add a real iPhone or arrange remote Mac access.
- Need the iOS Simulator? Use macOS through a physical or remote Mac.
- Need native logs or native code changes? Use Xcode on macOS.
- Need only an iOS package from Windows? Try the documented cloud build route.
- Need repeated native development for a long period? Compare a fixed Mac with recurring remote access.
The best beginner computer is the one that completes the next graded task without paying for capabilities you do not yet need.
If your current Windows setup is blocked by simulator access, Xcode logs, or a native module, the alternative is not automatically a costly permanent purchase. A Windows laptop still has real disadvantages for this stage: it cannot run the supported iOS Simulator locally, it cannot provide local Xcode diagnostics, and cloud packaging cannot reproduce every native failure. Renting a Mac through KVMNODE can give you a cleaner temporary learning environment for the course period, especially when you need VNC, SSH, or web-console access to continue from your existing computer. Check the KVMNODE remote Mac route, validate the connection and project-saving steps first, and use it only when your assignment’s requirements justify the extra environment.