Maycon Santos dd44b168fa Fix DNS resolution failure when toggling exit nodes (#82)
- Route all DNS through the tunnel on iOS by always setting matchDomains=[""], eliminating the drift between Go's DNS server (which has a root zone fallback handler) and iOS 
  tunnel settings that only matched specific domains
  - Handle empty route notifications from Go — when the exit node was the only route and was deselected, the notifier sent an empty string that Swift silently dropped, leaving 
  stale 0.0.0.0/0 in the tunnel and black-holing all traffic                                                                                                                    
  - Fix route card status indicator showing green after deselecting a route by checking route.selected before evaluating peer connection status
2026-04-08 08:44:18 +02:00
2024-02-28 19:22:16 +01:00
2026-03-06 08:58:24 +01:00
2026-02-18 11:21:59 +01:00
2024-02-28 19:22:16 +01:00
2024-02-28 19:22:16 +01:00
2024-02-28 19:22:16 +01:00


Start using NetBird at netbird.io
See Documentation
Join our Slack channel


NetBird iOS & tvOS Client

The NetBird iOS/tvOS client allows connections from mobile devices running iOS 14.0+ and Apple TV running tvOS 17.0+ to private resources in the NetBird network.

Install

You can download and install the app from the App Store:

Download on the App Store

Screenshots

mainscreen peer-overview menu

Code structure

The code is divided into 4 parts:

  • The main netbird Go code from the NetBird repo which is compiled into an xcframework. This contains most of the client logic.
  • The network extension /NetbirdNetworkExtension that is running in the background where the compiled Go code is executed.
  • The UI and app code under /NetBird
  • The /NetbirdKit/NetworkExtensionAdapter that controls the extension and builds the link between UI and extension

Requirements

  • iOS 14.0+ / tvOS 17.0+
  • Xcode 16.1+
  • Go 1.24+
  • gomobile-netbird (NetBird's fork with tvOS support)

gomobile-netbird

This project requires gomobile-netbird, NetBird's fork of gomobile that adds tvOS support. See: https://github.com/netbirdio/gomobile-tvos-fork

To install:

go install github.com/netbirdio/gomobile-tvos-fork/cmd/gomobile-netbird@latest
gomobile-netbird init

Run locally

To build the app, this repository and the main netbird repository are needed.

git clone https://github.com/netbirdio/netbird.git
git clone https://github.com/netbirdio/ios-client.git
cd ios-client

Build the XCFramework from the main netbird repo using the build script:

./build-go-lib.sh ../netbird

Or manually with gomobile-netbird:

cd netbird
gomobile-netbird bind -target=ios,iossimulator,tvos,tvossimulator -bundleid=io.netbird.framework -o ../ios-client/NetBirdSDK.xcframework ./client/ios/NetBirdSDK

This builds a single universal XCFramework that supports iOS, iOS Simulator, tvOS, and tvOS Simulator.

Open the Xcode project, and we are ready to go.

Running on iOS Device

Note: The app cannot run in the iOS simulator. To test the app, a physical device needs to be connected to Xcode via cable and set as the run destination.

Running on Apple TV

Note: The app cannot run in the tvOS simulator. To test the app, a physical device running tvOS 17.0 or later needs to be paired with Xcode.

Firebase Configuration (Optional)

The app supports Firebase for analytics and crash reporting. To enable it, add your GoogleService-Info.plist file to the project root. The app will work without Firebase configuration.

Other project repositories

NetBird project is composed of multiple repositories:

Languages
Swift 97%
C 1.8%
Objective-C 0.7%
Shell 0.5%