diff --git a/.github/actions/nix-devshell/action.yaml b/.github/actions/nix-devshell/action.yaml
new file mode 100644
index 00000000..6cea0a04
--- /dev/null
+++ b/.github/actions/nix-devshell/action.yaml
@@ -0,0 +1,13 @@
+name: "Setup Nix devshell"
+description: "This action sets up a nix devshell environment"
+runs:
+  using: "composite"
+  steps:
+    - name: Setup Nix
+      uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
+
+    - name: Setup GHA Nix cache
+      uses: DeterminateSystems/magic-nix-cache-action@6221693898146dc97e38ad0e013488a16477a4c4 # v9
+
+    - name: Enter devshell
+      uses: nicknovitski/nix-develop@9be7cfb4b10451d3390a75dc18ad0465bed4932a # v1.2.1
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0f484177..145b67a5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,7 +10,6 @@ on:
     paths-ignore:
       - "README.md"
 
-
 permissions:
   contents: read
 
@@ -19,36 +18,69 @@ jobs:
     name: test
     runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest'}}
     steps:
+      - name: Harden Runner
+        uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
+        with:
+          egress-policy: audit
+
       - name: Checkout
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 1
+
       - name: Switch XCode Version
-        uses: maxim-lobanov/setup-xcode@v1
+        uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
         with:
-          xcode-version: '16.0.0'
-      - run: |
-          make test
+          # (ThomasK33): depot.dev does not yet support Xcode 16.1 or 16.2 GA, thus we're stuck with 16.0.0 for now.
+          # I've already reached out, so hopefully this comment will soon be obsolete.
+          xcode-version: "16.0.0"
+
+      - name: Setup Nix
+        uses: ./.github/actions/nix-devshell
+
+      - run: make test
+
   format:
     name: fmt
     runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest'}}
     steps:
+      - name: Harden Runner
+        uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
+        with:
+          egress-policy: audit
+
       - name: Checkout
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 1
-      - run: |
-          make fmt
+
+      - name: Switch XCode Version
+        uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
+        with:
+          # (ThomasK33): depot.dev does not yet support Xcode 16.1 or 16.2 GA, thus we're stuck with 16.0.0 for now.
+          # I've already reached out, so hopefully this comment will soon be obsolete.
+          xcode-version: "16.0.0"
+
+      - name: Setup Nix
+        uses: ./.github/actions/nix-devshell
+
+      - run: make fmt
+
   lint:
     name: lint
     runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest'}}
     steps:
+      - name: Harden Runner
+        uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
+        with:
+          egress-policy: audit
+
       - name: Checkout
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           fetch-depth: 1
-      - name: Install Swiftlint
-        run: |
-          brew install swiftlint
-      - run: |
-          make lint
\ No newline at end of file
+
+      - name: Setup Nix
+        uses: ./.github/actions/nix-devshell
+
+      - run: make lint
diff --git a/.gitignore b/.gitignore
index 0be27436..6d526443 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,293 @@
-# Xcode specifics
+# Created by https://www.toptal.com/developers/gitignore/api/xcode,jetbrains,macos,direnv,swift,swiftpm,objective-c
+# Edit at https://www.toptal.com/developers/gitignore?templates=xcode,jetbrains,macos,direnv,swift,swiftpm,objective-c
+
+### direnv ###
+.direnv
+.envrc
+
+### JetBrains ###
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn.  Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# SonarLint plugin
+.idea/sonarlint/
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### JetBrains Patch ###
+# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
+
+# *.iml
+# modules.xml
+# .idea/misc.xml
+# *.ipr
+
+# Sonarlint plugin
+# https://plugins.jetbrains.com/plugin/7973-sonarlint
+.idea/**/sonarlint/
+
+# SonarQube Plugin
+# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
+.idea/**/sonarIssues.xml
+
+# Markdown Navigator plugin
+# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
+.idea/**/markdown-navigator.xml
+.idea/**/markdown-navigator-enh.xml
+.idea/**/markdown-navigator/
+
+# Cache file creation bug
+# See https://youtrack.jetbrains.com/issue/JBR-2257
+.idea/$CACHE_FILE$
+
+# CodeStream plugin
+# https://plugins.jetbrains.com/plugin/12206-codestream
+.idea/codestream.xml
+
+# Azure Toolkit for IntelliJ plugin
+# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
+.idea/**/azureSettings.xml
+
+### macOS ###
+# General
 .DS_Store
-UserInterfaceState.xcuserstate
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### macOS Patch ###
+# iCloud generated files
+*.icloud
+
+### Objective-C ###
+# Xcode
+#
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+## User settings
 xcuserdata/
 
-# JetBrains
-.idea/
\ No newline at end of file
+## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
+*.xcscmblueprint
+*.xccheckout
+
+## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
+build/
+DerivedData/
+*.moved-aside
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+
+## Obj-C/Swift specific
+*.hmap
+
+## App packaging
+*.ipa
+*.dSYM.zip
+*.dSYM
+
+# CocoaPods
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+# Pods/
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+# *.xcworkspace
+
+# Carthage
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build/
+
+# fastlane
+# It is recommended to not store the screenshots in the git repo.
+# Instead, use fastlane to re-generate the screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/#source-control
+
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots/**/*.png
+fastlane/test_output
+
+# Code Injection
+# After new code Injection tools there's a generated folder /iOSInjectionProject
+# https://github.com/johnno1962/injectionforxcode
+
+iOSInjectionProject/
+
+### Objective-C Patch ###
+
+### Swift ###
+# Xcode
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+
+
+
+
+
+## Playgrounds
+timeline.xctimeline
+playground.xcworkspace
+
+# Swift Package Manager
+# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
+Packages/
+Package.pins
+Package.resolved
+*.xcodeproj
+# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
+# hence it is not needed unless you have added a package configuration file to your project
+# .swiftpm
+
+.build/
+
+# CocoaPods
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+# Pods/
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+*.xcworkspace
+
+# Carthage
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+
+# Accio dependency management
+Dependencies/
+.accio/
+
+# fastlane
+# It is recommended to not store the screenshots in the git repo.
+# Instead, use fastlane to re-generate the screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/#source-control
+
+
+# Code Injection
+# After new code Injection tools there's a generated folder /iOSInjectionProject
+# https://github.com/johnno1962/injectionforxcode
+
+
+### SwiftPM ###
+Packages
+xcuserdata
+*.xcodeproj
+
+
+### Xcode ###
+
+## Xcode 8 and earlier
+
+### Xcode Patch ###
+*.xcodeproj/*
+!*.xcodeproj/project.pbxproj
+!*.xcodeproj/xcshareddata/
+!*.xcodeproj/project.xcworkspace/
+!*.xcworkspace/contents.xcworkspacedata
+/*.gcno
+**/xcshareddata/WorkspaceSettings.xcsettings
+
+# End of https://www.toptal.com/developers/gitignore/api/xcode,jetbrains,macos,direnv,swift,swiftpm,objective-c
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..cec0dfe5
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,142 @@
+# Contributing to Coder Desktop
+
+Thank you for your interest in contributing to Coder Desktop! Below are the
+guidelines to help you get started.
+
+## Prerequisites
+
+Before opening the project in Xcode, you need to generate the Xcode project files.
+We use [**XcodeGen**](https://github.com/yonaskolb/XcodeGen) to handle this
+process, and the project generation is integrated into the `Makefile`.
+
+## Setting Up the Development Environment
+
+To ensure a consistent and reliable development environment, we recommend using
+[**Nix**](https://nix.dev/) with Flake support. All the tools required for
+development are defined in the `flake.nix` file.
+
+**Note:** Nix is the only supported development environment for this project.
+While setups outside of Nix may work, we do not support custom tool installations
+or address issues related to missing path setups or other tooling installation
+problems. Using Nix ensures consistency across development environments and avoids
+these potential issues.
+
+### Installing Nix with Flakes Enabled
+
+If you don’t already have Nix installed, you can:
+
+1. Use the [Determinate Systems installer](https://nixinstaller.com/) for a
+   simple setup.
+2. Alternatively, use the [official installer](https://nixos.org/download.html)
+   and enable Flake support by adding the following to your Nix configuration:
+
+   ```nix
+   experimental-features = nix-command flakes
+   ```
+
+This project does **not** support non-Flake versions of Nix.
+
+### Entering the Development Environment
+
+Run the following command to enter the development environment with all necessary
+tools:
+
+```bash
+nix develop
+```
+
+### Using `direnv` for Environment Automation (Optional)
+
+As an optional recommendation, you can use [`direnv`](https://direnv.net/) to
+automatically load and unload the Nix development environment when you navigate
+to the project directory. After installing `direnv`, enable it for this project by:
+
+1. Adding the following line to your `.envrc` file in the project directory:
+
+   ```bash
+   use flake
+   ```
+
+2. Allowing the `.envrc` file by running:
+
+   ```bash
+   direnv allow
+   ```
+
+With `direnv`, the development environment will automatically be set up whenever
+you enter the project directory. This step is optional but can significantly
+streamline your workflow.
+
+## Generating the Xcode Project Files
+
+Once your development environment is set up, generate the Xcode project files by
+running:
+
+```bash
+make
+```
+
+This will use **XcodeGen** to create the required Xcode project files.
+The configuration for the project is defined in `Coder Desktop/project.yml`.
+
+## Common Make Commands
+
+Here are some useful `make` commands for working with the project:
+
+- `make fmt`: Format Swift files using SwiftFormat.
+- `make lint`: Lint Swift files using SwiftLint.
+- `make test`: Run all tests using `xcodebuild`.
+- `make clean`: Clean the Xcode project.
+- `make proto`: Generate Swift files from protobufs.
+- `make help`: Display all available `make` commands with descriptions.
+
+For continuous development, you can also use:
+
+```bash
+make watch-gen
+```
+
+This command watches for changes to `Coder Desktop/project.yml` and regenerates
+the Xcode project file as needed.
+
+## Testing and Formatting
+
+To maintain code quality, ensure you run the following before submitting any changes:
+
+1. **Format Swift files:**
+
+   ```bash
+   make fmt
+   ```
+
+2. **Lint Swift files:**
+
+   ```bash
+   make lint
+   ```
+
+3. **Run tests:**
+
+   ```bash
+   make test
+   ```
+
+## Contributing Workflow
+
+1. Fork the repository and create your feature branch:
+
+   ```bash
+   git checkout -b feature/your-feature-name
+   ```
+
+2. Make your changes and commit them with clear messages.
+3. Push your branch to your forked repository:
+
+   ```bash
+   git push origin feature/your-feature-name
+   ```
+
+4. Open a pull request to the main repository.
+
+Thank you for contributing! If you have any questions or need further assistance,
+feel free to open an issue.
diff --git a/Coder Desktop/Coder Desktop.xcodeproj/project.pbxproj b/Coder Desktop/Coder Desktop.xcodeproj/project.pbxproj
deleted file mode 100644
index a7b35920..00000000
--- a/Coder Desktop/Coder Desktop.xcodeproj/project.pbxproj	
+++ /dev/null
@@ -1,1659 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 77;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		961679332CFF117300B2B6DF /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 961679322CFF117300B2B6DF /* NetworkExtension.framework */; };
-		9616793D2CFF117300B2B6DF /* com.coder.Coder-Desktop.VPN.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 961679302CFF117300B2B6DF /* com.coder.Coder-Desktop.VPN.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
-		AA2C690F2D34F6920059AFAF /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = AA2C690E2D34F6920059AFAF /* LaunchAtLogin */; };
-		AA3B3DA92D2D23860099996A /* VPNLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B3DA12D2D23860099996A /* VPNLib.framework */; };
-		AA3B3DBF2D2D23AB0099996A /* SwiftProtobuf in Frameworks */ = {isa = PBXBuildFile; productRef = AA3B3DBE2D2D23AB0099996A /* SwiftProtobuf */; };
-		AA3B3DC12D2D23AB0099996A /* SwiftProtobufPluginLibrary in Frameworks */ = {isa = PBXBuildFile; productRef = AA3B3DC02D2D23AB0099996A /* SwiftProtobufPluginLibrary */; };
-		AA3B3DCD2D2D249F0099996A /* VPNLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B3DA12D2D23860099996A /* VPNLib.framework */; };
-		AA3B3DCE2D2D249F0099996A /* VPNLib.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B3DA12D2D23860099996A /* VPNLib.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		AA3B3E8E2D2E0FF40099996A /* Mocker in Frameworks */ = {isa = PBXBuildFile; productRef = AA3B3E8D2D2E0FF40099996A /* Mocker */; };
-		AA3B40992D2FC8560099996A /* CoderSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; };
-		AA3B40B62D2FD9DD0099996A /* Mocker in Frameworks */ = {isa = PBXBuildFile; productRef = AA3B40B52D2FD9DD0099996A /* Mocker */; };
-		AA3B40B72D2FDA5C0099996A /* CoderSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; };
-		AA3B40BD2D2FDFBA0099996A /* Mocker in Frameworks */ = {isa = PBXBuildFile; productRef = AA3B40BC2D2FDFBA0099996A /* Mocker */; };
-		AA3B40C02D2FE7760099996A /* CoderSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; };
-		AA8BC3392D0060A900E1ABAA /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = AA8BC3382D0060A900E1ABAA /* ViewInspector */; };
-		AA8BC33F2D0061F200E1ABAA /* FluidMenuBarExtra in Frameworks */ = {isa = PBXBuildFile; productRef = AA8BC33E2D0061F200E1ABAA /* FluidMenuBarExtra */; };
-		AA8BC4CF2D00A4B700E1ABAA /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = AA8BC4CE2D00A4B700E1ABAA /* KeychainAccess */; };
-		AAC382352D427B7600F6DFB4 /* CoderSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; };
-		AAC382362D427B7600F6DFB4 /* CoderSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		AAC382392D427B8300F6DFB4 /* CoderSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; };
-		AAC3823A2D427B8300F6DFB4 /* CoderSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AA3B40912D2FC8560099996A /* CoderSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		961679102CFF100E00B2B6DF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 961678FB2CFF100D00B2B6DF;
-			remoteInfo = "Coder Desktop";
-		};
-		9616791A2CFF100E00B2B6DF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 961678FB2CFF100D00B2B6DF;
-			remoteInfo = "Coder Desktop";
-		};
-		9616793B2CFF117300B2B6DF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9616792F2CFF117300B2B6DF;
-			remoteInfo = VPN;
-		};
-		AA3B3DAA2D2D23860099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B3DA02D2D23860099996A;
-			remoteInfo = VPNLib;
-		};
-		AA3B3DAC2D2D23860099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 961678FB2CFF100D00B2B6DF;
-			remoteInfo = "Coder Desktop";
-		};
-		AA3B3DCF2D2D249F0099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B3DA02D2D23860099996A;
-			remoteInfo = VPNLib;
-		};
-		AA3B409A2D2FC8560099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B40902D2FC8560099996A;
-			remoteInfo = CoderSDK;
-		};
-		AA3B409C2D2FC8560099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 961678FB2CFF100D00B2B6DF;
-			remoteInfo = "Coder Desktop";
-		};
-		AA3B40A22D2FC8560099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B40902D2FC8560099996A;
-			remoteInfo = CoderSDK;
-		};
-		AA3B40B92D2FDA5C0099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B40902D2FC8560099996A;
-			remoteInfo = CoderSDK;
-		};
-		AA3B40C22D2FE7760099996A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B40902D2FC8560099996A;
-			remoteInfo = CoderSDK;
-		};
-		AAC382372D427B7600F6DFB4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 961678F42CFF100D00B2B6DF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA3B40902D2FC8560099996A;
-			remoteInfo = CoderSDK;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		961679422CFF117300B2B6DF /* Embed System Extensions */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "$(SYSTEM_EXTENSIONS_FOLDER_PATH)";
-			dstSubfolderSpec = 16;
-			files = (
-				9616793D2CFF117300B2B6DF /* com.coder.Coder-Desktop.VPN.systemextension in Embed System Extensions */,
-			);
-			name = "Embed System Extensions";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA32A0E32D2D21A3004D6733 /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				AA3B3DCE2D2D249F0099996A /* VPNLib.framework in Embed Frameworks */,
-				AAC382362D427B7600F6DFB4 /* CoderSDK.framework in Embed Frameworks */,
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AAC3823B2D427B8300F6DFB4 /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				AAC3823A2D427B8300F6DFB4 /* CoderSDK.framework in Embed Frameworks */,
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		961678FC2CFF100D00B2B6DF /* Coder Desktop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Coder Desktop.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		9616790F2CFF100E00B2B6DF /* Coder DesktopTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Coder DesktopTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		961679192CFF100E00B2B6DF /* Coder DesktopUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Coder DesktopUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		961679302CFF117300B2B6DF /* com.coder.Coder-Desktop.VPN.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = "com.coder.Coder-Desktop.VPN.systemextension"; sourceTree = BUILT_PRODUCTS_DIR; };
-		961679322CFF117300B2B6DF /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
-		AA3B3DA12D2D23860099996A /* VPNLib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VPNLib.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		AA3B3DA82D2D23860099996A /* VPNLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VPNLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		AA3B40912D2FC8560099996A /* CoderSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoderSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		AA3B40982D2FC8560099996A /* CoderSDKTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoderSDKTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-/* End PBXFileReference section */
-
-/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
-		AA3B3DB62D2D23860099996A /* Exceptions for "VPNLib" folder in "VPNLib" target */ = {
-			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-			membershipExceptions = (
-				vpn.proto,
-			);
-			publicHeaders = (
-				VPNLib.h,
-			);
-			target = AA3B3DA02D2D23860099996A /* VPNLib */;
-		};
-		AA3B40A62D2FC8560099996A /* Exceptions for "CoderSDK" folder in "CoderSDK" target */ = {
-			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-			publicHeaders = (
-				CoderSDK.h,
-			);
-			target = AA3B40902D2FC8560099996A /* CoderSDK */;
-		};
-		AA3C69C12D2D15D200A45481 /* Exceptions for "VPN" folder in "VPN" target */ = {
-			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-			membershipExceptions = (
-				Info.plist,
-			);
-			target = 9616792F2CFF117300B2B6DF /* VPN */;
-		};
-/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
-
-/* Begin PBXFileSystemSynchronizedRootGroup section */
-		961678FE2CFF100D00B2B6DF /* Coder Desktop */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			path = "Coder Desktop";
-			sourceTree = "<group>";
-		};
-		961679122CFF100E00B2B6DF /* Coder DesktopTests */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			path = "Coder DesktopTests";
-			sourceTree = "<group>";
-		};
-		9616791C2CFF100E00B2B6DF /* Coder DesktopUITests */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			path = "Coder DesktopUITests";
-			sourceTree = "<group>";
-		};
-		AA3B3DA22D2D23860099996A /* VPNLib */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			exceptions = (
-				AA3B3DB62D2D23860099996A /* Exceptions for "VPNLib" folder in "VPNLib" target */,
-			);
-			path = VPNLib;
-			sourceTree = "<group>";
-		};
-		AA3B3DAE2D2D23860099996A /* VPNLibTests */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			path = VPNLibTests;
-			sourceTree = "<group>";
-		};
-		AA3B40922D2FC8560099996A /* CoderSDK */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			exceptions = (
-				AA3B40A62D2FC8560099996A /* Exceptions for "CoderSDK" folder in "CoderSDK" target */,
-			);
-			path = CoderSDK;
-			sourceTree = "<group>";
-		};
-		AA3B409E2D2FC8560099996A /* CoderSDKTests */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			path = CoderSDKTests;
-			sourceTree = "<group>";
-		};
-		AA3C69AD2D2D143400A45481 /* VPN */ = {
-			isa = PBXFileSystemSynchronizedRootGroup;
-			exceptions = (
-				AA3C69C12D2D15D200A45481 /* Exceptions for "VPN" folder in "VPN" target */,
-			);
-			path = VPN;
-			sourceTree = "<group>";
-		};
-/* End PBXFileSystemSynchronizedRootGroup section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		961678F92CFF100D00B2B6DF /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AA8BC4CF2D00A4B700E1ABAA /* KeychainAccess in Frameworks */,
-				AAC382392D427B8300F6DFB4 /* CoderSDK.framework in Frameworks */,
-				AA2C690F2D34F6920059AFAF /* LaunchAtLogin in Frameworks */,
-				AA8BC33F2D0061F200E1ABAA /* FluidMenuBarExtra in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9616790C2CFF100E00B2B6DF /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AA8BC3392D0060A900E1ABAA /* ViewInspector in Frameworks */,
-				AA3B40B72D2FDA5C0099996A /* CoderSDK.framework in Frameworks */,
-				AA3B40B62D2FD9DD0099996A /* Mocker in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		961679162CFF100E00B2B6DF /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9616792D2CFF117300B2B6DF /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				961679332CFF117300B2B6DF /* NetworkExtension.framework in Frameworks */,
-				AAC382352D427B7600F6DFB4 /* CoderSDK.framework in Frameworks */,
-				AA3B3DCD2D2D249F0099996A /* VPNLib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B3D9E2D2D23860099996A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AA3B3DC12D2D23AB0099996A /* SwiftProtobufPluginLibrary in Frameworks */,
-				AA3B40C02D2FE7760099996A /* CoderSDK.framework in Frameworks */,
-				AA3B3DBF2D2D23AB0099996A /* SwiftProtobuf in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B3DA52D2D23860099996A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AA3B3DA92D2D23860099996A /* VPNLib.framework in Frameworks */,
-				AA3B3E8E2D2E0FF40099996A /* Mocker in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B408E2D2FC8560099996A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B40952D2FC8560099996A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AA3B40992D2FC8560099996A /* CoderSDK.framework in Frameworks */,
-				AA3B40BD2D2FDFBA0099996A /* Mocker in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		961678F32CFF100D00B2B6DF = {
-			isa = PBXGroup;
-			children = (
-				961678FE2CFF100D00B2B6DF /* Coder Desktop */,
-				AA3C69AD2D2D143400A45481 /* VPN */,
-				961679122CFF100E00B2B6DF /* Coder DesktopTests */,
-				9616791C2CFF100E00B2B6DF /* Coder DesktopUITests */,
-				AA3B3DA22D2D23860099996A /* VPNLib */,
-				AA3B3DAE2D2D23860099996A /* VPNLibTests */,
-				AA3B40922D2FC8560099996A /* CoderSDK */,
-				AA3B409E2D2FC8560099996A /* CoderSDKTests */,
-				961679312CFF117300B2B6DF /* Frameworks */,
-				961678FD2CFF100D00B2B6DF /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		961678FD2CFF100D00B2B6DF /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				961678FC2CFF100D00B2B6DF /* Coder Desktop.app */,
-				9616790F2CFF100E00B2B6DF /* Coder DesktopTests.xctest */,
-				961679192CFF100E00B2B6DF /* Coder DesktopUITests.xctest */,
-				961679302CFF117300B2B6DF /* com.coder.Coder-Desktop.VPN.systemextension */,
-				AA3B3DA12D2D23860099996A /* VPNLib.framework */,
-				AA3B3DA82D2D23860099996A /* VPNLibTests.xctest */,
-				AA3B40912D2FC8560099996A /* CoderSDK.framework */,
-				AA3B40982D2FC8560099996A /* CoderSDKTests.xctest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		961679312CFF117300B2B6DF /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				961679322CFF117300B2B6DF /* NetworkExtension.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		AA3B3D9C2D2D23860099996A /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B408C2D2FC8560099996A /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		961678FB2CFF100D00B2B6DF /* Coder Desktop */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 961679232CFF100F00B2B6DF /* Build configuration list for PBXNativeTarget "Coder Desktop" */;
-			buildPhases = (
-				961678F82CFF100D00B2B6DF /* Sources */,
-				961678F92CFF100D00B2B6DF /* Frameworks */,
-				961678FA2CFF100D00B2B6DF /* Resources */,
-				961679422CFF117300B2B6DF /* Embed System Extensions */,
-				AAC3823B2D427B8300F6DFB4 /* Embed Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C698C2D354A800059AFAF /* PBXTargetDependency */,
-				9616793C2CFF117300B2B6DF /* PBXTargetDependency */,
-				AA3B40A32D2FC8560099996A /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				961678FE2CFF100D00B2B6DF /* Coder Desktop */,
-			);
-			name = "Coder Desktop";
-			packageProductDependencies = (
-				AA8BC33E2D0061F200E1ABAA /* FluidMenuBarExtra */,
-				AA8BC4CE2D00A4B700E1ABAA /* KeychainAccess */,
-				AA2C690E2D34F6920059AFAF /* LaunchAtLogin */,
-			);
-			productName = "Coder Desktop";
-			productReference = 961678FC2CFF100D00B2B6DF /* Coder Desktop.app */;
-			productType = "com.apple.product-type.application";
-		};
-		9616790E2CFF100E00B2B6DF /* Coder DesktopTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 961679262CFF100F00B2B6DF /* Build configuration list for PBXNativeTarget "Coder DesktopTests" */;
-			buildPhases = (
-				9616790B2CFF100E00B2B6DF /* Sources */,
-				9616790C2CFF100E00B2B6DF /* Frameworks */,
-				9616790D2CFF100E00B2B6DF /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C698E2D354A840059AFAF /* PBXTargetDependency */,
-				961679112CFF100E00B2B6DF /* PBXTargetDependency */,
-				AA3B40BA2D2FDA5C0099996A /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				961679122CFF100E00B2B6DF /* Coder DesktopTests */,
-			);
-			name = "Coder DesktopTests";
-			packageProductDependencies = (
-				AA8BC3382D0060A900E1ABAA /* ViewInspector */,
-				AA3B40B52D2FD9DD0099996A /* Mocker */,
-			);
-			productName = "Coder DesktopTests";
-			productReference = 9616790F2CFF100E00B2B6DF /* Coder DesktopTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-		961679182CFF100E00B2B6DF /* Coder DesktopUITests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 961679292CFF100F00B2B6DF /* Build configuration list for PBXNativeTarget "Coder DesktopUITests" */;
-			buildPhases = (
-				961679152CFF100E00B2B6DF /* Sources */,
-				961679162CFF100E00B2B6DF /* Frameworks */,
-				961679172CFF100E00B2B6DF /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C69902D354A880059AFAF /* PBXTargetDependency */,
-				9616791B2CFF100E00B2B6DF /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				9616791C2CFF100E00B2B6DF /* Coder DesktopUITests */,
-			);
-			name = "Coder DesktopUITests";
-			packageProductDependencies = (
-			);
-			productName = "Coder DesktopUITests";
-			productReference = 961679192CFF100E00B2B6DF /* Coder DesktopUITests.xctest */;
-			productType = "com.apple.product-type.bundle.ui-testing";
-		};
-		9616792F2CFF117300B2B6DF /* VPN */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 9616793F2CFF117300B2B6DF /* Build configuration list for PBXNativeTarget "VPN" */;
-			buildPhases = (
-				9616792C2CFF117300B2B6DF /* Sources */,
-				9616792D2CFF117300B2B6DF /* Frameworks */,
-				9616792E2CFF117300B2B6DF /* Resources */,
-				AA32A0E32D2D21A3004D6733 /* Embed Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C69922D354A8B0059AFAF /* PBXTargetDependency */,
-				AA3B3DD02D2D249F0099996A /* PBXTargetDependency */,
-				AAC382382D427B7600F6DFB4 /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				AA3C69AD2D2D143400A45481 /* VPN */,
-			);
-			name = VPN;
-			packageProductDependencies = (
-			);
-			productName = VPN;
-			productReference = 961679302CFF117300B2B6DF /* com.coder.Coder-Desktop.VPN.systemextension */;
-			productType = "com.apple.product-type.system-extension";
-		};
-		AA3B3DA02D2D23860099996A /* VPNLib */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AA3B3DB72D2D23860099996A /* Build configuration list for PBXNativeTarget "VPNLib" */;
-			buildPhases = (
-				AA3B3D9C2D2D23860099996A /* Headers */,
-				AA3B3D9D2D2D23860099996A /* Sources */,
-				AA3B3D9E2D2D23860099996A /* Frameworks */,
-				AA3B3D9F2D2D23860099996A /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C69942D354A8E0059AFAF /* PBXTargetDependency */,
-				AA3B40C32D2FE7760099996A /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				AA3B3DA22D2D23860099996A /* VPNLib */,
-			);
-			name = VPNLib;
-			packageProductDependencies = (
-				AA3B3DBE2D2D23AB0099996A /* SwiftProtobuf */,
-				AA3B3DC02D2D23AB0099996A /* SwiftProtobufPluginLibrary */,
-			);
-			productName = VPNLib;
-			productReference = AA3B3DA12D2D23860099996A /* VPNLib.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		AA3B3DA72D2D23860099996A /* VPNLibTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AA3B3DBA2D2D23860099996A /* Build configuration list for PBXNativeTarget "VPNLibTests" */;
-			buildPhases = (
-				AA3B3DA42D2D23860099996A /* Sources */,
-				AA3B3DA52D2D23860099996A /* Frameworks */,
-				AA3B3DA62D2D23860099996A /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C69962D354A910059AFAF /* PBXTargetDependency */,
-				AA3B3DAB2D2D23860099996A /* PBXTargetDependency */,
-				AA3B3DAD2D2D23860099996A /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				AA3B3DAE2D2D23860099996A /* VPNLibTests */,
-			);
-			name = VPNLibTests;
-			packageProductDependencies = (
-				AA3B3E8D2D2E0FF40099996A /* Mocker */,
-			);
-			productName = VPNLibTests;
-			productReference = AA3B3DA82D2D23860099996A /* VPNLibTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-		AA3B40902D2FC8560099996A /* CoderSDK */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AA3B40A72D2FC8560099996A /* Build configuration list for PBXNativeTarget "CoderSDK" */;
-			buildPhases = (
-				AA3B408C2D2FC8560099996A /* Headers */,
-				AA3B408D2D2FC8560099996A /* Sources */,
-				AA3B408E2D2FC8560099996A /* Frameworks */,
-				AA3B408F2D2FC8560099996A /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C69982D354A940059AFAF /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				AA3B40922D2FC8560099996A /* CoderSDK */,
-			);
-			name = CoderSDK;
-			packageProductDependencies = (
-			);
-			productName = CoderSDK;
-			productReference = AA3B40912D2FC8560099996A /* CoderSDK.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		AA3B40972D2FC8560099996A /* CoderSDKTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AA3B40AA2D2FC8560099996A /* Build configuration list for PBXNativeTarget "CoderSDKTests" */;
-			buildPhases = (
-				AA3B40942D2FC8560099996A /* Sources */,
-				AA3B40952D2FC8560099996A /* Frameworks */,
-				AA3B40962D2FC8560099996A /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				AA2C699A2D354A970059AFAF /* PBXTargetDependency */,
-				AA3B409B2D2FC8560099996A /* PBXTargetDependency */,
-				AA3B409D2D2FC8560099996A /* PBXTargetDependency */,
-			);
-			fileSystemSynchronizedGroups = (
-				AA3B409E2D2FC8560099996A /* CoderSDKTests */,
-			);
-			name = CoderSDKTests;
-			packageProductDependencies = (
-				AA3B40BC2D2FDFBA0099996A /* Mocker */,
-			);
-			productName = CoderSDKTests;
-			productReference = AA3B40982D2FC8560099996A /* CoderSDKTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		961678F42CFF100D00B2B6DF /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				BuildIndependentTargetsInParallel = 1;
-				LastSwiftUpdateCheck = 1620;
-				LastUpgradeCheck = 1620;
-				TargetAttributes = {
-					961678FB2CFF100D00B2B6DF = {
-						CreatedOnToolsVersion = 16.1;
-					};
-					9616790E2CFF100E00B2B6DF = {
-						CreatedOnToolsVersion = 16.1;
-						TestTargetID = 961678FB2CFF100D00B2B6DF;
-					};
-					961679182CFF100E00B2B6DF = {
-						CreatedOnToolsVersion = 16.1;
-						TestTargetID = 961678FB2CFF100D00B2B6DF;
-					};
-					9616792F2CFF117300B2B6DF = {
-						CreatedOnToolsVersion = 16.1;
-					};
-					AA3B3DA02D2D23860099996A = {
-						CreatedOnToolsVersion = 16.2;
-					};
-					AA3B3DA72D2D23860099996A = {
-						CreatedOnToolsVersion = 16.2;
-						TestTargetID = 961678FB2CFF100D00B2B6DF;
-					};
-					AA3B40902D2FC8560099996A = {
-						CreatedOnToolsVersion = 16.2;
-					};
-					AA3B40972D2FC8560099996A = {
-						CreatedOnToolsVersion = 16.2;
-						TestTargetID = 961678FB2CFF100D00B2B6DF;
-					};
-				};
-			};
-			buildConfigurationList = 961678F72CFF100D00B2B6DF /* Build configuration list for PBXProject "Coder Desktop" */;
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				Base,
-			);
-			mainGroup = 961678F32CFF100D00B2B6DF;
-			minimizedProjectReferenceProxies = 1;
-			packageReferences = (
-				AA8BC3372D00609700E1ABAA /* XCRemoteSwiftPackageReference "ViewInspector" */,
-				AA8BC33D2D0061F200E1ABAA /* XCRemoteSwiftPackageReference "fluid-menu-bar-extra" */,
-				AA8BC4CD2D00A4B700E1ABAA /* XCRemoteSwiftPackageReference "KeychainAccess" */,
-				961679512CFF207900B2B6DF /* XCRemoteSwiftPackageReference "swift-protobuf" */,
-				AA3B3E8A2D2E0FE10099996A /* XCRemoteSwiftPackageReference "Mocker" */,
-				AA2C690D2D34F6920059AFAF /* XCRemoteSwiftPackageReference "LaunchAtLogin-modern" */,
-				AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */,
-			);
-			preferredProjectObjectVersion = 77;
-			productRefGroup = 961678FD2CFF100D00B2B6DF /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				961678FB2CFF100D00B2B6DF /* Coder Desktop */,
-				9616790E2CFF100E00B2B6DF /* Coder DesktopTests */,
-				961679182CFF100E00B2B6DF /* Coder DesktopUITests */,
-				9616792F2CFF117300B2B6DF /* VPN */,
-				AA3B3DA02D2D23860099996A /* VPNLib */,
-				AA3B3DA72D2D23860099996A /* VPNLibTests */,
-				AA3B40902D2FC8560099996A /* CoderSDK */,
-				AA3B40972D2FC8560099996A /* CoderSDKTests */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		961678FA2CFF100D00B2B6DF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9616790D2CFF100E00B2B6DF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		961679172CFF100E00B2B6DF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9616792E2CFF117300B2B6DF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B3D9F2D2D23860099996A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B3DA62D2D23860099996A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B408F2D2FC8560099996A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B40962D2FC8560099996A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		961678F82CFF100D00B2B6DF /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9616790B2CFF100E00B2B6DF /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		961679152CFF100E00B2B6DF /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9616792C2CFF117300B2B6DF /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B3D9D2D2D23860099996A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B3DA42D2D23860099996A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B408D2D2FC8560099996A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA3B40942D2FC8560099996A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		961679112CFF100E00B2B6DF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 961678FB2CFF100D00B2B6DF /* Coder Desktop */;
-			targetProxy = 961679102CFF100E00B2B6DF /* PBXContainerItemProxy */;
-		};
-		9616791B2CFF100E00B2B6DF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 961678FB2CFF100D00B2B6DF /* Coder Desktop */;
-			targetProxy = 9616791A2CFF100E00B2B6DF /* PBXContainerItemProxy */;
-		};
-		9616793C2CFF117300B2B6DF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 9616792F2CFF117300B2B6DF /* VPN */;
-			targetProxy = 9616793B2CFF117300B2B6DF /* PBXContainerItemProxy */;
-		};
-		AA2C698C2D354A800059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C698B2D354A800059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C698E2D354A840059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C698D2D354A840059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C69902D354A880059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C698F2D354A880059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C69922D354A8B0059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C69912D354A8B0059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C69942D354A8E0059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C69932D354A8E0059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C69962D354A910059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C69952D354A910059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C69982D354A940059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C69972D354A940059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA2C699A2D354A970059AFAF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			productRef = AA2C69992D354A970059AFAF /* SwiftLintBuildToolPlugin */;
-		};
-		AA3B3DAB2D2D23860099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B3DA02D2D23860099996A /* VPNLib */;
-			targetProxy = AA3B3DAA2D2D23860099996A /* PBXContainerItemProxy */;
-		};
-		AA3B3DAD2D2D23860099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 961678FB2CFF100D00B2B6DF /* Coder Desktop */;
-			targetProxy = AA3B3DAC2D2D23860099996A /* PBXContainerItemProxy */;
-		};
-		AA3B3DD02D2D249F0099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B3DA02D2D23860099996A /* VPNLib */;
-			targetProxy = AA3B3DCF2D2D249F0099996A /* PBXContainerItemProxy */;
-		};
-		AA3B409B2D2FC8560099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B40902D2FC8560099996A /* CoderSDK */;
-			targetProxy = AA3B409A2D2FC8560099996A /* PBXContainerItemProxy */;
-		};
-		AA3B409D2D2FC8560099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 961678FB2CFF100D00B2B6DF /* Coder Desktop */;
-			targetProxy = AA3B409C2D2FC8560099996A /* PBXContainerItemProxy */;
-		};
-		AA3B40A32D2FC8560099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B40902D2FC8560099996A /* CoderSDK */;
-			targetProxy = AA3B40A22D2FC8560099996A /* PBXContainerItemProxy */;
-		};
-		AA3B40BA2D2FDA5C0099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B40902D2FC8560099996A /* CoderSDK */;
-			targetProxy = AA3B40B92D2FDA5C0099996A /* PBXContainerItemProxy */;
-		};
-		AA3B40C32D2FE7760099996A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B40902D2FC8560099996A /* CoderSDK */;
-			targetProxy = AA3B40C22D2FE7760099996A /* PBXContainerItemProxy */;
-		};
-		AAC382382D427B7600F6DFB4 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA3B40902D2FC8560099996A /* CoderSDK */;
-			targetProxy = AAC382372D427B7600F6DFB4 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		961679212CFF100F00B2B6DF /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEAD_CODE_STRIPPING = YES;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				ENABLE_USER_SCRIPT_SANDBOXING = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu17;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
-				MACOSX_DEPLOYMENT_TARGET = 15.1;
-				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
-				MTL_FAST_MATH = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = macosx;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
-				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
-				SWIFT_VERSION = 6.0;
-			};
-			name = Debug;
-		};
-		961679222CFF100F00B2B6DF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEAD_CODE_STRIPPING = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_USER_SCRIPT_SANDBOXING = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu17;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
-				MACOSX_DEPLOYMENT_TARGET = 15.1;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				MTL_FAST_MATH = YES;
-				SDKROOT = macosx;
-				SWIFT_COMPILATION_MODE = wholemodule;
-				SWIFT_VERSION = 6.0;
-			};
-			name = Release;
-		};
-		961679242CFF100F00B2B6DF /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
-				CODE_SIGN_ENTITLEMENTS = "Coder Desktop/Coder_Desktop.entitlements";
-				CODE_SIGN_IDENTITY = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEVELOPMENT_ASSET_PATHS = "\"Coder Desktop/Preview Content\"";
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				ENABLE_HARDENED_RUNTIME = YES;
-				ENABLE_PREVIEWS = YES;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_KEY_LSUIElement = YES;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_VERSION = 6.0;
-			};
-			name = Debug;
-		};
-		961679252CFF100F00B2B6DF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
-				CODE_SIGN_ENTITLEMENTS = "Coder Desktop/Coder_Desktop.entitlements";
-				CODE_SIGN_IDENTITY = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEVELOPMENT_ASSET_PATHS = "\"Coder Desktop/Preview Content\"";
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				ENABLE_HARDENED_RUNTIME = YES;
-				ENABLE_PREVIEWS = YES;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_KEY_LSUIElement = YES;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_VERSION = 6.0;
-			};
-			name = Release;
-		};
-		961679272CFF100F00B2B6DF /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUNDLE_LOADER = "$(TEST_HOST)";
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-DesktopTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 6.0;
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop";
-			};
-			name = Debug;
-		};
-		961679282CFF100F00B2B6DF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUNDLE_LOADER = "$(TEST_HOST)";
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-DesktopTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 6.0;
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop";
-			};
-			name = Release;
-		};
-		9616792A2CFF100F00B2B6DF /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-DesktopUITests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 6.0;
-				TEST_TARGET_NAME = "Coder Desktop";
-			};
-			name = Debug;
-		};
-		9616792B2CFF100F00B2B6DF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-DesktopUITests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 6.0;
-				TEST_TARGET_NAME = "Coder Desktop";
-			};
-			name = Release;
-		};
-		961679402CFF117300B2B6DF /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_ENTITLEMENTS = VPN/VPN.entitlements;
-				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEFINES_MODULE = NO;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				ENABLE_HARDENED_RUNTIME = YES;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = VPN/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = VPN;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@executable_path/../../../../Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop.VPN";
-				PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)";
-				PRODUCT_NAME = "$(inherited)";
-				SKIP_INSTALL = YES;
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_OBJC_BRIDGING_HEADER = "VPN/$(SWIFT_MODULE_NAME)-Bridging-Header.h";
-				SWIFT_VERSION = 6.0;
-			};
-			name = Debug;
-		};
-		961679412CFF117300B2B6DF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_ENTITLEMENTS = VPN/VPN.entitlements;
-				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEAD_CODE_STRIPPING = YES;
-				DEFINES_MODULE = NO;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				ENABLE_HARDENED_RUNTIME = YES;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_FILE = VPN/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = VPN;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@executable_path/../../../../Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop.VPN";
-				PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)";
-				PRODUCT_NAME = "$(inherited)";
-				SKIP_INSTALL = YES;
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_OBJC_BRIDGING_HEADER = "VPN/$(SWIFT_MODULE_NAME)-Bridging-Header.h";
-				SWIFT_VERSION = 6.0;
-			};
-			name = Release;
-		};
-		AA3B3DB82D2D23860099996A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
-				CODE_SIGN_IDENTITY = "";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				ENABLE_MODULE_VERIFIER = NO;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
-				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
-				PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).VPNLib";
-				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
-				SKIP_INSTALL = YES;
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_INSTALL_OBJC_HEADER = NO;
-				SWIFT_VERSION = 6.0;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		AA3B3DB92D2D23860099996A /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				ENABLE_MODULE_VERIFIER = NO;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
-				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
-				PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).VPNLib";
-				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
-				SKIP_INSTALL = YES;
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_INSTALL_OBJC_HEADER = NO;
-				SWIFT_VERSION = 6.0;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		AA3B3DBB2D2D23860099996A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop.VPNLibTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 6.0;
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop";
-			};
-			name = Debug;
-		};
-		AA3B3DBC2D2D23860099996A /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop.VPNLibTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 6.0;
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop";
-			};
-			name = Release;
-		};
-		AA3B40A82D2FC8560099996A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
-				CODE_SIGN_IDENTITY = "";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				ENABLE_MODULE_VERIFIER = NO;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
-				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
-				PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).CoderSDK";
-				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
-				SKIP_INSTALL = YES;
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_INSTALL_OBJC_HEADER = NO;
-				SWIFT_VERSION = 5.0;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Debug;
-		};
-		AA3B40A92D2FC8560099996A /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUILD_LIBRARY_FOR_DISTRIBUTION = NO;
-				CODE_SIGN_IDENTITY = "";
-				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				CURRENT_PROJECT_VERSION = 1;
-				DEFINES_MODULE = YES;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				DYLIB_INSTALL_NAME_BASE = "@rpath";
-				ENABLE_MODULE_VERIFIER = NO;
-				GENERATE_INFOPLIST_FILE = YES;
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
-				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@loader_path/Frameworks",
-				);
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
-				MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
-				PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).CoderSDK";
-				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
-				SKIP_INSTALL = YES;
-				SWIFT_EMIT_LOC_STRINGS = YES;
-				SWIFT_INSTALL_OBJC_HEADER = NO;
-				SWIFT_VERSION = 5.0;
-				VERSIONING_SYSTEM = "apple-generic";
-				VERSION_INFO_PREFIX = "";
-			};
-			name = Release;
-		};
-		AA3B40AB2D2FC8560099996A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop.CoderSDKTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 5.0;
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop";
-			};
-			name = Debug;
-		};
-		AA3B40AC2D2FC8560099996A /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_TEAM = 4399GN35BJ;
-				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 14.0;
-				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.coder.Coder-Desktop.CoderSDKTests";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SWIFT_EMIT_LOC_STRINGS = NO;
-				SWIFT_VERSION = 5.0;
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		961678F72CFF100D00B2B6DF /* Build configuration list for PBXProject "Coder Desktop" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				961679212CFF100F00B2B6DF /* Debug */,
-				961679222CFF100F00B2B6DF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		961679232CFF100F00B2B6DF /* Build configuration list for PBXNativeTarget "Coder Desktop" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				961679242CFF100F00B2B6DF /* Debug */,
-				961679252CFF100F00B2B6DF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		961679262CFF100F00B2B6DF /* Build configuration list for PBXNativeTarget "Coder DesktopTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				961679272CFF100F00B2B6DF /* Debug */,
-				961679282CFF100F00B2B6DF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		961679292CFF100F00B2B6DF /* Build configuration list for PBXNativeTarget "Coder DesktopUITests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				9616792A2CFF100F00B2B6DF /* Debug */,
-				9616792B2CFF100F00B2B6DF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		9616793F2CFF117300B2B6DF /* Build configuration list for PBXNativeTarget "VPN" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				961679402CFF117300B2B6DF /* Debug */,
-				961679412CFF117300B2B6DF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		AA3B3DB72D2D23860099996A /* Build configuration list for PBXNativeTarget "VPNLib" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AA3B3DB82D2D23860099996A /* Debug */,
-				AA3B3DB92D2D23860099996A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		AA3B3DBA2D2D23860099996A /* Build configuration list for PBXNativeTarget "VPNLibTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AA3B3DBB2D2D23860099996A /* Debug */,
-				AA3B3DBC2D2D23860099996A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		AA3B40A72D2FC8560099996A /* Build configuration list for PBXNativeTarget "CoderSDK" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AA3B40A82D2FC8560099996A /* Debug */,
-				AA3B40A92D2FC8560099996A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		AA3B40AA2D2FC8560099996A /* Build configuration list for PBXNativeTarget "CoderSDKTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AA3B40AB2D2FC8560099996A /* Debug */,
-				AA3B40AC2D2FC8560099996A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
-		961679512CFF207900B2B6DF /* XCRemoteSwiftPackageReference "swift-protobuf" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/apple/swift-protobuf.git";
-			requirement = {
-				kind = exactVersion;
-				version = 1.28.2;
-			};
-		};
-		AA2C690D2D34F6920059AFAF /* XCRemoteSwiftPackageReference "LaunchAtLogin-modern" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/sindresorhus/LaunchAtLogin-modern";
-			requirement = {
-				kind = exactVersion;
-				version = 1.1.0;
-			};
-		};
-		AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/SimplyDanny/SwiftLintPlugins";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = 0.58.0;
-			};
-		};
-		AA3B3E8A2D2E0FE10099996A /* XCRemoteSwiftPackageReference "Mocker" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/WeTransfer/Mocker";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = 3.0.2;
-			};
-		};
-		AA8BC3372D00609700E1ABAA /* XCRemoteSwiftPackageReference "ViewInspector" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/nalexn/ViewInspector";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = 0.10.0;
-			};
-		};
-		AA8BC33D2D0061F200E1ABAA /* XCRemoteSwiftPackageReference "fluid-menu-bar-extra" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/lfroms/fluid-menu-bar-extra";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = 1.1.0;
-			};
-		};
-		AA8BC4CD2D00A4B700E1ABAA /* XCRemoteSwiftPackageReference "KeychainAccess" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess";
-			requirement = {
-				branch = e0c7eebc5a4465a3c4680764f26b7a61f567cdaf;
-				kind = branch;
-			};
-		};
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
-		AA2C690E2D34F6920059AFAF /* LaunchAtLogin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C690D2D34F6920059AFAF /* XCRemoteSwiftPackageReference "LaunchAtLogin-modern" */;
-			productName = LaunchAtLogin;
-		};
-		AA2C698B2D354A800059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C698D2D354A840059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C698F2D354A880059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C69912D354A8B0059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C69932D354A8E0059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C69952D354A910059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C69972D354A940059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA2C69992D354A970059AFAF /* SwiftLintBuildToolPlugin */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA2C698A2D354A600059AFAF /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */;
-			productName = "plugin:SwiftLintBuildToolPlugin";
-		};
-		AA3B3DBE2D2D23AB0099996A /* SwiftProtobuf */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 961679512CFF207900B2B6DF /* XCRemoteSwiftPackageReference "swift-protobuf" */;
-			productName = SwiftProtobuf;
-		};
-		AA3B3DC02D2D23AB0099996A /* SwiftProtobufPluginLibrary */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = 961679512CFF207900B2B6DF /* XCRemoteSwiftPackageReference "swift-protobuf" */;
-			productName = SwiftProtobufPluginLibrary;
-		};
-		AA3B3E8D2D2E0FF40099996A /* Mocker */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA3B3E8A2D2E0FE10099996A /* XCRemoteSwiftPackageReference "Mocker" */;
-			productName = Mocker;
-		};
-		AA3B40B52D2FD9DD0099996A /* Mocker */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA3B3E8A2D2E0FE10099996A /* XCRemoteSwiftPackageReference "Mocker" */;
-			productName = Mocker;
-		};
-		AA3B40BC2D2FDFBA0099996A /* Mocker */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA3B3E8A2D2E0FE10099996A /* XCRemoteSwiftPackageReference "Mocker" */;
-			productName = Mocker;
-		};
-		AA8BC3382D0060A900E1ABAA /* ViewInspector */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA8BC3372D00609700E1ABAA /* XCRemoteSwiftPackageReference "ViewInspector" */;
-			productName = ViewInspector;
-		};
-		AA8BC33E2D0061F200E1ABAA /* FluidMenuBarExtra */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA8BC33D2D0061F200E1ABAA /* XCRemoteSwiftPackageReference "fluid-menu-bar-extra" */;
-			productName = FluidMenuBarExtra;
-		};
-		AA8BC4CE2D00A4B700E1ABAA /* KeychainAccess */ = {
-			isa = XCSwiftPackageProductDependency;
-			package = AA8BC4CD2D00A4B700E1ABAA /* XCRemoteSwiftPackageReference "KeychainAccess" */;
-			productName = KeychainAccess;
-		};
-/* End XCSwiftPackageProductDependency section */
-	};
-	rootObject = 961678F42CFF100D00B2B6DF /* Project object */;
-}
diff --git a/Coder Desktop/Coder Desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Coder Desktop/Coder Desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a6..00000000
--- a/Coder Desktop/Coder Desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata	
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:">
-   </FileRef>
-</Workspace>
diff --git a/Coder Desktop/Coder Desktop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Coder Desktop/Coder Desktop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
deleted file mode 100644
index 37e6bc54..00000000
--- a/Coder Desktop/Coder Desktop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved	
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "originHash" : "c41f63aa01c78f450e2232efbefcd30874995ad120db77fa5942062d6f813891",
-  "pins" : [
-    {
-      "identity" : "fluid-menu-bar-extra",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/lfroms/fluid-menu-bar-extra",
-      "state" : {
-        "revision" : "e152a3a1a25aca24906217f8d4d63afbb08d7f97",
-        "version" : "1.1.0"
-      }
-    },
-    {
-      "identity" : "keychainaccess",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/kishikawakatsumi/KeychainAccess",
-      "state" : {
-        "revision" : "e0c7eebc5a4465a3c4680764f26b7a61f567cdaf"
-      }
-    },
-    {
-      "identity" : "launchatlogin-modern",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/sindresorhus/LaunchAtLogin-modern",
-      "state" : {
-        "revision" : "a04ec1c363be3627734f6dad757d82f5d4fa8fcc",
-        "version" : "1.1.0"
-      }
-    },
-    {
-      "identity" : "mocker",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/WeTransfer/Mocker",
-      "state" : {
-        "revision" : "95fa785c751f6bc40c49e112d433c3acf8417a97",
-        "version" : "3.0.2"
-      }
-    },
-    {
-      "identity" : "swift-protobuf",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/apple/swift-protobuf.git",
-      "state" : {
-        "revision" : "ebc7251dd5b37f627c93698e4374084d98409633",
-        "version" : "1.28.2"
-      }
-    },
-    {
-      "identity" : "swiftlintplugins",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/SimplyDanny/SwiftLintPlugins",
-      "state" : {
-        "revision" : "fac0c3d3ac69b15ea5382275dbbd5e583a2e05fa",
-        "version" : "0.58.0"
-      }
-    },
-    {
-      "identity" : "viewinspector",
-      "kind" : "remoteSourceControl",
-      "location" : "https://github.com/nalexn/ViewInspector",
-      "state" : {
-        "revision" : "788e7879d38a839c4e348ab0762dcc0364e646a2",
-        "version" : "0.10.1"
-      }
-    }
-  ],
-  "version" : 3
-}
diff --git a/Coder Desktop/Coder Desktop.xcodeproj/xcshareddata/xcschemes/Coder Desktop.xcscheme b/Coder Desktop/Coder Desktop.xcodeproj/xcshareddata/xcschemes/Coder Desktop.xcscheme
deleted file mode 100644
index c17080fc..00000000
--- a/Coder Desktop/Coder Desktop.xcodeproj/xcshareddata/xcschemes/Coder Desktop.xcscheme	
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1620"
-   version = "1.7">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES"
-      buildArchitectures = "Automatic">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "961678FB2CFF100D00B2B6DF"
-               BuildableName = "Coder Desktop.app"
-               BlueprintName = "Coder Desktop"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <TestPlans>
-         <TestPlanReference
-            reference = "container:Coder Desktop.xctestplan"
-            default = "YES">
-         </TestPlanReference>
-      </TestPlans>
-      <Testables>
-         <TestableReference
-            skipped = "NO"
-            parallelizable = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "9616790E2CFF100E00B2B6DF"
-               BuildableName = "Coder DesktopTests.xctest"
-               BlueprintName = "Coder DesktopTests"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO"
-            parallelizable = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "961679182CFF100E00B2B6DF"
-               BuildableName = "Coder DesktopUITests.xctest"
-               BlueprintName = "Coder DesktopUITests"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO"
-            parallelizable = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "AA3B3DA02D2D23860099996A"
-               BuildableName = "VPNLib.framework"
-               BlueprintName = "VPNLib"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO"
-            parallelizable = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "AA3B3DA72D2D23860099996A"
-               BuildableName = "VPNLibTests.xctest"
-               BlueprintName = "VPNLibTests"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO"
-            parallelizable = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "AA3B40972D2FC8560099996A"
-               BuildableName = "CoderSDKTests.xctest"
-               BlueprintName = "CoderSDKTests"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "961678FB2CFF100D00B2B6DF"
-            BuildableName = "Coder Desktop.app"
-            BlueprintName = "Coder Desktop"
-            ReferencedContainer = "container:Coder Desktop.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "961678FB2CFF100D00B2B6DF"
-            BuildableName = "Coder Desktop.app"
-            BlueprintName = "Coder Desktop"
-            ReferencedContainer = "container:Coder Desktop.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/Coder Desktop/Coder Desktop.xcodeproj/xcshareddata/xcschemes/VPN.xcscheme b/Coder Desktop/Coder Desktop.xcodeproj/xcshareddata/xcschemes/VPN.xcscheme
deleted file mode 100644
index 17d9d7a8..00000000
--- a/Coder Desktop/Coder Desktop.xcodeproj/xcshareddata/xcschemes/VPN.xcscheme	
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1620"
-   version = "1.7">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES"
-      buildArchitectures = "Automatic">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "9616792F2CFF117300B2B6DF"
-               BuildableName = "com.coder.Coder-Desktop.VPN.systemextension"
-               BlueprintName = "VPN"
-               ReferencedContainer = "container:Coder Desktop.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      shouldAutocreateTestPlan = "YES">
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "9616792F2CFF117300B2B6DF"
-            BuildableName = "com.coder.Coder-Desktop.VPN.systemextension"
-            BlueprintName = "VPN"
-            ReferencedContainer = "container:Coder Desktop.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/Coder Desktop/Coder Desktop/NetworkExtension.swift b/Coder Desktop/Coder Desktop/NetworkExtension.swift
index 745579ea..28aa78f1 100644
--- a/Coder Desktop/Coder Desktop/NetworkExtension.swift	
+++ b/Coder Desktop/Coder Desktop/NetworkExtension.swift	
@@ -10,13 +10,13 @@ enum NetworkExtensionState: Equatable {
     var description: String {
         switch self {
         case .unconfigured:
-            return "NetworkExtension not configured, try logging in again"
+            "NetworkExtension not configured, try logging in again"
         case .enabled:
-            return "NetworkExtension tunnel enabled"
+            "NetworkExtension tunnel enabled"
         case .disabled:
-            return "NetworkExtension tunnel disabled"
+            "NetworkExtension tunnel disabled"
         case let .failed(error):
-            return "NetworkExtension config failed: \(error)"
+            "NetworkExtension config failed: \(error)"
         }
     }
 }
diff --git a/Coder Desktop/Coder Desktop/Preview Content/PreviewSession.swift b/Coder Desktop/Coder Desktop/Preview Content/PreviewSession.swift
index a0651942..ff58e760 100644
--- a/Coder Desktop/Coder Desktop/Preview Content/PreviewSession.swift	
+++ b/Coder Desktop/Coder Desktop/Preview Content/PreviewSession.swift	
@@ -24,6 +24,6 @@ class PreviewSession: Session {
     }
 
     func tunnelProviderProtocol() -> NETunnelProviderProtocol? {
-        return nil
+        nil
     }
 }
diff --git a/Coder Desktop/Coder Desktop/State.swift b/Coder Desktop/Coder Desktop/State.swift
index 7a588080..01ef7c29 100644
--- a/Coder Desktop/Coder Desktop/State.swift	
+++ b/Coder Desktop/Coder Desktop/State.swift	
@@ -78,7 +78,7 @@ class SecureSession: ObservableObject, Session {
     }
 
     private func keychainSet(_ value: String?, for key: String) {
-        if let value = value {
+        if let value {
             try? keychain.set(value, key: key)
         } else {
             try? keychain.remove(key)
@@ -132,6 +132,6 @@ struct LiteralHeader: Hashable, Identifiable, Equatable, Codable {
 
 extension LiteralHeader {
     func toSDKHeader() -> HTTPHeader {
-        return .init(header: header, value: value)
+        .init(header: header, value: value)
     }
 }
diff --git a/Coder Desktop/Coder Desktop/SystemExtension.swift b/Coder Desktop/Coder Desktop/SystemExtension.swift
index bc81bd15..934db093 100644
--- a/Coder Desktop/Coder Desktop/SystemExtension.swift	
+++ b/Coder Desktop/Coder Desktop/SystemExtension.swift	
@@ -11,13 +11,13 @@ enum SystemExtensionState: Equatable, Sendable {
     var description: String {
         switch self {
         case .uninstalled:
-            return "VPN SystemExtension is waiting to be activated"
+            "VPN SystemExtension is waiting to be activated"
         case .needsUserApproval:
-            return "VPN SystemExtension needs user approval to activate"
+            "VPN SystemExtension needs user approval to activate"
         case .installed:
-            return "VPN SystemExtension is installed"
+            "VPN SystemExtension is installed"
         case let .failed(error):
-            return "VPN SystemExtension failed with error: \(error)"
+            "VPN SystemExtension failed with error: \(error)"
         }
     }
 }
diff --git a/Coder Desktop/Coder Desktop/VPNService.swift b/Coder Desktop/Coder Desktop/VPNService.swift
index 4510634f..46c3cabb 100644
--- a/Coder Desktop/Coder Desktop/VPNService.swift	
+++ b/Coder Desktop/Coder Desktop/VPNService.swift	
@@ -29,13 +29,13 @@ enum VPNServiceError: Error, Equatable {
     var description: String {
         switch self {
         case .longTestError:
-            return "This is a long error to test the UI with long errors"
+            "This is a long error to test the UI with long errors"
         case let .internalError(description):
-            return "Internal Error: \(description)"
+            "Internal Error: \(description)"
         case let .systemExtensionError(state):
-            return state.description
+            state.description
         case let .networkExtensionError(state):
-            return state.description
+            state.description
         }
     }
 }
diff --git a/Coder Desktop/Coder Desktop/Views/Agent.swift b/Coder Desktop/Coder Desktop/Views/Agent.swift
index da57cc5f..7b5bbc28 100644
--- a/Coder Desktop/Coder Desktop/Views/Agent.swift	
+++ b/Coder Desktop/Coder Desktop/Views/Agent.swift	
@@ -16,10 +16,10 @@ enum AgentStatus: Equatable {
 
     public var color: Color {
         switch self {
-        case .okay: return .green
-        case .warn: return .yellow
-        case .error: return .red
-        case .off: return .gray
+        case .okay: .green
+        case .warn: .yellow
+        case .error: .red
+        case .off: .gray
         }
     }
 }
@@ -41,7 +41,7 @@ struct AgentRowView: View {
 
     private var wsURL: URL {
         // TODO: CoderVPN currently only supports owned workspaces
-        return baseAccessURL.appending(path: "@me").appending(path: workspace.workspaceName)
+        baseAccessURL.appending(path: "@me").appending(path: workspace.workspaceName)
     }
 
     var body: some View {
diff --git a/Coder Desktop/Coder Desktop/Views/Agents.swift b/Coder Desktop/Coder Desktop/Views/Agents.swift
index 42f12c9e..35333c97 100644
--- a/Coder Desktop/Coder Desktop/Views/Agents.swift	
+++ b/Coder Desktop/Coder Desktop/Views/Agents.swift	
@@ -27,6 +27,6 @@ struct Agents<VPN: VPNService, S: Session>: View {
                     }.toggleStyle(.button).buttonStyle(.plain)
                 }
             }
-        }.onReceive(inspection.notice) { self.inspection.visit(self, $0) } // ViewInspector
+        }.onReceive(inspection.notice) { inspection.visit(self, $0) } // ViewInspector
     }
 }
diff --git a/Coder Desktop/Coder Desktop/Views/LoginForm.swift b/Coder Desktop/Coder Desktop/Views/LoginForm.swift
index 10fa6b0e..653e4930 100644
--- a/Coder Desktop/Coder Desktop/Views/LoginForm.swift	
+++ b/Coder Desktop/Coder Desktop/Views/LoginForm.swift	
@@ -55,7 +55,7 @@ struct LoginForm<S: Session>: View {
         }.disabled(loading)
         .frame(width: 550)
         .fixedSize()
-        .onReceive(inspection.notice) { self.inspection.visit(self, $0) } // ViewInspector
+        .onReceive(inspection.notice) { inspection.visit(self, $0) } // ViewInspector
     }
 
     func submit() async {
@@ -177,9 +177,9 @@ enum LoginError {
     var description: String {
         switch self {
         case .invalidURL:
-            return "Invalid URL"
+            "Invalid URL"
         case let .failedAuth(err):
-            return "Could not authenticate with Coder deployment:\n\(err.description)"
+            "Could not authenticate with Coder deployment:\n\(err.description)"
         }
     }
 }
diff --git a/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeaderModal.swift b/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeaderModal.swift
index 9e2ea2a7..bfb4a10c 100644
--- a/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeaderModal.swift	
+++ b/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeaderModal.swift	
@@ -26,8 +26,8 @@ struct LiteralHeaderModal: View {
             }.padding(20)
         }.onAppear {
             if let existingHeader {
-                self.header = existingHeader.header
-                self.value = existingHeader.value
+                header = existingHeader.header
+                value = existingHeader.value
             }
         }
     }
diff --git a/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeadersSection.swift b/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeadersSection.swift
index aa272034..9c032630 100644
--- a/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeadersSection.swift	
+++ b/Coder Desktop/Coder Desktop/Views/Settings/LiteralHeadersSection.swift	
@@ -66,6 +66,6 @@ struct LiteralHeadersSection<VPN: VPNService>: View {
         }.onTapGesture {
             selectedHeader = nil
         }.disabled(vpn.state != .disabled)
-        .onReceive(inspection.notice) { self.inspection.visit(self, $0) } // ViewInspector
+        .onReceive(inspection.notice) { inspection.visit(self, $0) } // ViewInspector
     }
 }
diff --git a/Coder Desktop/Coder Desktop/Views/VPNMenu.swift b/Coder Desktop/Coder Desktop/Views/VPNMenu.swift
index 5ba76e06..26266c8d 100644
--- a/Coder Desktop/Coder Desktop/Views/VPNMenu.swift	
+++ b/Coder Desktop/Coder Desktop/Views/VPNMenu.swift	
@@ -14,9 +14,9 @@ struct VPNMenu<VPN: VPNService, S: Session>: View {
             VStack(alignment: .leading, spacing: Theme.Size.trayPadding) {
                 HStack {
                     Toggle(isOn: Binding(
-                        get: { self.vpn.state == .connected || self.vpn.state == .connecting },
+                        get: { vpn.state == .connected || vpn.state == .connecting },
                         set: { isOn in Task {
-                            if isOn { await self.vpn.start() } else { await self.vpn.stop() }
+                            if isOn { await vpn.start() } else { await vpn.stop() }
                         }
                         }
                     )) {
@@ -78,11 +78,11 @@ struct VPNMenu<VPN: VPNService, S: Session>: View {
         }.padding(.bottom, Theme.Size.trayMargin)
             .environmentObject(vpn)
             .environmentObject(session)
-            .onReceive(inspection.notice) { self.inspection.visit(self, $0) } // ViewInspector
+            .onReceive(inspection.notice) { inspection.visit(self, $0) } // ViewInspector
     }
 
     private var vpnDisabled: Bool {
-        return !session.hasSession ||
+        !session.hasSession ||
             vpn.state == .connecting ||
             vpn.state == .disconnecting
     }
diff --git a/Coder Desktop/Coder DesktopTests/AgentsTests.swift b/Coder Desktop/Coder DesktopTests/AgentsTests.swift
index 300d3e8e..537bbfd2 100644
--- a/Coder Desktop/Coder DesktopTests/AgentsTests.swift	
+++ b/Coder Desktop/Coder DesktopTests/AgentsTests.swift	
@@ -19,7 +19,7 @@ struct AgentsTests {
     }
 
     private func createMockAgents(count: Int) -> [Agent] {
-        return (1 ... count).map {
+        (1 ... count).map {
             Agent(
                 id: UUID(),
                 name: "a\($0)",
diff --git a/Coder Desktop/Coder DesktopTests/Util.swift b/Coder Desktop/Coder DesktopTests/Util.swift
index 244513e9..2cf4d38e 100644
--- a/Coder Desktop/Coder DesktopTests/Util.swift	
+++ b/Coder Desktop/Coder DesktopTests/Util.swift	
@@ -46,7 +46,7 @@ class MockSession: Session {
     }
 
     func tunnelProviderProtocol() -> NETunnelProviderProtocol? {
-        return nil
+        nil
     }
 }
 
diff --git a/Coder Desktop/CoderSDK/Client.swift b/Coder Desktop/CoderSDK/Client.swift
index 59a17cba..601c577e 100644
--- a/Coder Desktop/CoderSDK/Client.swift	
+++ b/Coder Desktop/CoderSDK/Client.swift	
@@ -28,7 +28,7 @@ public struct Client {
         method: HTTPMethod,
         body: Data? = nil
     ) async throws(ClientError) -> HTTPResponse {
-        let url = self.url.appendingPathComponent(path)
+        let url = url.appendingPathComponent(path)
         var req = URLRequest(url: url)
         if let token { req.addValue(token, forHTTPHeaderField: Headers.sessionToken) }
         req.httpMethod = method.rawValue
@@ -49,10 +49,10 @@ public struct Client {
         return HTTPResponse(resp: httpResponse, data: data, req: req)
     }
 
-    func request<T: Encodable & Sendable>(
+    func request(
         _ path: String,
         method: HTTPMethod,
-        body: T
+        body: some Encodable & Sendable
     ) async throws(ClientError) -> HTTPResponse {
         let encodedBody: Data?
         do {
@@ -67,7 +67,7 @@ public struct Client {
         _ path: String,
         method: HTTPMethod
     ) async throws(ClientError) -> HTTPResponse {
-        return try await doRequest(path: path, method: method)
+        try await doRequest(path: path, method: method)
     }
 
     func responseAsError(_ resp: HTTPResponse) -> ClientError {
@@ -86,7 +86,7 @@ public struct Client {
     }
 }
 
-public struct APIError: Decodable {
+public struct APIError: Decodable, Sendable {
     let response: Response
     let statusCode: Int
     let method: String
@@ -105,13 +105,13 @@ public struct APIError: Decodable {
     }
 }
 
-public struct Response: Decodable {
+public struct Response: Decodable, Sendable {
     let message: String
     let detail: String?
     let validations: [FieldValidation]?
 }
 
-public struct FieldValidation: Decodable {
+public struct FieldValidation: Decodable, Sendable {
     let field: String
     let detail: String
 }
@@ -125,13 +125,13 @@ public enum ClientError: Error {
     public var description: String {
         switch self {
         case let .api(error):
-            return error.description
+            error.description
         case let .network(error):
-            return error.localizedDescription
+            error.localizedDescription
         case let .unexpectedResponse(data):
-            return "Unexpected or non HTTP response: \(data)"
+            "Unexpected or non HTTP response: \(data)"
         case let .encodeFailure(error):
-            return "Failed to encode body: \(error)"
+            "Failed to encode body: \(error)"
         }
     }
 }
diff --git a/Coder Desktop/CoderSDK/Deployment.swift b/Coder Desktop/CoderSDK/Deployment.swift
index ea1d23c6..8144c0aa 100644
--- a/Coder Desktop/CoderSDK/Deployment.swift	
+++ b/Coder Desktop/CoderSDK/Deployment.swift	
@@ -1,3 +1,5 @@
+import Foundation
+
 public extension Client {
     func buildInfo() async throws(ClientError) -> BuildInfoResponse {
         let res = try await request("/api/v2/buildinfo", method: .get)
@@ -25,7 +27,7 @@ public struct BuildInfoResponse: Encodable, Decodable, Equatable, Sendable {
 
     // `version` in the form `[0-9]+.[0-9]+.[0-9]+`
     public var semver: String? {
-        return try? NSRegularExpression(pattern: #"v(\d+\.\d+\.\d+)"#)
+        try? NSRegularExpression(pattern: #"v(\d+\.\d+\.\d+)"#)
             .firstMatch(in: version, range: NSRange(version.startIndex ..< version.endIndex, in: version))
             .flatMap { Range($0.range(at: 1), in: version).map { String(version[$0]) } }
     }
diff --git a/Coder Desktop/CoderSDK/HTTP.swift b/Coder Desktop/CoderSDK/HTTP.swift
index 94b8cde6..d10d469f 100644
--- a/Coder Desktop/CoderSDK/HTTP.swift	
+++ b/Coder Desktop/CoderSDK/HTTP.swift	
@@ -1,3 +1,5 @@
+import Foundation
+
 public struct HTTPResponse {
     let resp: HTTPURLResponse
     let data: Data
diff --git a/Coder Desktop/CoderSDKTests/CoderSDKTests.swift b/Coder Desktop/CoderSDKTests/CoderSDKTests.swift
index 33c61c48..69a46641 100644
--- a/Coder Desktop/CoderSDKTests/CoderSDKTests.swift	
+++ b/Coder Desktop/CoderSDKTests/CoderSDKTests.swift	
@@ -1,4 +1,5 @@
 @testable import CoderSDK
+import Foundation
 import Mocker
 import Testing
 
diff --git a/Coder Desktop/VPN/Manager.swift b/Coder Desktop/VPN/Manager.swift
index b441150f..3ca0004a 100644
--- a/Coder Desktop/VPN/Manager.swift	
+++ b/Coder Desktop/VPN/Manager.swift	
@@ -208,23 +208,23 @@ enum ManagerError: Error {
     var description: String {
         switch self {
         case let .download(err):
-            return "Download error: \(err)"
+            "Download error: \(err)"
         case let .tunnelSetup(err):
-            return "Tunnel setup error: \(err)"
+            "Tunnel setup error: \(err)"
         case let .handshake(err):
-            return "Handshake error: \(err)"
+            "Handshake error: \(err)"
         case let .validation(err):
-            return "Validation error: \(err)"
+            "Validation error: \(err)"
         case .incorrectResponse:
-            return "Received unexpected response over tunnel"
+            "Received unexpected response over tunnel"
         case let .failedRPC(err):
-            return "Failed rpc: \(err)"
+            "Failed rpc: \(err)"
         case let .serverInfo(msg):
-            return msg
+            msg
         case let .errorResponse(msg):
-            return msg
+            msg
         case .noTunnelFileDescriptor:
-            return "Could not find a tunnel file descriptor"
+            "Could not find a tunnel file descriptor"
         }
     }
 }
diff --git a/Coder Desktop/VPN/TunnelHandle.swift b/Coder Desktop/VPN/TunnelHandle.swift
index ea800020..720758ed 100644
--- a/Coder Desktop/VPN/TunnelHandle.swift	
+++ b/Coder Desktop/VPN/TunnelHandle.swift	
@@ -75,11 +75,11 @@ enum TunnelHandleError: Error {
 
     var description: String {
         switch self {
-        case let .pipe(err): return "pipe error: \(err)"
-        case let .dylib(d): return d
-        case let .symbol(symbol, message): return "\(symbol): \(message)"
-        case let .openTunnel(error): return "OpenTunnel: \(error.message)"
-        case let .close(errs): return "close tunnel: \(errs.map(\.localizedDescription).joined(separator: ", "))"
+        case let .pipe(err): "pipe error: \(err)"
+        case let .dylib(d): d
+        case let .symbol(symbol, message): "\(symbol): \(message)"
+        case let .openTunnel(error): "OpenTunnel: \(error.message)"
+        case let .close(errs): "close tunnel: \(errs.map(\.localizedDescription).joined(separator: ", "))"
         }
     }
 }
@@ -93,11 +93,11 @@ enum OpenTunnelError: Int32 {
 
     var message: String {
         switch self {
-        case .errDupReadFD: return "Failed to duplicate read file descriptor"
-        case .errDupWriteFD: return "Failed to duplicate write file descriptor"
-        case .errOpenPipe: return "Failed to open the pipe"
-        case .errNewTunnel: return "Failed to create a new tunnel"
-        case .unknown: return "Unknown error code"
+        case .errDupReadFD: "Failed to duplicate read file descriptor"
+        case .errDupWriteFD: "Failed to duplicate write file descriptor"
+        case .errOpenPipe: "Failed to open the pipe"
+        case .errNewTunnel: "Failed to create a new tunnel"
+        case .unknown: "Unknown error code"
         }
     }
 }
diff --git a/Coder Desktop/VPN/VPN.entitlements b/Coder Desktop/VPN/VPN.entitlements
index a515bd39..a5c12f45 100644
--- a/Coder Desktop/VPN/VPN.entitlements	
+++ b/Coder Desktop/VPN/VPN.entitlements	
@@ -14,5 +14,7 @@
 	</array>
 	<key>com.apple.security.network.client</key>
 	<true/>
+	<key>com.apple.security.network.server</key>
+	<true/>
 </dict>
 </plist>
diff --git a/Coder Desktop/VPNLib/Download.swift b/Coder Desktop/VPNLib/Download.swift
index 75ff91bd..35bfa2de 100644
--- a/Coder Desktop/VPNLib/Download.swift	
+++ b/Coder Desktop/VPNLib/Download.swift	
@@ -14,21 +14,21 @@ public enum ValidationError: Error {
     public var errorDescription: String? {
         switch self {
         case .fileNotFound:
-            return "The file does not exist."
+            "The file does not exist."
         case .unableToCreateStaticCode:
-            return "Unable to create a static code object."
+            "Unable to create a static code object."
         case .invalidSignature:
-            return "The file's signature is invalid."
+            "The file's signature is invalid."
         case .unableToRetrieveInfo:
-            return "Unable to retrieve signing information."
+            "Unable to retrieve signing information."
         case let .invalidIdentifier(identifier):
-            return "Invalid identifier: \(identifier ?? "unknown")."
+            "Invalid identifier: \(identifier ?? "unknown")."
         case let .invalidVersion(version):
-            return "Invalid runtime version: \(version ?? "unknown")."
+            "Invalid runtime version: \(version ?? "unknown")."
         case let .invalidTeamIdentifier(identifier):
-            return "Invalid team identifier: \(identifier ?? "unknown")."
+            "Invalid team identifier: \(identifier ?? "unknown")."
         case .missingInfoPList:
-            return "Info.plist is not embedded within the dylib."
+            "Info.plist is not embedded within the dylib."
         }
     }
 }
@@ -159,13 +159,13 @@ public enum DownloadError: Error {
     var localizedDescription: String {
         switch self {
         case let .unexpectedStatusCode(code):
-            return "Unexpected HTTP status code: \(code)"
+            "Unexpected HTTP status code: \(code)"
         case let .networkError(error):
-            return "Network error: \(error.localizedDescription)"
+            "Network error: \(error.localizedDescription)"
         case let .fileOpError(error):
-            return "File operation error: \(error.localizedDescription)"
+            "File operation error: \(error.localizedDescription)"
         case .invalidResponse:
-            return "Received non-HTTP response"
+            "Received non-HTTP response"
         }
     }
 }
diff --git a/Coder Desktop/VPNLib/Speaker.swift b/Coder Desktop/VPNLib/Speaker.swift
index 3a7d6903..384a8a73 100644
--- a/Coder Desktop/VPNLib/Speaker.swift	
+++ b/Coder Desktop/VPNLib/Speaker.swift	
@@ -95,7 +95,7 @@ public actor Speaker<SendMsg: RPCMessage & Message, RecvMsg: RPCMessage & Messag
 
     /// Send a unary RPC message and handle the response
     public func unaryRPC(_ req: SendMsg) async throws -> RecvMsg {
-        return try await withCheckedThrowingContinuation { continuation in
+        try await withCheckedThrowingContinuation { continuation in
             Task { [sender, secretary, logger] in
                 let msgID = await secretary.record(continuation: continuation)
                 var req = req
@@ -199,7 +199,7 @@ actor Handshaker {
             }
         }
 
-        let vStr = versions.map { $0.description }.joined(separator: ",")
+        let vStr = versions.map(\.description).joined(separator: ",")
         let ours = String(format: "\(headerPreamble) \(role) \(vStr)\n")
         do {
             try writeFD.write(contentsOf: ours.data(using: .utf8)!)
diff --git a/Coder Desktop/VPNLibTests/ProtoTests.swift b/Coder Desktop/VPNLibTests/ProtoTests.swift
index 6a1bbd9a..6a837940 100644
--- a/Coder Desktop/VPNLibTests/ProtoTests.swift	
+++ b/Coder Desktop/VPNLibTests/ProtoTests.swift	
@@ -104,7 +104,7 @@ struct HandshakerTests {
         let result: ProtoVersion
 
         var description: String {
-            return "\(tun) vs \(mgr) -> \(result)"
+            "\(tun) vs \(mgr) -> \(result)"
         }
     }
 
diff --git a/Coder Desktop/project.yml b/Coder Desktop/project.yml
new file mode 100644
index 00000000..67bba409
--- /dev/null
+++ b/Coder Desktop/project.yml	
@@ -0,0 +1,296 @@
+name: "Coder Desktop"
+options:
+  bundleIdPrefix: com.coder
+  deploymentTarget:
+    macOS: "14.6"
+  xcodeVersion: "1600"
+  minimumXcodeGenVersion: "2.42.0"
+
+settings:
+  base:
+    MARKETING_VERSION: "1.0" # Sets the version number.
+    CURRENT_PROJECT_VERSION: "1" # Sets the build number.
+
+    ALWAYS_SEARCH_USER_PATHS: NO
+    ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS: YES
+    COPY_PHASE_STRIP: NO
+    DEAD_CODE_STRIPPING: YES
+    DEVELOPMENT_TEAM: "4399GN35BJ"
+    GENERATE_INFOPLIST_FILE: YES
+    PRODUCT_NAME: "$(TARGET_NAME)"
+    SWIFT_VERSION: ${SWIFT_VERSION}
+    ENABLE_USER_SCRIPT_SANDBOXING: YES
+    LD_RUNPATH_SEARCH_PATHS:
+      - "$(inherited)"
+      - "@executable_path/../Frameworks"
+      - "@loader_path/Frameworks"
+    GCC_C_LANGUAGE_STANDARD: gnu17
+    CLANG_CXX_LANGUAGE_STANDARD: "gnu++20"
+    CLANG_ENABLE_MODULES: YES
+    CLANG_ENABLE_OBJC_ARC: YES
+    CLANG_ENABLE_OBJC_WEAK: YES
+    ENABLE_STRICT_OBJC_MSGSEND: YES
+    CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING: YES
+    CLANG_WARN_BOOL_CONVERSION: YES
+    CLANG_WARN_COMMA: YES
+    CLANG_WARN_CONSTANT_CONVERSION: YES
+    CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS: YES
+    CLANG_WARN_DIRECT_OBJC_ISA_USAGE: YES_ERROR
+    CLANG_WARN_DOCUMENTATION_COMMENTS: YES
+    CLANG_WARN_EMPTY_BODY: YES
+    CLANG_WARN_ENUM_CONVERSION: YES
+    CLANG_WARN_INFINITE_RECURSION: YES
+    CLANG_WARN_INT_CONVERSION: YES
+    CLANG_WARN_NON_LITERAL_NULL_CONVERSION: YES
+    CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF: YES
+    CLANG_WARN_OBJC_LITERAL_CONVERSION: YES
+    CLANG_WARN_OBJC_ROOT_CLASS: YES_ERROR
+    CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER: YES
+    CLANG_WARN_RANGE_LOOP_ANALYSIS: YES
+    CLANG_WARN_STRICT_PROTOTYPES: YES
+    CLANG_WARN_SUSPICIOUS_MOVE: YES
+    CLANG_WARN_UNGUARDED_AVAILABILITY: YES_AGGRESSIVE
+    CLANG_WARN_UNREACHABLE_CODE: YES
+    CLANG_WARN__DUPLICATE_METHOD_MATCH: YES
+    GCC_WARN_64_TO_32_BIT_CONVERSION: YES
+    GCC_WARN_ABOUT_RETURN_TYPE: YES_ERROR
+    GCC_WARN_UNDECLARED_SELECTOR: YES
+    GCC_WARN_UNINITIALIZED_AUTOS: YES_AGGRESSIVE
+    GCC_WARN_UNUSED_FUNCTION: YES
+    GCC_WARN_UNUSED_VARIABLE: YES
+    GCC_NO_COMMON_BLOCKS: YES
+    CLANG_ANALYZER_NONNULL: YES
+    CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION: YES_AGGRESSIVE
+    MTL_FAST_MATH: YES
+    LOCALIZATION_PREFERS_STRING_CATALOGS: YES
+  configs:
+    debug:
+      GCC_PREPROCESSOR_DEFINITIONS:
+        - "DEBUG=1"
+        - "$(inherited)"
+      ONLY_ACTIVE_ARCH: YES
+      SWIFT_ACTIVE_COMPILATION_CONDITIONS: "DEBUG $(inherited)"
+      SWIFT_OPTIMIZATION_LEVEL: "-Onone"
+      GCC_OPTIMIZATION_LEVEL: 0
+      DEBUG_INFORMATION_FORMAT: dwarf
+      ENABLE_TESTABILITY: YES
+      MTL_ENABLE_DEBUG_INFO: INCLUDE_SOURCE
+    release:
+      SWIFT_COMPILATION_MODE: wholemodule
+      DEBUG_INFORMATION_FORMAT: "dwarf-with-dsym"
+      ENABLE_NS_ASSERTIONS: NO
+      MTL_ENABLE_DEBUG_INFO: NO
+
+packages:
+  ViewInspector:
+    url: https://github.com/nalexn/ViewInspector
+    from: 0.10.0
+  SwiftLintPlugins:
+    url: https://github.com/SimplyDanny/SwiftLintPlugins
+    from: 0.57.1
+  FluidMenuBarExtra:
+    url: https://github.com/lfroms/fluid-menu-bar-extra
+    from: 1.1.0
+  KeychainAccess:
+    url: https://github.com/kishikawakatsumi/KeychainAccess
+    branch: e0c7eebc5a4465a3c4680764f26b7a61f567cdaf
+  SwiftProtobuf:
+    url: https://github.com/apple/swift-protobuf.git
+    exactVersion: 1.28.2
+  Mocker:
+    url: https://github.com/WeTransfer/Mocker
+    from: 3.0.2
+  LaunchAtLogin:
+    url: https://github.com/sindresorhus/LaunchAtLogin-modern
+    from: 1.1.0
+
+targets:
+  Coder Desktop:
+    type: application
+    platform: macOS
+    sources:
+      - path: Coder Desktop
+    entitlements:
+      path: Coder Desktop/Coder_Desktop.entitlements
+      properties:
+        com.apple.developer.networking.networkextension:
+          - packet-tunnel-provider
+        com.apple.developer.system-extension.install: true
+        com.apple.security.app-sandbox: true
+        com.apple.security.files.user-selected.read-only: true
+        com.apple.security.network.client: true
+    settings:
+      base:
+        ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon # Sets the app icon to "AppIcon".
+        ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
+        CODE_SIGN_IDENTITY: "Apple Development"
+        CODE_SIGN_STYLE: Automatic
+        COMBINE_HIDPI_IMAGES: YES
+        DEVELOPMENT_ASSET_PATHS: '"Coder Desktop/Preview Content"' # Adds development assets.
+        ENABLE_HARDENED_RUNTIME: YES
+        ENABLE_PREVIEWS: YES
+        INFOPLIST_KEY_LSUIElement: YES
+        INFOPLIST_KEY_NSHumanReadableCopyright: ""
+        SWIFT_EMIT_LOC_STRINGS: YES
+        PRODUCT_BUNDLE_IDENTIFIER: "com.coder.Coder-Desktop"
+
+        # (ThomasK33): Install the application into the /Applications folder
+        # so that macOS stops complaining about the app being run from an
+        # untrusted folder.
+        DEPLOYMENT_LOCATION: YES
+        DSTROOT: $(LOCAL_APPS_DIR)/Coder
+        INSTALL_PATH: /
+        SKIP_INSTALL: NO
+    dependencies:
+      - target: CoderSDK
+        embed: true
+      - target: VPN
+        embed: without-signing # Embed without signing.
+      - package: FluidMenuBarExtra
+      - package: KeychainAccess
+      - package: LaunchAtLogin
+    scheme:
+      testPlans:
+        - path: Coder Desktop.xctestplan
+      testTargets:
+        - Coder DesktopTests
+        - Coder DesktopUITests
+    buildToolPlugins:
+      - plugin: SwiftLintBuildToolPlugin
+        package: SwiftLintPlugins
+
+  Coder DesktopTests:
+    type: bundle.unit-test
+    platform: macOS
+    sources:
+      - path: Coder DesktopTests
+    settings:
+      base:
+        BUNDLE_LOADER: "$(TEST_HOST)"
+        TEST_HOST: "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop"
+        PRODUCT_BUNDLE_IDENTIFIER: "com.coder.Coder-DesktopTests"
+    dependencies:
+      - target: "Coder Desktop"
+      - target: CoderSDK
+        embed: false # Do not embed the framework.
+      - package: ViewInspector
+      - package: Mocker
+
+  Coder DesktopUITests:
+    type: bundle.ui-testing
+    platform: macOS
+    sources:
+      - path: Coder DesktopUITests
+    settings:
+      base:
+        PRODUCT_BUNDLE_IDENTIFIER: "com.coder.Coder-DesktopUITests"
+    dependencies:
+      - target: Coder Desktop
+
+  VPN:
+    type: system-extension
+    platform: macOS
+    sources:
+      - path: VPN
+    entitlements:
+      path: VPN/VPN.entitlements
+      properties:
+        com.apple.developer.networking.networkextension:
+          - packet-tunnel-provider
+        com.apple.security.app-sandbox: true
+        com.apple.security.application-groups:
+          - $(TeamIdentifierPrefix)com.coder.Coder-Desktop
+        com.apple.security.network.client: true
+        com.apple.security.network.server: true
+    settings:
+      base:
+        ENABLE_HARDENED_RUNTIME: YES
+        INFOPLIST_FILE: VPN/Info.plist
+        PRODUCT_BUNDLE_IDENTIFIER: "com.coder.Coder-Desktop.VPN"
+        PRODUCT_MODULE_NAME: "$(PRODUCT_NAME:c99extidentifier)"
+        PRODUCT_NAME: "$(PRODUCT_BUNDLE_IDENTIFIER)"
+        SWIFT_EMIT_LOC_STRINGS: YES
+        SWIFT_OBJC_BRIDGING_HEADER: "VPN/com_coder_Coder_Desktop_VPN-Bridging-Header.h"
+    dependencies:
+      - target: VPNLib
+        embed: true
+      - target: CoderSDK
+        embed: true
+      - sdk: NetworkExtension.framework
+
+  VPNLib:
+    type: framework
+    platform: macOS
+    sources:
+      - path: VPNLib
+    settings:
+      base:
+        PRODUCT_NAME: "$(TARGET_NAME:c99extidentifier)"
+        SWIFT_EMIT_LOC_STRINGS: YES
+        PRODUCT_BUNDLE_IDENTIFIER: "com.coder.Coder-Desktop.VPNLib"
+        DYLIB_COMPATIBILITY_VERSION: 1
+        DYLIB_CURRENT_VERSION: 1
+        DYLIB_INSTALL_NAME_BASE: "@rpath"
+        CODE_SIGN_IDENTITY: "Apple Development"
+        CODE_SIGN_STYLE: Automatic
+        LD_RUNPATH_SEARCH_PATHS:
+          - "@executable_path/../Frameworks"
+          - "@loader_path/Frameworks"
+    scheme:
+      testTargets:
+        - VPNLibTests
+    dependencies:
+      - package: SwiftProtobuf
+      - package: SwiftProtobuf
+        product: SwiftProtobufPluginLibrary
+      - target: CoderSDK
+        embed: false
+
+  VPNLibTests:
+    type: bundle.unit-test
+    platform: macOS
+    sources:
+      - path: VPNLibTests
+    settings:
+      base:
+        TEST_HOST: "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop"
+        PRODUCT_BUNDLE_IDENTIFIER: "com.coder.Coder-Desktop.VPNLibTests"
+    dependencies:
+      - target: Coder Desktop
+      - target: VPNLib
+        embed: false
+      - package: Mocker
+
+  CoderSDK:
+    type: framework
+    platform: macOS
+    sources:
+      - path: CoderSDK
+    settings:
+      base:
+        INFOPLIST_KEY_NSHumanReadableCopyright: ""
+        PRODUCT_NAME: "$(TARGET_NAME:c99extidentifier)"
+        SWIFT_EMIT_LOC_STRINGS: YES
+        GENERATE_INFOPLIST_FILE: YES
+        DYLIB_COMPATIBILITY_VERSION: 1
+        DYLIB_CURRENT_VERSION: 1
+        DYLIB_INSTALL_NAME_BASE: "@rpath"
+    scheme:
+      testTargets:
+        - CoderSDKTests
+    dependencies: []
+
+  CoderSDKTests:
+    type: bundle.unit-test
+    platform: macOS
+    sources:
+      - path: CoderSDKTests
+    dependencies:
+      - target: "Coder Desktop"
+      - target: CoderSDK
+        embed: false # Do not embed the framework.
+      - package: Mocker
+    settings:
+      base:
+        TEST_HOST: "$(BUILT_PRODUCTS_DIR)/Coder Desktop.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Coder Desktop"
+        PRODUCT_BUNDLE_IDENTIFIER: com.coder.Coder-Desktop.CoderSDKTests
diff --git a/Makefile b/Makefile
index a428f067..e66eb59d 100644
--- a/Makefile
+++ b/Makefile
@@ -6,31 +6,61 @@ LINTFLAGS :=
 FMTFLAGS :=
 endif
 
-PROJECT := "Coder Desktop/Coder Desktop.xcodeproj"
-SCHEME := "Coder Desktop"
+PROJECT := Coder\ Desktop
+XCPROJECT := Coder\ Desktop/Coder\ Desktop.xcodeproj
+SCHEME := Coder\ Desktop
+SWIFT_VERSION := 6.0
 
-fmt:
+.PHONY: setup
+setup: \
+	$(XCPROJECT) \
+	$(PROJECT)/VPNLib/vpn.pb.swift
+
+$(XCPROJECT): $(PROJECT)/project.yml
+	cd $(PROJECT); \
+		SWIFT_VERSION=$(SWIFT_VERSION) xcodegen
+
+$(PROJECT)/VPNLib/vpn.pb.swift: $(PROJECT)/VPNLib/vpn.proto
+	protoc --swift_opt=Visibility=public --swift_out=. 'Coder Desktop/VPNLib/vpn.proto'
+
+.PHONY: fmt
+fmt: ## Run Swift file formatter
 	swiftformat \
 		--exclude '**.pb.swift' \
+		--swiftversion $(SWIFT_VERSION) \
 		$(FMTFLAGS) .
 
-test:
+.PHONY: test
+test: $(XCPROJECT) ## Run all tests
 	set -o pipefail && xcodebuild test \
-		-project $(PROJECT) \
+		-project $(XCPROJECT) \
 		-scheme $(SCHEME) \
 		-testPlan $(SCHEME) \
 		-skipPackagePluginValidation \
 		CODE_SIGNING_REQUIRED=NO \
 		CODE_SIGNING_ALLOWED=NO | xcbeautify
 
-lint:
+.PHONY: lint
+lint: ## Lint swift files
 	swiftlint \
 		--strict \
 		--quiet $(LINTFLAGS)
 
-clean:
+.PHONY: clean
+clean: ## Clean Xcode project
 	xcodebuild clean \
-		-project $(PROJECT)
+		-project $(XCPROJECT)
+	rm -rf $(XCPROJECT)
 
-proto:
-	protoc --swift_opt=Visibility=public --swift_out=. 'Coder Desktop/VPNLib/vpn.proto'
+.PHONY: proto
+proto: $(PROJECT)/VPNLib/vpn.pb.swift ## Generate Swift files from protobufs
+
+.PHONY: help
+help: ## Show this help
+	@echo "Specify a command. The choices are:"
+	@grep -hE '^[0-9a-zA-Z_-]+:.*?## .*$$' ${MAKEFILE_LIST} | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[0;36m%-20s\033[m %s\n", $$1, $$2}'
+	@echo ""
+
+.PHONY: watch-gen
+watch-gen: ## Generate Xcode project file and watch for changes
+	watchexec -w 'Coder Desktop/project.yml' make $(XCPROJECT)
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 00000000..5304bdf4
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,61 @@
+{
+  "nodes": {
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1731533236,
+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1737885589,
+        "narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nixos",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-utils": "flake-utils",
+        "nixpkgs": "nixpkgs"
+      }
+    },
+    "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 00000000..a83e4b31
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,49 @@
+{
+  description = "Coder Desktop macOS";
+
+  inputs = {
+    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+    flake-utils.url = "github:numtide/flake-utils";
+  };
+
+  outputs =
+    {
+      self,
+      nixpkgs,
+      flake-utils,
+    }:
+    flake-utils.lib.eachSystem
+      (with flake-utils.lib.system; [
+        aarch64-darwin
+        x86_64-darwin
+      ])
+      (
+        system:
+        let
+          pkgs = import nixpkgs {
+            inherit system;
+          };
+
+          formatter = pkgs.nixfmt-rfc-style;
+        in
+        {
+          inherit formatter;
+
+          devShells.default = pkgs.mkShellNoCC {
+            buildInputs = with pkgs; [
+              apple-sdk_15
+              clang
+              formatter
+              gnumake
+              protobuf_28
+              protoc-gen-swift
+              swiftformat
+              swiftlint
+              watchexec
+              xcodegen
+              xcbeautify
+            ];
+          };
+        }
+      );
+}