dánwòdánwò

Platforms

iOS setup

Get a Mac ready to test a React Native or Expo app on an iOS Simulator with danwo.

danwo runs the same tests, invariants and fault matrix against a React Native or Expo app on an iOS Simulator. The app's calls, and the checkout page it opens, go through danwo's proxy, so Stripe and the rest are emulated there too. This page gets the Mac ready.

What you need

NeedWhy
a Macthe iOS Simulator only runs on macOS
Xcodeit brings the Simulator, simctl and the compiler for your app
an iOS runtimethe iOS version the simulator runs; Xcode installs one
CocoaPodsonly to build an Expo app (danwo build-ios)

No simulator needs to exist: danwo creates its own the first time, an iPhone on the newest iOS you have, and keeps it for later runs.

Get Xcode ready

Install Xcode

Install it from the App Store and open it once, so it finishes installing its components.

Point the tools at it

The command-line tools alone have no Simulator. Select the full Xcode:

sudo xcode-select -s /Applications/Xcode.app

Add an iOS runtime

In Xcode, open Settings → Components and install an iOS Simulator runtime if none is listed.

Check the Mac

npx @danwo/cli device doctor --platform ios
ok    Xcode: Xcode 26.6, Build version 17F113 (/Applications/Xcode.app/Contents/Developer)
ok    simctl: xcrun simctl
ok    iOS runtimes: iOS 18.6, iOS 26.5
ok    simulators: danwo creates "danwo iPhone" (iPhone 17 Pro, iOS 26.5) on first use
ok    CocoaPods: 1.17.0

Without --platform, the doctor checks Android and iOS, and passes when either is ready.

How the network is bound

A simulator shares the Mac's network, but keeps its own proxy setting in memory. danwo sets that setting for its simulator only, and trusts the run's certificate in the simulator's keychain. The Mac's own network settings are never touched.

WhatReaches the proxy
the app's own callsyes: fetch, URLSession and libraries built on them
a Safari viewyes, the checkout page WebBrowser.openBrowserAsync opens
a sign-in sessionyes, ASWebAuthenticationSession (openAuthSessionAsync)
other simulators, the Macno: they keep their own settings

Apps that pin their TLS certificates ignore danwo's certificate, so their calls can't be emulated. Turn pinning off in the build you test.

What works on iOS today

WorksNot yet
locators, expect, screenshots, the agentgetByRole("heading"): iOS reports no heading role
Safari views and sign-in sessionsphysical iPhones, and keys other than Enter
the fault matrix, on one simulator or severalreading mail from a test, saved sessions
films of each attempt, the app's logmoving the device's own clock

Next

On this page

Run it on every pull request

A GitHub check and one comment per pull request, with the flight records attached.

Set up CI