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 = ""; - }; - 961679122CFF100E00B2B6DF /* Coder DesktopTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = "Coder DesktopTests"; - sourceTree = ""; - }; - 9616791C2CFF100E00B2B6DF /* Coder DesktopUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = "Coder DesktopUITests"; - sourceTree = ""; - }; - AA3B3DA22D2D23860099996A /* VPNLib */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - AA3B3DB62D2D23860099996A /* Exceptions for "VPNLib" folder in "VPNLib" target */, - ); - path = VPNLib; - sourceTree = ""; - }; - AA3B3DAE2D2D23860099996A /* VPNLibTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = VPNLibTests; - sourceTree = ""; - }; - AA3B40922D2FC8560099996A /* CoderSDK */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - AA3B40A62D2FC8560099996A /* Exceptions for "CoderSDK" folder in "CoderSDK" target */, - ); - path = CoderSDK; - sourceTree = ""; - }; - AA3B409E2D2FC8560099996A /* CoderSDKTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = CoderSDKTests; - sourceTree = ""; - }; - AA3C69AD2D2D143400A45481 /* VPN */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - AA3C69C12D2D15D200A45481 /* Exceptions for "VPN" folder in "VPN" target */, - ); - path = VPN; - sourceTree = ""; - }; -/* 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 = ""; - }; - 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 = ""; - }; - 961679312CFF117300B2B6DF /* Frameworks */ = { - isa = PBXGroup; - children = ( - 961679322CFF117300B2B6DF /* NetworkExtension.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* 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 @@ - - - - - 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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - 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: 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: 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: 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: 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: 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( + 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 @@ com.apple.security.network.client + com.apple.security.network.server + 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 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 + ]; + }; + } + ); +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy