-
-
Notifications
You must be signed in to change notification settings - Fork 2
Comparing changes
Open a pull request
base repository: GeiserX/VPN-Bypass
base: v2.0.0
head repository: GeiserX/VPN-Bypass
compare: v2.1.0
- 10 commits
- 7 files changed
- 1 contributor
Commits on Mar 30, 2026
-
Configuration menu - View commit details
-
Copy full SHA for 3bd9ceb - Browse repository at this point
Copy the full SHA 3bd9cebView commit details
Commits on Mar 31, 2026
-
feat: UI overhaul — normal window, official logo, larger tabs
- Settings: NSPanel → NSWindow with standard close/minimize/zoom buttons and resizable behavior. Removed screenSaver level and floating panel. - Menu bar: use official template icon (menubar-icon.png) instead of SF Symbol shield. Pulsing animation preserved for loading state. - Dropdown: use official 3D logo (VPNBypass.png) in title header. - Settings titlebar: use official logo instead of SF Symbol. - Tab bar: larger font (13pt), rounded rectangle shape, more top padding to clear titlebar traffic lights. - Makefile: copy menubar-icon PNGs to app bundle Resources.
Configuration menu - View commit details
-
Copy full SHA for 7739450 - Browse repository at this point
Copy the full SHA 7739450View commit details -
fix: reuse minimized window, remove broken resizable, add close delegate
- showWindow() now deminiaturizes and reuses existing window instead of discarding it when !isVisible (miniaturized windows aren't visible) - Added NSWindowDelegate with windowWillClose to nil the reference only when the user actually closes the window (red X) - Removed .resizable from styleMask since the SwiftUI layout is fixed at 580x620 — set contentMinSize/contentMaxSize to match
Configuration menu - View commit details
-
Copy full SHA for c770915 - Browse repository at this point
Copy the full SHA c770915View commit details -
fix: helper startup race and XPC hang on version mismatch
Root cause: after a Homebrew upgrade, the installed helper binary stays at the old version. Route application starts 0.5s after launch, but helper version check was scheduled 2s later. XPC calls to the old helper with new method signatures hang forever (no error handler, no timeout), leaving the app stuck at "Setting Up" indefinitely. Changes: - Add ensureHelperReady() preflight that MUST complete before any route application. Verifies helper files exist, connects with timeout to check version, auto-updates if mismatched, and retries. - Replace isHelperInstalled boolean with HelperState enum: missing, checking, installing, outdated, ready, failed. - All XPC RPCs now use remoteObjectProxyWithErrorHandler (not bare remoteObjectProxy) so protocol mismatches fire the error handler instead of silently hanging. - All XPC RPCs have a timeout (10s base + 0.1s per route for batches). On timeout, the XPC connection is dropped and an error is returned. - Startup ordering: VPNBypassApp awaits ensureHelperReady() before detectAndApplyRoutesAsync(), eliminating the race. - NSApp.activate before admin prompt so the authorization dialog appears on top. - Settings UI shows proper state: "Update Required", "Checking...", "Error: ..." with contextual action buttons (Install/Update/Retry).
Configuration menu - View commit details
-
Copy full SHA for 9d95a13 - Browse repository at this point
Copy the full SHA 9d95a13View commit details -
fix: hard XPC deadline, authoritative helper gate, Settings auto-reco…
…very 1. Replace broken withTaskTimeout (task group + CheckedContinuation — cancellation doesn't resume stuck continuations) with OnceGate + DispatchQueue.asyncAfter hard deadline. The gate guarantees exactly- once delivery: whichever fires first (XPC reply or timer) wins, the other is silently dropped. No cooperative cancellation needed. 2. Make helper preflight an authoritative gate: if ensureHelperReady() returns false, startup now returns early — detectAndApplyRoutesAsync() is never called. No more helperless fallback presenting false state. 3. Settings Install/Update/Retry button now calls ensureHelperReady() (full preflight with version verify) instead of bare installHelper(). On success, if VPN is connected but no routes exist (startup was gated), automatically triggers route application.
Configuration menu - View commit details
-
Copy full SHA for 7a11955 - Browse repository at this point
Copy the full SHA 7a11955View commit details -
fix: close helperless fallback paths and restore DNS timer on recovery
1. Remove helperless fallback from addRoute/removeRoute — when helper isn't ready, fail immediately instead of silently falling back to direct /sbin/route commands that require sudo and bypass the state model. This closes the back door that let periodic refresh and network monitor re-enter the unsupported helperless path. 2. Gate auto-apply on VPN connect: checkVPNStatus() now also checks HelperManager.shared.isHelperInstalled before triggering applyAllRoutes(), preventing the 30-second periodic refresh from bypassing the startup gate. 3. Settings recovery now starts startDNSRefreshTimer() after detectAndApplyRoutesAsync(), restoring the full lifecycle that was skipped when startup returned early due to helper failure.
Configuration menu - View commit details
-
Copy full SHA for 966797e - Browse repository at this point
Copy the full SHA 966797eView commit details -
fix: remove all helperless fallback paths from RouteManager
- Add helper-ready guards to VPN interface reroute and Tailscale profile reroute code paths - Replace all `else { for ... addRoute/removeRoute }` fallback loops with early-return or log-and-skip in: applyAllRoutesInternal, removeAllRoutes, applyRoutesFromCache, backgroundDNSRefresh, performDNSRefresh stale cleanup - Remove entire AppleScript hosts file fallback from modifyHostsFile - Flatten orphan/add-failed cleanup branches (no conditional needed when helper is the only path) - Helper readiness is now authoritative at every route-mutating entry point, not just at startupConfiguration menu - View commit details
-
Copy full SHA for adec9b0 - Browse repository at this point
Copy the full SHA adec9b0View commit details -
fix: resolve strict-concurrency warnings in OnceGate/withXPCDeadline
- Mark OnceGate as @unchecked Sendable (thread-safe via NSLock) - Constrain T: Sendable so fallback values can cross concurrency boundaries - Use `sending T` parameter in complete() for safe value transfer - Make withXPCDeadline @mainactor to match all callers and avoid closure isolation boundary crossings Only remaining warning is Apple SDK: SMAppService.register() declared async but compiler sees no async ops (unfixable without SDK change).
Configuration menu - View commit details
-
Copy full SHA for c2847c3 - Browse repository at this point
Copy the full SHA c2847c3View commit details -
Configuration menu - View commit details
-
Copy full SHA for f67eaed - Browse repository at this point
Copy the full SHA f67eaedView commit details -
Merge pull request #21 from GeiserX/feat/ui-overhaul
feat: UI overhaul — native window, official logo, larger tabs
Configuration menu - View commit details
-
Copy full SHA for edd8773 - Browse repository at this point
Copy the full SHA edd8773View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v2.0.0...v2.1.0