How wireguard/wireguard-apple works
WireGuard for iOS and macOS manages WireGuard tunnel configurations and VPN operation. Users import or scan a configuration, review or edit it, save it as a managed tunnel, then activate it and inspect status or runtime details. The manager coordinates tunnel lifecycle with the system Network Extension; WireGuardKit configures the packet tunnel and the Go-backed engine. The tree documents ZIP import/export, on-demand rules, and logs as additional capabilities. Sampled excerpts are partial, so uncertain internal wiring is omitted.
Main entry points: TunnelsManager.swift Tunnel manager · ViewController/TunnelsListTableViewController.swift iOS screens · ViewController/TunnelsListTableViewController.swift macOS screens · TunnelEditViewController.swift macOS editor
Components 24
Client applications
- iOS screens
Sources/WireGuardApp/UI/iOS/ViewController/TunnelsListTableViewController.swift - macOS screens
Sources/WireGuardApp/UI/macOS/ViewController/TunnelsListTableViewController.swift - iOS editor
Sources/WireGuardApp/UI/iOS/ViewController/TunnelEditTableViewController.swift - macOS editor
Sources/WireGuardApp/UI/macOS/ViewController/TunnelEditViewController.swift - iOS details
Sources/WireGuardApp/UI/iOS/ViewController/TunnelDetailTableViewController.swift - macOS details
Sources/WireGuardApp/UI/macOS/ViewController/TunnelDetailTableViewController.swift - Log viewer
Sources/WireGuardApp/UI/LogViewHelper.swift
Tunnel management
- Tunnel importer
Sources/WireGuardApp/UI/TunnelImporter.swift - ZIP import
Sources/WireGuardApp/ZipArchive/ZipImporter.swift - ZIP export
Sources/WireGuardApp/ZipArchive/ZipExporter.swift - Tunnel model
Sources/WireGuardApp/UI/TunnelViewModel.swift - Tunnel manager
Sources/WireGuardApp/Tunnel/TunnelsManager.swift - On-demand rules
Sources/WireGuardApp/UI/ActivateOnDemandViewModel.swift
VPN engine
- Tunnel configuration
Sources/WireGuardKit/TunnelConfiguration.swift - WireGuard adapter
Sources/WireGuardKit/WireGuardAdapter.swift - Packet settings
Sources/WireGuardKit/PacketTunnelSettingsGenerator.swift - Packet tunnel provider
Sources/WireGuardNetworkExtension/PacketTunnelProvider.swift - WireGuard Go
Sources/WireGuardKitGo/api-apple.go - Key crypto
Sources/WireGuardKitC/key.c
Shared services
- Keychain
Sources/Shared/Keychain.swift - Tunnel logs
Sources/Shared/Logging/Logger.swift - App group files
Sources/Shared/FileManager+Extension.swift
Other components
- User
- Network Extension
Connections 30
- User → iOS screens: uses
- User → macOS screens: uses
- iOS screens → Tunnel importer: imports configs
- iOS screens → ZIP import: selects archive
- iOS screens → iOS editor: edits tunnel
- macOS screens → macOS editor: edits tunnel
- iOS editor → Tunnel model: updates fields
- macOS editor → Tunnel configuration: parses config
- iOS editor → Tunnel manager: saves tunnel
- macOS editor → Tunnel manager: saves tunnel
- Tunnel importer → Tunnel manager: adds tunnel
- ZIP import → Tunnel importer: provides configs
- iOS screens → Tunnel manager: activates tunnel
- macOS screens → Tunnel manager: manages tunnels
- iOS details → Tunnel manager: controls tunnel
- macOS details → Tunnel manager: controls tunnel
- iOS details → On-demand rules: edits rules
- macOS editor → On-demand rules: sets rules
- Tunnel manager → Network Extension: starts provider
- Network Extension → Packet tunnel provider: invokes
- Packet tunnel provider → WireGuard adapter: configures engine
- WireGuard adapter → Packet settings: generates settings
- WireGuard adapter → WireGuard Go: controls tunnel
- WireGuard adapter → Key crypto: derives keys
- Packet tunnel provider → Network Extension: sets packet routes
- Tunnel manager → Keychain: stores credentials
- Packet tunnel provider → Tunnel logs: records events
- Log viewer → Tunnel logs: reads logs
- Tunnel logs → App group files: persists log file
- macOS screens → ZIP export: exports configs