Skip to content

By Taha Yasin Kucuk · August 10, 2026 · Updated October 7, 2026

ZeroTier for iOS developers: a practical guide

Short answer: install the free ZeroTier app from the App Store, join your network ID, and approve the device — either on ZeroTier Central if you use the cloud service, or on your self-hosted controller's dashboard. Once approved, the iPhone gets a fixed IP on that virtual network, reachable from any physical Wi‑Fi. Unlike Tailscale and Netbird, ZeroTier has no CLI command that lists a peer's virtual IP, so you'll copy it from the dashboard once and use it directly.

This guide covers setup on iOS, why ZeroTier's device discovery works differently from Tailscale and Netbird, the settings worth changing, and how iOS developers use it to keep debugging a device from Xcode after it leaves the office or home Wi‑Fi.

This is about installing the official ZeroTier iOS app so Xcode can reach a physical test iPhone — not about embedding ZeroTier's SDK (libzt) inside your own app.

What it is, briefly

ZeroTier builds virtual Ethernet networks: you join a network ID on each device, an admin (or you, on your own network) approves the member, and each approved device gets a fixed IP on that virtual network — reachable from every other member, regardless of physical location. Networks are either hosted on ZeroTier Central (the cloud service) or run against your own self-hosted controller.

Set up ZeroTier on your iPhone

  1. Install the app. Search for ZeroTier One in the App Store. It's free.
  2. Join your network. Open the app, tap +, and enter your network ID (the 16-character hex string from ZeroTier Central or your controller).
  3. Allow the VPN configuration. iOS asks whether ZeroTier may add a VPN configuration. Tap Allow and confirm with Face ID, Touch ID, or your passcode.
  4. Turn it on. The network shows as Requesting Configuration until it's approved (next section).

Approve the device and find its IP

New members don't get network access until someone approves them — this is the deliberate trade-off for not having a peer-listing CLI command.

  1. Open ZeroTier Central (or your self-hosted controller's member page) and go to your network's Members tab.
  2. Find the iPhone by its ZeroTier node ID (shown in the iOS app under the network) and check the Auth box to authorize it.
  3. Note the IP address ZeroTier Central assigned it — it appears in the same row once authorized.
  4. Optional but recommended: under IP Assignments for that member, set a specific IP within your subnet instead of leaving it on the automatic pool. A pasted IP that changes later is the most common way a ZeroTier setup in Nuticast silently breaks.

Set up ZeroTier on your Mac

Install ZeroTier on the Mac from zerotier.com or Homebrew (brew install zerotier-one), then join the same network from Terminal:

zerotier-cli join <network-id>

Authorize the Mac the same way you authorized the iPhone, in the Members tab. To confirm the Mac is on the network and see its own assigned IP:

zerotier-cli listnetworks

zerotier-cli info confirms the daemon is running and online. zerotier-cli listpeers will not show the iPhone's virtual IP — see the next section for why.

Why device discovery is different

Tailscale and Netbird both ship a CLI that can list every peer's name and IP in one command (tailscale status --json, netbird status --json). ZeroTier's CLI (zerotier-cli) can't do that — zerotier-cli listpeers only reports the physical transport address of each peer, never its virtual-network IP. The actual member list with names and IPs lives behind whichever web UI manages the network: ZeroTier Central if you use the cloud service, or your self-hosted controller's own dashboard if you run one — and those two don't share a common API shape.

That's why Nuticast doesn't try to auto-detect ZeroTier devices the way it does for Tailscale and Netbird. Instead, it detects that zerotier-cli is installed (so the ZeroTier tile shows up at all) and then asks you to paste the iPhone's ZeroTier IP directly — the same fallback it uses for any mesh VPN it doesn't have a dedicated adapter for.

Settings worth changing

  • Assign a fixed IP to the iPhone. Covered above — do this once so the IP you paste into Nuticast doesn't drift.
  • Keep the network Private, not Public. A Private network requires the manual authorization step above; a Public network auto-authorizes any device that joins with the network ID. Private is the safer default for a network that reaches your dev Mac.
  • Leave "Allow Managed" on (the default) for the iPhone member. Turning it off stops ZeroTier from assigning the phone an IP at all — only worth touching if you're troubleshooting routing, not for normal use.

Keeping ZeroTier connected on iOS

Like any iOS VPN, ZeroTier runs as a system VPN configuration rather than a background app, which iOS keeps alive more reliably than an ordinary app. If the device ever seems unreachable:

  • Open the ZeroTier app and confirm the network still shows OK, not Requesting Configuration or Access Denied.
  • Check that another VPN didn't take over — iOS runs only one VPN at a time.
  • Low Power Mode and a weak Wi‑Fi signal can delay reconnection after the device wakes; opening the app usually brings it back immediately.

Using ZeroTier to debug from Xcode on a different Wi‑Fi

Xcode's wireless debugging only finds a device on the same local network as the Mac, because it uses Bonjour discovery, which doesn't cross networks. ZeroTier makes the phone reachable from anywhere, but Xcode still won't discover it. The details are in why Xcode wireless debugging breaks when your iPhone leaves Wi‑Fi.

Nuticast fills that gap. Since it can't read ZeroTier's peer list the way it does for Tailscale and Netbird, you paste the iPhone's ZeroTier IP once when adding the device — everything after that (bridging, auto-restart, status) works the same as it does for the other two providers.

What you need:

  1. ZeroTier on the Mac and the iPhone, both members of the same network and authorized.
  2. The iPhone's ZeroTier IP from the Members tab (see above).
  3. The iPhone already paired with Xcode for wireless debugging. That still happens once next to the Mac (over Wi‑Fi on iOS 27+, over USB before); ZeroTier doesn't replace it.
  4. The iPhone on Wi‑Fi. Cellular doesn't work.

When you add the device in Nuticast, pick ZeroTier and paste that IP instead of picking it from a device list. The full flow is in how it works, and every alternative is compared in how to debug an iPhone in Xcode when it's on a different network.

A note on trust

Whether you use ZeroTier Central or a self-hosted controller, the network is one you approve membership on yourself — Nuticast just relays traffic over whichever ZeroTier network you've already set up, the same as it does for Tailscale or Netbird.

Common questions

Is ZeroTier free on iPhone? Yes. The iOS app is free, and ZeroTier's free Personal plan currently covers up to 10 devices on one network — check ZeroTier's pricing page for the current limits, since they've changed before.

Why doesn't Nuticast auto-detect my ZeroTier device like it does for Tailscale? ZeroTier's CLI doesn't expose peers' virtual IPs — see "Why device discovery is different" above. Pasting the IP once is the workaround.

Does the iPhone's ZeroTier IP ever change? Not if you set a static IP Assignment for it in the Members tab. Left on automatic, it can change if the member is removed and rejoined.

Can I self-host instead of using ZeroTier Central? Yes — ZeroTier supports self-hosted controllers, and the setup steps here are the same; only where you approve members and read the IP changes.

Does it work over cellular? ZeroTier itself does. Debugging from Xcode through Nuticast doesn't — the iPhone has to be on Wi‑Fi.

Prefer a different mesh VPN? Nuticast also supports Tailscale and Netbird.