Move the Lottie button into an overlay on the background image so
both share the same coordinate space, matching Android's approach
of placing btn_connect as a sibling of bg_mask inside bg_mask_container.
* fix layout on ipad
* Create multi profiles
* multi-profile server config, connection cache, and auth fixes
Split ProfilesView into ProfilesListView, AddProfileSheet, ProfileBadge, AddProfileViewModel
- Add server URL + setup key fields to Add Profile screen
- Store per-profile connection data (ip/fqdn/managementURL) as typed model in ProfileConnectionCache
- Show cached connection info immediately on profile switch; empty if no prior data
- Fix profile deletion persistence via tombstone in profiles.json
- Fix logout to remove both netbird.cfg and state.json (cfg holds auth tokens)
- Preserve managementURL in UI after logout via cache fallback
- Guard polling from overwriting new profile's data during disconnect/reconnect cycle
* fix(multi-profile): reinitialize VPN adapter on profile switch and show current server URL
* Update project.pbxproj
* fix(multi-profile): prevent default server overwrite on logout/re-login
* Update PacketTunnelProvider.swift
* fix(multi-profile): address code review findings
- Normalize only scheme and host to lowercase when saving management
server URL; previously the full URL was lowercased which could corrupt
case-sensitive paths on self-hosted servers
- Move switchConnectionInfo(to:) inside the do-block so the connection
UI is only updated after a successful profile switch
- Add ProfileConnectionCache.remove(for:) and clearConnectionData(for:)
to prevent stale ip/fqdn/managementURL from persisting after a profile
is deleted or logged out; call them from removeProfile and logoutProfile
- Use ASWebAuthenticationSession.Callback.customScheme on iOS 17.4+,
falling back to the deprecated callbackURLScheme initializer on older
versions; add a comment explaining why "http" is used and that a
proper fix requires custom-scheme support in the SDK
- Guard presentationAnchor against a missing key window with
assertionFailure in debug builds instead of silently returning an
empty UIWindow
* Add Home Screen widget with VPN toggle and refactor app activation logic
- Add NetBirdWidgetExtension target with small/medium widget sizes
- Support direct connect/disconnect from widget via interactive buttons (iOS 17+)
- Detect missing VPN config or login-required state and open app via deep link
- Poll for stable VPN state after toggle to prevent loader getting stuck
- Add widget shared state keys to GlobalConstants and sync status from MainViewModel
- Fix false "authentication required" alert on app resume after widget disconnect
- Deduplicate app activation logic into shared startActivation/stopActivation
- Extract polling helpers: updateDetailsIfChanged, updatePeersIfChanged, applyExtensionStatus
* fix ui state for airplaine mode
* fix slide bar
* Keep VPN tunnel alive during network unavailability
- Add isNetworkUnavailable flag to NetBirdAdapter to track network state
- Modify ConnectionListener to stay in 'connecting' state when network
is unavailable instead of transitioning to 'disconnected'
- Update PacketTunnelProvider to set network unavailable flag and
trigger automatic reconnect when network returns
- Fix CustomLottieView to show grey 'Disconnected' state immediately
when network is lost, without closing the VPN tunnel
- Ensure UI shows correct state after app foreground/background cycle
This allows the VPN tunnel to survive temporary network outages
(e.g. airplane mode) and automatically reconnect when network returns.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix UI state after app foreground/background cycle
Show correct connected/disconnected state immediately when app returns
from background, without replaying animations. Use extensionStatus
(iOS VPN state) as the source of truth for UI state.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* netbird credential
* Update MainView.swift
* Separate button by state
* Add gogoleServiceInfo plist reference
* Remove dead code in animation state machine and fix copy-to-clipboard UX - Remove unreachable shouldForceReset block in CustomLottieView (already handled by earlier return) - Guard against copying empty fqdn/ip strings when disconnected - Use consistent .smooth animation for both fqdn and ip copy feedback
- Remove unreachable shouldForceReset block in CustomLottieView (already handled by earlier return)
- Guard against copying empty fqdn/ip strings when disconnected
- Use consistent .smooth animation for both fqdn and ip copy feedback
* Tab bar
* Update peer view
* Add offline state handling and network warning banner
- Show "Offline" instead of "Connected" when VPN tunnel is active but device has no internet
- Add NetworkWarningBanner with "Network Issues" warning when connected without internet
- Remove InternetStatusView (online/offline indicator) from connection screen
- Add FirstLaunchView onboarding screen
- Remove unused components (CustomBackButton, Extensions, JustifiedText, SolidButton, TransparentGradientButton)
- Update AboutView, AdvancedView, ServerView, PeerTabView, RouteTabView, iOSNetworksView styling
- Add EmptyTabPlaceholder component
* Add AppButton component with liquid glass support for iOS 26+
* Update FirstLaunchView.swift
* old version
* Update project.pbxproj
* Code refactoring
* Update project.pbxproj
* Update MainViewModel.swift
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>