From 92062889d76338a2b51cc640a69339cbe51acd65 Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Fri, 17 Nov 2023 18:02:03 -0500
Subject: [PATCH 1/9] Update target to iOS 12

---
 src/cordova/apple/README.md                               | 2 +-
 .../apple/xcode/ios/Outline.xcodeproj/project.pbxproj     | 8 +++-----
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/cordova/apple/README.md b/src/cordova/apple/README.md
index a0fd2353fd9..9c947a5a6f4 100644
--- a/src/cordova/apple/README.md
+++ b/src/cordova/apple/README.md
@@ -7,7 +7,7 @@ This document describes how to develop and debug for macOS (formerly known as OS
 You will need:
 
 - An Apple Developer Account. You will need to be invited to your developer team as well.
-- XCode 13.2+ ([download](https://developer.apple.com/xcode/))
+- XCode 15.0+ ([download](https://developer.apple.com/xcode/))
 - XCode command line tools: `xcode-select --install`
 
 > NOTE: Should you encounter issues with your build, there may be apple-specific dependencies that are out of date. Run `npm run reset` and try again!
diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj b/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
index c4d27dcb8c7..394c0a02007 100755
--- a/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
+++ b/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 52;
+	objectVersion = 54;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -669,7 +669,6 @@
 				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = "";
 				INFOPLIST_FILE = "Outline/Outline-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
 				ONLY_ACTIVE_ARCH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client;
@@ -716,7 +715,6 @@
 				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = "";
 				INFOPLIST_FILE = "Outline/Outline-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
 				ONLY_ACTIVE_ARCH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client;
@@ -1081,7 +1079,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MACOSX_DEPLOYMENT_TARGET = 10.15;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -1124,7 +1122,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MACOSX_DEPLOYMENT_TARGET = 10.15;
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = NO;

From b76c86dd3ab4b8c22e0ccf1a9c558c0594287dc8 Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Tue, 21 Nov 2023 17:48:58 -0500
Subject: [PATCH 2/9] Move VPN Extension to subproject

---
 .../OutlineLib.xcodeproj/project.pbxproj      | 455 ++++++++++++++++++
 .../apple/OutlineLib/VpnExtension/Info.plist  |  29 ++
 .../VpnExtension/VpnExtension.entitlements    |  20 +
 .../xcshareddata/swiftpm/Package.resolved     |   4 +-
 .../ios/Outline.xcodeproj/project.pbxproj     | 235 ++-------
 5 files changed, 547 insertions(+), 196 deletions(-)
 create mode 100644 src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
 create mode 100644 src/cordova/apple/OutlineLib/VpnExtension/Info.plist
 create mode 100644 src/cordova/apple/OutlineLib/VpnExtension/VpnExtension.entitlements

diff --git a/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj b/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
new file mode 100644
index 00000000000..cced99be5f7
--- /dev/null
+++ b/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
@@ -0,0 +1,455 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 56;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		522C98BC2B0D67AF00E6E4A9 /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 522C98BB2B0D67AF00E6E4A9 /* PacketTunnelProvider */; };
+		52334EAF2B0D58AD00817E56 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		522C98B62B0D673200E6E4A9 /* OutlineAppleLib */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = OutlineAppleLib; path = ../OutlineAppleLib; sourceTree = "<group>"; };
+		52334EAC2B0D58AD00817E56 /* VpnExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VpnExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+		52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
+		52334EB32B0D58AD00817E56 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		52334EB42B0D58AD00817E56 /* VpnExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VpnExtension.entitlements; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		52334EA92B0D58AD00817E56 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				52334EAF2B0D58AD00817E56 /* NetworkExtension.framework in Frameworks */,
+				522C98BC2B0D67AF00E6E4A9 /* PacketTunnelProvider in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		52334DE02B0D56D600817E56 = {
+			isa = PBXGroup;
+			children = (
+				522C98B62B0D673200E6E4A9 /* OutlineAppleLib */,
+				52334EB02B0D58AD00817E56 /* VpnExtension */,
+				52334EAD2B0D58AD00817E56 /* Frameworks */,
+				52334DEB2B0D56D600817E56 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		52334DEB2B0D56D600817E56 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				52334EAC2B0D58AD00817E56 /* VpnExtension.appex */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		52334EAD2B0D58AD00817E56 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		52334EB02B0D58AD00817E56 /* VpnExtension */ = {
+			isa = PBXGroup;
+			children = (
+				52334EB32B0D58AD00817E56 /* Info.plist */,
+				52334EB42B0D58AD00817E56 /* VpnExtension.entitlements */,
+			);
+			path = VpnExtension;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		52334EAB2B0D58AD00817E56 /* VpnExtension */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 52334EB52B0D58AD00817E56 /* Build configuration list for PBXNativeTarget "VpnExtension" */;
+			buildPhases = (
+				52334EA82B0D58AD00817E56 /* Sources */,
+				52334EA92B0D58AD00817E56 /* Frameworks */,
+				52334EAA2B0D58AD00817E56 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = VpnExtension;
+			packageProductDependencies = (
+				522C98BB2B0D67AF00E6E4A9 /* PacketTunnelProvider */,
+			);
+			productName = VpnExtension;
+			productReference = 52334EAC2B0D58AD00817E56 /* VpnExtension.appex */;
+			productType = "com.apple.product-type.app-extension";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		52334DE12B0D56D600817E56 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				BuildIndependentTargetsInParallel = 1;
+				KnownAssetTags = (
+					New,
+				);
+				LastSwiftUpdateCheck = 1500;
+				LastUpgradeCheck = 1500;
+				TargetAttributes = {
+					52334EAB2B0D58AD00817E56 = {
+						CreatedOnToolsVersion = 15.0.1;
+					};
+				};
+			};
+			buildConfigurationList = 52334DE42B0D56D600817E56 /* Build configuration list for PBXProject "OutlineLib" */;
+			compatibilityVersion = "Xcode 14.0";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+				de,
+				ur,
+				he,
+				ar,
+				el,
+				"zh-Hans",
+				ja,
+				fa,
+				mr,
+				mk,
+				sq,
+				uk,
+				"en-GB",
+				am,
+				es,
+				sw,
+				is,
+				sl,
+				da,
+				"es-419",
+				et,
+				it,
+				bg,
+				sk,
+				"sr-Latn",
+				kk,
+				sr,
+				ms,
+				si,
+				ta,
+				ne,
+				sv,
+				cs,
+				km,
+				ko,
+				fil,
+				hy,
+				"zh-Hant",
+				mn,
+				my,
+				no,
+				nb,
+				hu,
+				ka,
+				tr,
+				pl,
+				"pt-BR",
+				vi,
+				lv,
+				lo,
+				lt,
+				ru,
+				af,
+				fr,
+				fi,
+				id,
+				nl,
+				th,
+				az,
+				bn,
+				"pt-PT",
+				ro,
+				bs,
+				hr,
+				hi,
+				ca,
+			);
+			mainGroup = 52334DE02B0D56D600817E56;
+			packageReferences = (
+				52334EB92B0D59FA00817E56 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */,
+				52334EFA2B0D619D00817E56 /* XCRemoteSwiftPackageReference "sentry-cocoa" */,
+			);
+			productRefGroup = 52334DEB2B0D56D600817E56 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				52334EAB2B0D58AD00817E56 /* VpnExtension */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		52334EAA2B0D58AD00817E56 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		52334EA82B0D58AD00817E56 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		52334DFC2B0D56D600817E56 /* 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;
+				CURRENT_PROJECT_VERSION = 1;
+				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;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.15;
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Debug;
+		};
+		52334DFD2B0D56D600817E56 /* 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;
+				CURRENT_PROJECT_VERSION = 1;
+				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;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.15;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				MTL_FAST_MATH = YES;
+				SWIFT_COMPILATION_MODE = wholemodule;
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Release;
+		};
+		52334EB62B0D58AD00817E56 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_ENTITLEMENTS = VpnExtension/VpnExtension.entitlements;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_FILE = VpnExtension/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = VpnExtension;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@executable_path/../../Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client.VpnExtension;
+				"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.outline.macos.client.VpnExtension;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = YES;
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		52334EB72B0D58AD00817E56 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_ENTITLEMENTS = VpnExtension/VpnExtension.entitlements;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_FILE = VpnExtension/Info.plist;
+				INFOPLIST_KEY_CFBundleDisplayName = VpnExtension;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@executable_path/../../Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client.VpnExtension;
+				"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.outline.macos.client.VpnExtension;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = YES;
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		52334DE42B0D56D600817E56 /* Build configuration list for PBXProject "OutlineLib" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				52334DFC2B0D56D600817E56 /* Debug */,
+				52334DFD2B0D56D600817E56 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		52334EB52B0D58AD00817E56 /* Build configuration list for PBXNativeTarget "VpnExtension" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				52334EB62B0D58AD00817E56 /* Debug */,
+				52334EB72B0D58AD00817E56 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+
+/* Begin XCRemoteSwiftPackageReference section */
+		52334EB92B0D59FA00817E56 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/CocoaLumberjack/CocoaLumberjack";
+			requirement = {
+				kind = upToNextMajorVersion;
+				minimumVersion = 3.8.2;
+			};
+		};
+		52334EFA2B0D619D00817E56 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/getsentry/sentry-cocoa";
+			requirement = {
+				kind = upToNextMajorVersion;
+				minimumVersion = 7.31.3;
+			};
+		};
+/* End XCRemoteSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+		522C98BB2B0D67AF00E6E4A9 /* PacketTunnelProvider */ = {
+			isa = XCSwiftPackageProductDependency;
+			productName = PacketTunnelProvider;
+		};
+/* End XCSwiftPackageProductDependency section */
+	};
+	rootObject = 52334DE12B0D56D600817E56 /* Project object */;
+}
diff --git a/src/cordova/apple/OutlineLib/VpnExtension/Info.plist b/src/cordova/apple/OutlineLib/VpnExtension/Info.plist
new file mode 100644
index 00000000000..be5dcf9ee1b
--- /dev/null
+++ b/src/cordova/apple/OutlineLib/VpnExtension/Info.plist
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>$(DEVELOPMENT_LANGUAGE)</string>
+  <key>CFBundleDisplayName</key>
+  <string>VpnExtension</string>
+  <key>CFBundleExecutable</key>
+  <string>$(EXECUTABLE_NAME)</string>
+  <key>CFBundleIdentifier</key>
+  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>$(PRODUCT_NAME)</string>
+  <key>CFBundlePackageType</key>
+  <string>XPC!</string>
+  <key>ITSAppUsesNonExemptEncryption</key>
+  <false/>
+  <key>NSExtension</key>
+  <dict>
+    <key>NSExtensionPointIdentifier</key>
+    <string>com.apple.networkextension.packet-tunnel</string>
+    <key>NSExtensionPrincipalClass</key>
+    <string>PacketTunnelProvider</string>
+  </dict>
+</dict>
+</plist>
diff --git a/src/cordova/apple/OutlineLib/VpnExtension/VpnExtension.entitlements b/src/cordova/apple/OutlineLib/VpnExtension/VpnExtension.entitlements
new file mode 100644
index 00000000000..fc1aedb9dfd
--- /dev/null
+++ b/src/cordova/apple/OutlineLib/VpnExtension/VpnExtension.entitlements
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>com.apple.developer.networking.networkextension</key>
+  <array>
+    <string>packet-tunnel-provider</string>
+  </array>
+  <key>com.apple.security.app-sandbox</key>
+  <true/>
+  <key>com.apple.security.application-groups</key>
+  <array>
+    <string>group.org.outline.ios.client</string>
+  </array>
+  <key>com.apple.security.network.client</key>
+  <true/>
+  <key>com.apple.security.network.server</key>
+  <true/>
+</dict>
+</plist>
diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved b/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 0bd028c28bd..e2883946608 100644
--- a/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -5,8 +5,8 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/CocoaLumberjack/CocoaLumberjack",
       "state" : {
-        "revision" : "0188d31089b5881a269e01777be74c7316924346",
-        "version" : "3.8.0"
+        "revision" : "363ed23d19a931809ea834a7d722da830353806a",
+        "version" : "3.8.2"
       }
     },
     {
diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj b/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
index 394c0a02007..47a8062380c 100755
--- a/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
+++ b/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
@@ -16,12 +16,11 @@
 		301BF552109A68D80062928A /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 301BF535109A57CC0062928A /* libCordova.a */; };
 		302D95F114D2391D003F00A1 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D95EF14D2391D003F00A1 /* MainViewController.m */; };
 		302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 302D95F014D2391D003F00A1 /* MainViewController.xib */; };
-		3B0347531F212F0200C8EF1F /* VpnExtension.appex in Embed App Extensions (2 items) */ = {isa = PBXBuildFile; fileRef = 3B0347481F212F0100C8EF1F /* VpnExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+		52334EC82B0D5B1B00817E56 /* VpnExtension.appex in Embed App Extensions (2 items) */ = {isa = PBXBuildFile; fileRef = 52334EC62B0D5A7400817E56 /* VpnExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		52CE53E7295B6A310064D03D /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 52CE53E6295B6A310064D03D /* Sentry */; };
-		52E783062A5880CF00355E64 /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 52E783052A5880CF00355E64 /* PacketTunnelProvider */; };
 		5F7F90AE0E924FD7B065C415 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 0394302BA6114B2AB648D4FF /* CDVStatusBar.m */; };
 		6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */; };
-		A271D4202A7069D8009981B2 /* OutlineLauncher in Frameworks */ = {isa = PBXBuildFile; productRef = A271D41F2A7069D8009981B2 /* OutlineLauncher */; };
+		A271D4202A7069D8009981B2 /* OutlineLauncher in Frameworks */ = {isa = PBXBuildFile; platformFilter = maccatalyst; productRef = A271D41F2A7069D8009981B2 /* OutlineLauncher */; };
 		A271D4222A706CB9009981B2 /* OutlineAppKitBridge in Frameworks */ = {isa = PBXBuildFile; productRef = A271D4212A706CB9009981B2 /* OutlineAppKitBridge */; };
 		A271D42D2A708240009981B2 /* AppDelegate+Outline.m in Sources */ = {isa = PBXBuildFile; fileRef = A271D42C2A708240009981B2 /* AppDelegate+Outline.m */; };
 		A271D4302A708278009981B2 /* CocoaLumberjack in Frameworks */ = {isa = PBXBuildFile; productRef = A271D42F2A708278009981B2 /* CocoaLumberjack */; };
@@ -32,7 +31,6 @@
 		A2A83B392A1C5B2E00755F56 /* OutlineLauncher.app in Copy OutlineLauncher */ = {isa = PBXBuildFile; fileRef = A26D262D2A1C41B1009838E0 /* OutlineLauncher.app */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		A2B8C14D2A58B70E0054487E /* AppKitBridge.bundle in Embed PlugIns */ = {isa = PBXBuildFile; fileRef = A2DBB2F62A00D2DD0017E696 /* AppKitBridge.bundle */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		A2DBB2FB2A00D2F90017E696 /* AppKitBridge.bundle in Embed App Extensions (2 items) */ = {isa = PBXBuildFile; fileRef = A2DBB2F62A00D2DD0017E696 /* AppKitBridge.bundle */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		FC8C310B1FAA814A004262BE /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC8C310A1FAA814A004262BE /* NetworkExtension.framework */; };
 		FC8C310C1FAA88FB004262BE /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC8C310A1FAA814A004262BE /* NetworkExtension.framework */; };
 /* End PBXBuildFile section */
 
@@ -51,13 +49,6 @@
 			remoteGlobalIDString = D2AAC07D0554694100DB518D;
 			remoteInfo = CordovaLib;
 		};
-		3B0347511F212F0200C8EF1F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3B0347471F212F0100C8EF1F;
-			remoteInfo = VpnExtension;
-		};
 		3BE967001F211C7E0077C3AC /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
@@ -65,6 +56,20 @@
 			remoteGlobalIDString = C0C01EB21E3911D50056E6CB;
 			remoteInfo = Cordova;
 		};
+		52334EC52B0D5A7400817E56 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 52334E042B0D56D600817E56 /* OutlineLib.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 52334EAC2B0D58AD00817E56;
+			remoteInfo = VpnExtension;
+		};
+		52334EC92B0D5B2D00817E56 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 52334E042B0D56D600817E56 /* OutlineLib.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 52334EAB2B0D58AD00817E56;
+			remoteInfo = VpnExtension;
+		};
 		A2B8C14E2A58B70E0054487E /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
@@ -96,7 +101,7 @@
 			dstSubfolderSpec = 13;
 			files = (
 				A2DBB2FB2A00D2F90017E696 /* AppKitBridge.bundle in Embed App Extensions (2 items) */,
-				3B0347531F212F0200C8EF1F /* VpnExtension.appex in Embed App Extensions (2 items) */,
+				52334EC82B0D5B1B00817E56 /* VpnExtension.appex in Embed App Extensions (2 items) */,
 			);
 			name = "Embed App Extensions (2 items)";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -154,8 +159,7 @@
 		3047A5111AB8059700498E2A /* build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = build.xcconfig; path = cordova/build.xcconfig; sourceTree = SOURCE_ROOT; };
 		32CA4F630368D1EE00C91783 /* Outline-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Outline-Prefix.pch"; sourceTree = "<group>"; };
 		3B0347431F212E6500C8EF1F /* Outline.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Outline.entitlements; path = Outline/Outline.entitlements; sourceTree = "<group>"; };
-		3B0347481F212F0100C8EF1F /* VpnExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VpnExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
-		3B03475B1F212F2D00C8EF1F /* VpnExtension.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = VpnExtension.entitlements; path = Outline/VpnExtension.entitlements; sourceTree = SOURCE_ROOT; };
+		52334E042B0D56D600817E56 /* OutlineLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OutlineLib.xcodeproj; path = ../../src/cordova/apple/OutlineLib/OutlineLib.xcodeproj; sourceTree = "<group>"; };
 		6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = Outline/CDVLaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
 		8D1107310486CEB800E47090 /* Outline-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Outline-Info.plist"; path = "Outline/Outline-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = SOURCE_ROOT; };
 		91E45572BB494E9299D2DD41 /* CDVClipboard.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVClipboard.m; path = "cordova-plugin-clipboard/CDVClipboard.m"; sourceTree = "<group>"; };
@@ -191,15 +195,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		3B0347451F212F0100C8EF1F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FC8C310B1FAA814A004262BE /* NetworkExtension.framework in Frameworks */,
-				52E783062A5880CF00355E64 /* PacketTunnelProvider in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		A26D262A2A1C41B1009838E0 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -238,7 +233,6 @@
 			isa = PBXGroup;
 			children = (
 				1D6058910D05DD3D006BFB54 /* Outline.app */,
-				3B0347481F212F0100C8EF1F /* VpnExtension.appex */,
 				A2DBB2F62A00D2DD0017E696 /* AppKitBridge.bundle */,
 				A26D262D2A1C41B1009838E0 /* OutlineLauncher.app */,
 			);
@@ -248,6 +242,7 @@
 		29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
 			isa = PBXGroup;
 			children = (
+				52334E042B0D56D600817E56 /* OutlineLib.xcodeproj */,
 				F6D33648296CF46200AFD613 /* Packages */,
 				3B0347431F212E6500C8EF1F /* Outline.entitlements */,
 				EB87FDF41871DAF40020F90C /* config.xml */,
@@ -258,7 +253,6 @@
 				307C750510C5A3420062BCA9 /* Plugins */,
 				29B97315FDCFA39411CA2CEA /* Other Sources */,
 				29B97317FDCFA39411CA2CEA /* Resources */,
-				3B0347491F212F0200C8EF1F /* VpnExtension */,
 				A26D262E2A1C41B1009838E0 /* OutlineLauncher */,
 				29B97323FDCFA39411CA2CEA /* Frameworks */,
 				19C28FACFE9D520D11CA2CBB /* Products */,
@@ -331,13 +325,12 @@
 			path = Outline/Plugins;
 			sourceTree = SOURCE_ROOT;
 		};
-		3B0347491F212F0200C8EF1F /* VpnExtension */ = {
+		52334E052B0D56D600817E56 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				3B03475B1F212F2D00C8EF1F /* VpnExtension.entitlements */,
+				52334EC62B0D5A7400817E56 /* VpnExtension.appex */,
 			);
-			name = VpnExtension;
-			path = Outline/Resources/vpn;
+			name = Products;
 			sourceTree = "<group>";
 		};
 		A26D262E2A1C41B1009838E0 /* OutlineLauncher */ = {
@@ -383,10 +376,10 @@
 			buildRules = (
 			);
 			dependencies = (
+				52334ECA2B0D5B2D00817E56 /* PBXTargetDependency */,
 				A2F6068E2A1C6D4A0039183A /* PBXTargetDependency */,
 				A2DBB3042A00D5F90017E696 /* PBXTargetDependency */,
 				301BF551109A68C00062928A /* PBXTargetDependency */,
-				3B0347521F212F0200C8EF1F /* PBXTargetDependency */,
 			);
 			name = Outline;
 			packageProductDependencies = (
@@ -399,25 +392,6 @@
 			productReference = 1D6058910D05DD3D006BFB54 /* Outline.app */;
 			productType = "com.apple.product-type.application";
 		};
-		3B0347471F212F0100C8EF1F /* VpnExtension */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3B0347541F212F0200C8EF1F /* Build configuration list for PBXNativeTarget "VpnExtension" */;
-			buildPhases = (
-				3B0347441F212F0100C8EF1F /* Sources */,
-				3B0347451F212F0100C8EF1F /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = VpnExtension;
-			packageProductDependencies = (
-				52E783052A5880CF00355E64 /* PacketTunnelProvider */,
-			);
-			productName = VpnExtension;
-			productReference = 3B0347481F212F0100C8EF1F /* VpnExtension.appex */;
-			productType = "com.apple.product-type.app-extension";
-		};
 		A26D262C2A1C41B1009838E0 /* OutlineLauncher */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = A26D26392A1C41B4009838E0 /* Build configuration list for PBXNativeTarget "OutlineLauncher" */;
@@ -475,15 +449,6 @@
 							};
 						};
 					};
-					3B0347471F212F0100C8EF1F = {
-						CreatedOnToolsVersion = 8.3.3;
-						LastSwiftMigration = 1130;
-						SystemCapabilities = {
-							com.apple.ApplicationGroups.iOS = {
-								enabled = 1;
-							};
-						};
-					};
 					A26D262C2A1C41B1009838E0 = {
 						CreatedOnToolsVersion = 14.3;
 					};
@@ -512,11 +477,14 @@
 					ProductGroup = 301BF52E109A57CC0062928A /* Products */;
 					ProjectRef = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
 				},
+				{
+					ProductGroup = 52334E052B0D56D600817E56 /* Products */;
+					ProjectRef = 52334E042B0D56D600817E56 /* OutlineLib.xcodeproj */;
+				},
 			);
 			projectRoot = "";
 			targets = (
 				1D6058900D05DD3D006BFB54 /* Outline */,
-				3B0347471F212F0100C8EF1F /* VpnExtension */,
 				A2DBB2F52A00D2DD0017E696 /* AppKitBridge */,
 				A26D262C2A1C41B1009838E0 /* OutlineLauncher */,
 			);
@@ -538,6 +506,13 @@
 			remoteRef = 3BE967001F211C7E0077C3AC /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		52334EC62B0D5A7400817E56 /* VpnExtension.appex */ = {
+			isa = PBXReferenceProxy;
+			fileType = "wrapper.app-extension";
+			path = VpnExtension.appex;
+			remoteRef = 52334EC52B0D5A7400817E56 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -585,13 +560,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		3B0347441F212F0100C8EF1F /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		A25EB8812A8437D700B92EE0 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -614,10 +582,10 @@
 			name = CordovaLib;
 			targetProxy = 301BF550109A68C00062928A /* PBXContainerItemProxy */;
 		};
-		3B0347521F212F0200C8EF1F /* PBXTargetDependency */ = {
+		52334ECA2B0D5B2D00817E56 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
-			target = 3B0347471F212F0100C8EF1F /* VpnExtension */;
-			targetProxy = 3B0347511F212F0200C8EF1F /* PBXContainerItemProxy */;
+			name = VpnExtension;
+			targetProxy = 52334EC92B0D5B2D00817E56 /* PBXContainerItemProxy */;
 		};
 		A2B8C14F2A58B70E0054487E /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
@@ -680,7 +648,7 @@
 				STRIP_BITCODE_FROM_COPIED_FILES = NO;
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
 				SUPPORTS_MACCATALYST = YES;
-				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2,6";
 				VALIDATE_WORKSPACE = NO;
@@ -725,123 +693,13 @@
 				STRIP_BITCODE_FROM_COPIED_FILES = NO;
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
 				SUPPORTS_MACCATALYST = YES;
-				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2,6";
 				VALIDATE_WORKSPACE = NO;
 			};
 			name = Release;
 		};
-		3B0347551F212F0200C8EF1F /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3047A50F1AB8059700498E2A /* build-debug.xcconfig */;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CODE_SIGN_ENTITLEMENTS = "$(SRCROOT)/Outline/VpnExtension.entitlements";
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Outline/Plugins/cordova-plugin-outline",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				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_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				INFOPLIST_FILE = "$(SRCROOT)/Outline/VpnExtension-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@executable_path/../../Frameworks",
-				);
-				MTL_ENABLE_DEBUG_INFO = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client.VpnExtension;
-				"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.outline.macos.client.VpnExtension;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SKIP_INSTALL = YES;
-				STRIP_BITCODE_FROM_COPIED_FILES = NO;
-				SUPPORTS_MACCATALYST = YES;
-				SWIFT_INSTALL_OBJC_HEADER = YES;
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		3B0347561F212F0200C8EF1F /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3047A5101AB8059700498E2A /* build-release.xcconfig */;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CODE_SIGN_ENTITLEMENTS = "$(SRCROOT)/Outline/VpnExtension.entitlements";
-				CODE_SIGN_IDENTITY = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Outline/Plugins/cordova-plugin-outline",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				INFOPLIST_FILE = "$(SRCROOT)/Outline/VpnExtension-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@executable_path/../../Frameworks",
-				);
-				MTL_ENABLE_DEBUG_INFO = NO;
-				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client.VpnExtension;
-				"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.outline.macos.client.VpnExtension;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SKIP_INSTALL = YES;
-				STRIP_BITCODE_FROM_COPIED_FILES = NO;
-				SUPPORTS_MACCATALYST = YES;
-				SWIFT_INSTALL_OBJC_HEADER = YES;
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
 		A26D263A2A1C41B4009838E0 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -887,6 +745,7 @@
 				MTL_FAST_MATH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = org.outline.macos.client.launcher3;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
 				SDKROOT = macosx;
 				SKIP_INSTALL = YES;
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -940,6 +799,7 @@
 				MTL_FAST_MATH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = org.outline.macos.client.launcher3;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
 				SDKROOT = macosx;
 				SKIP_INSTALL = YES;
 				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -1142,15 +1002,6 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		3B0347541F212F0200C8EF1F /* Build configuration list for PBXNativeTarget "VpnExtension" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3B0347551F212F0200C8EF1F /* Debug */,
-				3B0347561F212F0200C8EF1F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
 		A26D26392A1C41B4009838E0 /* Build configuration list for PBXNativeTarget "OutlineLauncher" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
@@ -1205,10 +1056,6 @@
 			package = 52CE53E5295B6A310064D03D /* XCRemoteSwiftPackageReference "sentry-cocoa" */;
 			productName = Sentry;
 		};
-		52E783052A5880CF00355E64 /* PacketTunnelProvider */ = {
-			isa = XCSwiftPackageProductDependency;
-			productName = PacketTunnelProvider;
-		};
 		A271D41F2A7069D8009981B2 /* OutlineLauncher */ = {
 			isa = XCSwiftPackageProductDependency;
 			productName = OutlineLauncher;

From 576cd1c20f28ec1b5af1716b336f326b30e759a1 Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 19:07:15 -0400
Subject: [PATCH 3/9] Update

---
 .../apple/OutlineAppleLib/Package.swift       |   2 +-
 .../OutlineLib.xcodeproj/project.pbxproj      |  60 +++--
 .../ios/Outline.xcodeproj/project.pbxproj     | 226 ++++--------------
 .../macos/Outline.xcodeproj/project.pbxproj   | 209 ++++------------
 4 files changed, 124 insertions(+), 373 deletions(-)

diff --git a/client/src/cordova/apple/OutlineAppleLib/Package.swift b/client/src/cordova/apple/OutlineAppleLib/Package.swift
index 510e653cf17..986b2837469 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Package.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Package.swift
@@ -10,7 +10,7 @@ let package = Package(
         // CocoaLumberjack 3.8.0 dropped support for iOS < 11 and macOS < 10.13.
         // See https://github.com/CocoaLumberjack/CocoaLumberjack/releases/tag/3.8.0.
         // These cannot be upgraded without also upgrading the entire project.
-       .iOS(.v11),
+       .iOS(.v13),
        .macOS(.v10_14),
     ],
     products: [
diff --git a/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj b/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
index c69b1e84fac..2f0dc258831 100644
--- a/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
+++ b/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
@@ -3,12 +3,12 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 56;
+	objectVersion = 60;
 	objects = {
 
 /* Begin PBXBuildFile section */
-		522C98BC2B0D67AF00E6E4A9 /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 522C98BB2B0D67AF00E6E4A9 /* PacketTunnelProvider */; };
 		52334EAF2B0D58AD00817E56 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */; };
+		5260B06A2C4F114000CDF289 /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 5260B0692C4F114000CDF289 /* PacketTunnelProvider */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -25,7 +25,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				52334EAF2B0D58AD00817E56 /* NetworkExtension.framework in Frameworks */,
-				522C98BC2B0D67AF00E6E4A9 /* PacketTunnelProvider in Frameworks */,
+				5260B06A2C4F114000CDF289 /* PacketTunnelProvider in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -81,10 +81,11 @@
 			buildRules = (
 			);
 			dependencies = (
+				5260B0842C4F18B200CDF289 /* PBXTargetDependency */,
 			);
 			name = VpnExtension;
 			packageProductDependencies = (
-				522C98BB2B0D67AF00E6E4A9 /* PacketTunnelProvider */,
+				5260B0692C4F114000CDF289 /* PacketTunnelProvider */,
 			);
 			productName = VpnExtension;
 			productReference = 52334EAC2B0D58AD00817E56 /* VpnExtension.appex */;
@@ -184,8 +185,8 @@
 			);
 			mainGroup = 52334DE02B0D56D600817E56;
 			packageReferences = (
-				52334EB92B0D59FA00817E56 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */,
 				52334EFA2B0D619D00817E56 /* XCRemoteSwiftPackageReference "sentry-cocoa" */,
+				5260B0682C4F114000CDF289 /* XCLocalSwiftPackageReference "../OutlineAppleLib" */,
 			);
 			productRefGroup = 52334DEB2B0D56D600817E56 /* Products */;
 			projectDirPath = "";
@@ -216,6 +217,13 @@
 		};
 /* End PBXSourcesBuildPhase section */
 
+/* Begin PBXTargetDependency section */
+		5260B0842C4F18B200CDF289 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			productRef = 5260B0832C4F18B200CDF289 /* PacketTunnelProvider */;
+		};
+/* End PBXTargetDependency section */
+
 /* Begin XCBuildConfiguration section */
 		52334DFC2B0D56D600817E56 /* Debug */ = {
 			isa = XCBuildConfiguration;
@@ -270,9 +278,9 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.1;
 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.15;
+				MACOSX_DEPLOYMENT_TARGET = 10.14;
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
 				ONLY_ACTIVE_ARCH = YES;
@@ -330,9 +338,9 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.1;
 				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.15;
+				MACOSX_DEPLOYMENT_TARGET = 10.14;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				MTL_FAST_MATH = YES;
 				SWIFT_COMPILATION_MODE = wholemodule;
@@ -344,6 +352,7 @@
 		52334EB62B0D58AD00817E56 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
 				CODE_SIGN_ENTITLEMENTS = VpnExtension/VpnExtension.entitlements;
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
@@ -364,8 +373,10 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
-				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
 				SUPPORTS_MACCATALYST = YES;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+				SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -375,6 +386,7 @@
 		52334EB72B0D58AD00817E56 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
 				CODE_SIGN_ENTITLEMENTS = VpnExtension/VpnExtension.entitlements;
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
@@ -395,8 +407,10 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
-				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
 				SUPPORTS_MACCATALYST = YES;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+				SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
@@ -427,28 +441,32 @@
 		};
 /* End XCConfigurationList section */
 
-/* Begin XCRemoteSwiftPackageReference section */
-		52334EB92B0D59FA00817E56 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */ = {
-			isa = XCRemoteSwiftPackageReference;
-			repositoryURL = "https://github.com/CocoaLumberjack/CocoaLumberjack";
-			requirement = {
-				kind = upToNextMajorVersion;
-				minimumVersion = 3.8.2;
-			};
+/* Begin XCLocalSwiftPackageReference section */
+		5260B0682C4F114000CDF289 /* XCLocalSwiftPackageReference "../OutlineAppleLib" */ = {
+			isa = XCLocalSwiftPackageReference;
+			relativePath = ../OutlineAppleLib;
 		};
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCRemoteSwiftPackageReference section */
 		52334EFA2B0D619D00817E56 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = {
 			isa = XCRemoteSwiftPackageReference;
 			repositoryURL = "https://github.com/getsentry/sentry-cocoa";
 			requirement = {
 				kind = upToNextMajorVersion;
-				minimumVersion = 7.31.3;
+				minimumVersion = 8.0.0;
 			};
 		};
 /* End XCRemoteSwiftPackageReference section */
 
 /* Begin XCSwiftPackageProductDependency section */
-		522C98BB2B0D67AF00E6E4A9 /* PacketTunnelProvider */ = {
+		5260B0692C4F114000CDF289 /* PacketTunnelProvider */ = {
+			isa = XCSwiftPackageProductDependency;
+			productName = PacketTunnelProvider;
+		};
+		5260B0832C4F18B200CDF289 /* PacketTunnelProvider */ = {
 			isa = XCSwiftPackageProductDependency;
+			package = 5260B0682C4F114000CDF289 /* XCLocalSwiftPackageReference "../OutlineAppleLib" */;
 			productName = PacketTunnelProvider;
 		};
 /* End XCSwiftPackageProductDependency section */
diff --git a/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj b/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
index 247a786b3fa..21928768a98 100755
--- a/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
+++ b/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
@@ -16,9 +16,8 @@
 		301BF552109A68D80062928A /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 301BF535109A57CC0062928A /* libCordova.a */; };
 		302D95F114D2391D003F00A1 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D95EF14D2391D003F00A1 /* MainViewController.m */; };
 		302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 302D95F014D2391D003F00A1 /* MainViewController.xib */; };
-		3B0347531F212F0200C8EF1F /* VpnExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 3B0347481F212F0100C8EF1F /* VpnExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+		5260B05F2C4F0A4E00CDF289 /* VpnExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5260B05C2C4F09FB00CDF289 /* VpnExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		52CE53E7295B6A310064D03D /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 52CE53E6295B6A310064D03D /* Sentry */; };
-		52E783062A5880CF00355E64 /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 52E783052A5880CF00355E64 /* PacketTunnelProvider */; };
 		5F7F90AE0E924FD7B065C415 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 0394302BA6114B2AB648D4FF /* CDVStatusBar.m */; };
 		65A9AC9C2BEC091700C5899F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65A9AC9B2BEC091700C5899F /* PrivacyInfo.xcprivacy */; };
 		6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */; };
@@ -37,7 +36,6 @@
 		A2AC1A4F2B082197004E13CB /* AppKitController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2AC1A4E2B082197004E13CB /* AppKitController.swift */; };
 		A2AC1A9C2B082526004E13CB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A2AC1A582B082526004E13CB /* Localizable.strings */; };
 		A2AC1A9D2B082526004E13CB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A2AC1A9B2B082526004E13CB /* Assets.xcassets */; };
-		FC8C310B1FAA814A004262BE /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC8C310A1FAA814A004262BE /* NetworkExtension.framework */; };
 		FC8C310C1FAA88FB004262BE /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC8C310A1FAA814A004262BE /* NetworkExtension.framework */; };
 /* End PBXBuildFile section */
 
@@ -56,13 +54,6 @@
 			remoteGlobalIDString = D2AAC07D0554694100DB518D;
 			remoteInfo = CordovaLib;
 		};
-		3B0347511F212F0200C8EF1F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3B0347471F212F0100C8EF1F;
-			remoteInfo = VpnExtension;
-		};
 		3BE967001F211C7E0077C3AC /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
@@ -70,6 +61,20 @@
 			remoteGlobalIDString = C0C01EB21E3911D50056E6CB;
 			remoteInfo = Cordova;
 		};
+		5260B05B2C4F09FB00CDF289 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 5260B0572C4F09FB00CDF289 /* OutlineLib.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 52334EAC2B0D58AD00817E56;
+			remoteInfo = VpnExtension;
+		};
+		5260B05D2C4F0A3300CDF289 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 5260B0572C4F09FB00CDF289 /* OutlineLib.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 52334EAB2B0D58AD00817E56;
+			remoteInfo = VpnExtension;
+		};
 		A246B7E62B07AADD00ECACD5 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
@@ -100,7 +105,7 @@
 			dstPath = "";
 			dstSubfolderSpec = 13;
 			files = (
-				3B0347531F212F0200C8EF1F /* VpnExtension.appex in Embed App Extensions */,
+				5260B05F2C4F0A4E00CDF289 /* VpnExtension.appex in Embed App Extensions */,
 			);
 			name = "Embed App Extensions";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -170,8 +175,8 @@
 		3047A5111AB8059700498E2A /* build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = build.xcconfig; path = cordova/build.xcconfig; sourceTree = SOURCE_ROOT; };
 		32CA4F630368D1EE00C91783 /* Outline-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Outline-Prefix.pch"; sourceTree = "<group>"; };
 		3B0347431F212E6500C8EF1F /* Outline.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Outline.entitlements; path = Outline/Outline.entitlements; sourceTree = "<group>"; };
-		3B0347481F212F0100C8EF1F /* VpnExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VpnExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		3B03475B1F212F2D00C8EF1F /* VpnExtension.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = VpnExtension.entitlements; path = Outline/VpnExtension.entitlements; sourceTree = SOURCE_ROOT; };
+		5260B0572C4F09FB00CDF289 /* OutlineLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OutlineLib.xcodeproj; path = ../../src/cordova/apple/OutlineLib/OutlineLib.xcodeproj; sourceTree = "<group>"; };
 		65A9AC9B2BEC091700C5899F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
 		6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = Outline/CDVLaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
 		8D1107310486CEB800E47090 /* Outline-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Outline-Info.plist"; path = "Outline/Outline-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = SOURCE_ROOT; };
@@ -278,15 +283,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		3B0347451F212F0100C8EF1F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FC8C310B1FAA814A004262BE /* NetworkExtension.framework in Frameworks */,
-				52E783062A5880CF00355E64 /* PacketTunnelProvider in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		A26D262A2A1C41B1009838E0 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -318,7 +314,6 @@
 			isa = PBXGroup;
 			children = (
 				1D6058910D05DD3D006BFB54 /* Outline.app */,
-				3B0347481F212F0100C8EF1F /* VpnExtension.appex */,
 				A26D262D2A1C41B1009838E0 /* OutlineLauncher.app */,
 				A246B7DD2B07AACF00ECACD5 /* AppKitIntegration.framework */,
 			);
@@ -328,6 +323,7 @@
 		29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
 			isa = PBXGroup;
 			children = (
+				5260B0572C4F09FB00CDF289 /* OutlineLib.xcodeproj */,
 				65A9AC9B2BEC091700C5899F /* PrivacyInfo.xcprivacy */,
 				F6D33648296CF46200AFD613 /* Packages */,
 				3B0347431F212E6500C8EF1F /* Outline.entitlements */,
@@ -421,6 +417,14 @@
 			path = Outline/Resources/vpn;
 			sourceTree = "<group>";
 		};
+		5260B0582C4F09FB00CDF289 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				5260B05C2C4F09FB00CDF289 /* VpnExtension.appex */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 		A26D262E2A1C41B1009838E0 /* OutlineLauncher */ = {
 			isa = PBXGroup;
 			children = (
@@ -504,9 +508,9 @@
 			buildRules = (
 			);
 			dependencies = (
+				5260B05E2C4F0A3300CDF289 /* PBXTargetDependency */,
 				A2A3EE0E2B0DB62000F8E544 /* PBXTargetDependency */,
 				301BF551109A68C00062928A /* PBXTargetDependency */,
-				3B0347521F212F0200C8EF1F /* PBXTargetDependency */,
 				A246B7E72B07AADD00ECACD5 /* PBXTargetDependency */,
 			);
 			name = Outline;
@@ -520,25 +524,6 @@
 			productReference = 1D6058910D05DD3D006BFB54 /* Outline.app */;
 			productType = "com.apple.product-type.application";
 		};
-		3B0347471F212F0100C8EF1F /* VpnExtension */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3B0347541F212F0200C8EF1F /* Build configuration list for PBXNativeTarget "VpnExtension" */;
-			buildPhases = (
-				3B0347441F212F0100C8EF1F /* Sources */,
-				3B0347451F212F0100C8EF1F /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = VpnExtension;
-			packageProductDependencies = (
-				52E783052A5880CF00355E64 /* PacketTunnelProvider */,
-			);
-			productName = VpnExtension;
-			productReference = 3B0347481F212F0100C8EF1F /* VpnExtension.appex */;
-			productType = "com.apple.product-type.app-extension";
-		};
 		A246B7DC2B07AACF00ECACD5 /* AppKitIntegration */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = A246B7E12B07AACF00ECACD5 /* Build configuration list for PBXNativeTarget "AppKitIntegration" */;
@@ -596,15 +581,6 @@
 							};
 						};
 					};
-					3B0347471F212F0100C8EF1F = {
-						CreatedOnToolsVersion = 8.3.3;
-						LastSwiftMigration = 1130;
-						SystemCapabilities = {
-							com.apple.ApplicationGroups.iOS = {
-								enabled = 1;
-							};
-						};
-					};
 					A246B7DC2B07AACF00ECACD5 = {
 						CreatedOnToolsVersion = 15.0.1;
 					};
@@ -699,11 +675,14 @@
 					ProductGroup = 301BF52E109A57CC0062928A /* Products */;
 					ProjectRef = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
 				},
+				{
+					ProductGroup = 5260B0582C4F09FB00CDF289 /* Products */;
+					ProjectRef = 5260B0572C4F09FB00CDF289 /* OutlineLib.xcodeproj */;
+				},
 			);
 			projectRoot = "";
 			targets = (
 				1D6058900D05DD3D006BFB54 /* Outline */,
-				3B0347471F212F0100C8EF1F /* VpnExtension */,
 				A26D262C2A1C41B1009838E0 /* OutlineLauncher */,
 				A246B7DC2B07AACF00ECACD5 /* AppKitIntegration */,
 			);
@@ -725,6 +704,13 @@
 			remoteRef = 3BE967001F211C7E0077C3AC /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		5260B05C2C4F09FB00CDF289 /* VpnExtension.appex */ = {
+			isa = PBXReferenceProxy;
+			fileType = "wrapper.app-extension";
+			path = VpnExtension.appex;
+			remoteRef = 5260B05B2C4F09FB00CDF289 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -782,13 +768,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		3B0347441F212F0100C8EF1F /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 		A246B7D92B07AACF00ECACD5 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -813,10 +792,10 @@
 			name = CordovaLib;
 			targetProxy = 301BF550109A68C00062928A /* PBXContainerItemProxy */;
 		};
-		3B0347521F212F0200C8EF1F /* PBXTargetDependency */ = {
+		5260B05E2C4F0A3300CDF289 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
-			target = 3B0347471F212F0100C8EF1F /* VpnExtension */;
-			targetProxy = 3B0347511F212F0200C8EF1F /* PBXContainerItemProxy */;
+			name = VpnExtension;
+			targetProxy = 5260B05D2C4F0A3300CDF289 /* PBXContainerItemProxy */;
 		};
 		A246B7E72B07AADD00ECACD5 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
@@ -1009,116 +988,6 @@
 			};
 			name = Release;
 		};
-		3B0347551F212F0200C8EF1F /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3047A50F1AB8059700498E2A /* build-debug.xcconfig */;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CODE_SIGN_ENTITLEMENTS = "$(SRCROOT)/Outline/VpnExtension.entitlements";
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Outline/Plugins/cordova-plugin-outline",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				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_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				INFOPLIST_FILE = "$(SRCROOT)/Outline/VpnExtension-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@executable_path/../../Frameworks",
-				);
-				MTL_ENABLE_DEBUG_INFO = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client.VpnExtension;
-				"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.outline.macos.client.VpnExtension;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SKIP_INSTALL = YES;
-				STRIP_BITCODE_FROM_COPIED_FILES = NO;
-				SUPPORTS_MACCATALYST = YES;
-				SWIFT_INSTALL_OBJC_HEADER = YES;
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		3B0347561F212F0200C8EF1F /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 3047A5101AB8059700498E2A /* build-release.xcconfig */;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CODE_SIGN_ENTITLEMENTS = "$(SRCROOT)/Outline/VpnExtension.entitlements";
-				CODE_SIGN_IDENTITY = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Outline/Plugins/cordova-plugin-outline",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				INFOPLIST_FILE = "$(SRCROOT)/Outline/VpnExtension-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/Frameworks",
-					"@executable_path/../../Frameworks",
-				);
-				MTL_ENABLE_DEBUG_INFO = NO;
-				PRODUCT_BUNDLE_IDENTIFIER = org.outline.ios.client.VpnExtension;
-				"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]" = org.outline.macos.client.VpnExtension;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SKIP_INSTALL = YES;
-				STRIP_BITCODE_FROM_COPIED_FILES = NO;
-				SUPPORTS_MACCATALYST = YES;
-				SWIFT_INSTALL_OBJC_HEADER = YES;
-				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
 		A246B7E22B07AACF00ECACD5 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 3047A50F1AB8059700498E2A /* build-debug.xcconfig */;
@@ -1460,15 +1329,6 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		3B0347541F212F0200C8EF1F /* Build configuration list for PBXNativeTarget "VpnExtension" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3B0347551F212F0200C8EF1F /* Debug */,
-				3B0347561F212F0200C8EF1F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
 		A246B7E12B07AACF00ECACD5 /* Build configuration list for PBXNativeTarget "AppKitIntegration" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
@@ -1523,10 +1383,6 @@
 			package = 52CE53E5295B6A310064D03D /* XCRemoteSwiftPackageReference "sentry-cocoa" */;
 			productName = Sentry;
 		};
-		52E783052A5880CF00355E64 /* PacketTunnelProvider */ = {
-			isa = XCSwiftPackageProductDependency;
-			productName = PacketTunnelProvider;
-		};
 		A26F9C352B0D9CA000BCD3E6 /* OutlineLauncher */ = {
 			isa = XCSwiftPackageProductDependency;
 			productName = OutlineLauncher;
diff --git a/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj b/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj
index 2c40cb6a754..b73ec16b062 100644
--- a/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj
+++ b/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj
@@ -8,7 +8,7 @@
 
 /* Begin PBXBuildFile section */
 		52355CFB295B70030057557B /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 52355CFA295B70030057557B /* Sentry */; };
-		52C198972A587525006E0ACE /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 52C198962A587525006E0ACE /* PacketTunnelProvider */; };
+		5260B0822C4F185D00CDF289 /* VpnExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5260B0812C4F17FB00CDF289 /* VpnExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		52CBB849295BC79300D0073F /* CocoaLumberjack in Frameworks */ = {isa = PBXBuildFile; productRef = 52CBB848295BC79300D0073F /* CocoaLumberjack */; };
 		52CBB84B295BC79300D0073F /* CocoaLumberjackSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 52CBB84A295BC79300D0073F /* CocoaLumberjackSwift */; };
 		707060AF18FFC05700755D46 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 707060AE18FFC05700755D46 /* MainViewController.xib */; };
@@ -30,14 +30,26 @@
 		FC0799F02037532A00A1C822 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FC0799EE2037532A00A1C822 /* Main.storyboard */; };
 		FC0799F72037543F00A1C822 /* OutlineLauncher.app in Copy OutlineLauncher */ = {isa = PBXBuildFile; fileRef = FC0799E62037532900A1C822 /* OutlineLauncher.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		FC0799F92037545D00A1C822 /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC0799F82037545D00A1C822 /* ServiceManagement.framework */; };
-		FC5FF93A1F3E1E5F0032A745 /* VpnExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = FC5FF92B1F3E1E5F0032A745 /* VpnExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
-		FC5FF9471F3E1E8B0032A745 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC5FF9461F3E1E8B0032A745 /* NetworkExtension.framework */; };
 		FC5FF9501F3E1FD40032A745 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC5FF9461F3E1E8B0032A745 /* NetworkExtension.framework */; };
 		FC6E7F8E204DC1BE003CB365 /* CDVMacOsUrlHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC6E7F8D204DC1BE003CB365 /* CDVMacOsUrlHandler.swift */; };
 		FC7D56051F86969E00ABD5CA /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC7D56041F86969E00ABD5CA /* EventMonitor.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+		5260B0802C4F17FB00CDF289 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 5260B07C2C4F17FA00CDF289 /* OutlineLib.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 52334EAC2B0D58AD00817E56;
+			remoteInfo = VpnExtension;
+		};
+		5260B08F2C4F1BBF00CDF289 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 5260B07C2C4F17FA00CDF289 /* OutlineLib.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 52334EAB2B0D58AD00817E56;
+			remoteInfo = VpnExtension;
+		};
 		5296DB072A57BBAF0009C9BB /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 70BD681B18FFB02D00A1EFCF /* Project object */;
@@ -59,13 +71,6 @@
 			remoteGlobalIDString = 70BD673918FF9DAE00A1EFCF;
 			remoteInfo = CordovaLib;
 		};
-		FC5FF9381F3E1E5F0032A745 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 70BD681B18FFB02D00A1EFCF /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = FC5FF92A1F3E1E5F0032A745;
-			remoteInfo = VpnExtension;
-		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -86,7 +91,7 @@
 			dstPath = "";
 			dstSubfolderSpec = 13;
 			files = (
-				FC5FF93A1F3E1E5F0032A745 /* VpnExtension.appex in Embed App Extensions */,
+				5260B0822C4F185D00CDF289 /* VpnExtension.appex in Embed App Extensions */,
 			);
 			name = "Embed App Extensions";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -96,6 +101,7 @@
 /* Begin PBXFileReference section */
 		19209C3AABCC45AB8CFDD974 /* CDVClipboard.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVClipboard.h; path = "cordova-plugin-clipboard/CDVClipboard.h"; sourceTree = "<group>"; };
 		469466FF1BDB44C081741BF5 /* CDVClipboard.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVClipboard.m; path = "cordova-plugin-clipboard/CDVClipboard.m"; sourceTree = "<group>"; };
+		5260B07C2C4F17FA00CDF289 /* OutlineLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OutlineLib.xcodeproj; path = ../../src/cordova/apple/OutlineLib/OutlineLib.xcodeproj; sourceTree = "<group>"; };
 		707060AE18FFC05700755D46 /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainViewController.xib; sourceTree = "<group>"; };
 		707060B018FFC0D900755D46 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = Outline/config.xml; sourceTree = "<group>"; };
 		70BD682318FFB02D00A1EFCF /* Outline.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Outline.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -127,7 +133,6 @@
 		FC0799F82037545D00A1C822 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
 		FC55AB411F4F960A0056F12C /* VpnExtension-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "VpnExtension-Info.plist"; path = "Outline/VpnExtension-Info.plist"; sourceTree = SOURCE_ROOT; };
 		FC5FF9121F3E1D1B0032A745 /* Outline.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Outline.entitlements; sourceTree = "<group>"; };
-		FC5FF92B1F3E1E5F0032A745 /* VpnExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VpnExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		FC5FF9461F3E1E8B0032A745 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
 		FC6E7F8D204DC1BE003CB365 /* CDVMacOsUrlHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CDVMacOsUrlHandler.swift; sourceTree = "<group>"; };
 		FC7D56041F86969E00ABD5CA /* EventMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = "<group>"; };
@@ -160,18 +165,17 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		FC5FF9281F3E1E5F0032A745 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FC5FF9471F3E1E8B0032A745 /* NetworkExtension.framework in Frameworks */,
-				52C198972A587525006E0ACE /* PacketTunnelProvider in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		5260B07D2C4F17FA00CDF289 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				5260B0812C4F17FB00CDF289 /* VpnExtension.appex */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 		7069FBC31905A1F9000B48E1 /* Plugins */ = {
 			isa = PBXGroup;
 			children = (
@@ -186,6 +190,7 @@
 		70BD681A18FFB02D00A1EFCF = {
 			isa = PBXGroup;
 			children = (
+				5260B07C2C4F17FA00CDF289 /* OutlineLib.xcodeproj */,
 				F69339162968AFFD00823853 /* Packages */,
 				707060B018FFC0D900755D46 /* config.xml */,
 				70DAA8D91908785C00AF3749 /* www */,
@@ -203,7 +208,6 @@
 			isa = PBXGroup;
 			children = (
 				70BD682318FFB02D00A1EFCF /* Outline.app */,
-				FC5FF92B1F3E1E5F0032A745 /* VpnExtension.appex */,
 				FC0799E62037532900A1C822 /* OutlineLauncher.app */,
 			);
 			name = Products;
@@ -324,9 +328,9 @@
 			buildRules = (
 			);
 			dependencies = (
+				5260B0902C4F1BBF00CDF289 /* PBXTargetDependency */,
 				70BD687118FFB19500A1EFCF /* PBXTargetDependency */,
 				5296DB082A57BBAF0009C9BB /* PBXTargetDependency */,
-				FC5FF9391F3E1E5F0032A745 /* PBXTargetDependency */,
 			);
 			name = Outline;
 			packageProductDependencies = (
@@ -359,26 +363,6 @@
 			productReference = FC0799E62037532900A1C822 /* OutlineLauncher.app */;
 			productType = "com.apple.product-type.application";
 		};
-		FC5FF92A1F3E1E5F0032A745 /* VpnExtension */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = FC5FF93E1F3E1E5F0032A745 /* Build configuration list for PBXNativeTarget "VpnExtension" */;
-			buildPhases = (
-				FC5FF9271F3E1E5F0032A745 /* Sources */,
-				FC5FF9281F3E1E5F0032A745 /* Frameworks */,
-				FC5FF9291F3E1E5F0032A745 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = VpnExtension;
-			packageProductDependencies = (
-				52C198962A587525006E0ACE /* PacketTunnelProvider */,
-			);
-			productName = VpnExtension;
-			productReference = FC5FF92B1F3E1E5F0032A745 /* VpnExtension.appex */;
-			productType = "com.apple.product-type.app-extension";
-		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
@@ -415,24 +399,6 @@
 							};
 						};
 					};
-					FC5FF92A1F3E1E5F0032A745 = {
-						CreatedOnToolsVersion = 8.3.2;
-						LastSwiftMigration = 1130;
-						SystemCapabilities = {
-							com.apple.ApplicationGroups.Mac = {
-								enabled = 1;
-							};
-							com.apple.NetworkExtensions = {
-								enabled = 1;
-							};
-							com.apple.Sandbox = {
-								enabled = 0;
-							};
-							com.apple.VPNLite = {
-								enabled = 1;
-							};
-						};
-					};
 				};
 			};
 			buildConfigurationList = 70BD681E18FFB02D00A1EFCF /* Build configuration list for PBXProject "Outline" */;
@@ -456,17 +422,27 @@
 					ProductGroup = 70BD685B18FFB04300A1EFCF /* Products */;
 					ProjectRef = 70BD685A18FFB04300A1EFCF /* CordovaLib.xcodeproj */;
 				},
+				{
+					ProductGroup = 5260B07D2C4F17FA00CDF289 /* Products */;
+					ProjectRef = 5260B07C2C4F17FA00CDF289 /* OutlineLib.xcodeproj */;
+				},
 			);
 			projectRoot = "";
 			targets = (
 				70BD682218FFB02D00A1EFCF /* Outline */,
-				FC5FF92A1F3E1E5F0032A745 /* VpnExtension */,
 				FC0799E52037532900A1C822 /* OutlineLauncher */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXReferenceProxy section */
+		5260B0812C4F17FB00CDF289 /* VpnExtension.appex */ = {
+			isa = PBXReferenceProxy;
+			fileType = "wrapper.app-extension";
+			path = VpnExtension.appex;
+			remoteRef = 5260B0802C4F17FB00CDF289 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 		70BD686018FFB04300A1EFCF /* libCordova.a */ = {
 			isa = PBXReferenceProxy;
 			fileType = archive.ar;
@@ -496,13 +472,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		FC5FF9291F3E1E5F0032A745 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
@@ -545,16 +514,14 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		FC5FF9271F3E1E5F0032A745 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+		5260B0902C4F1BBF00CDF289 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = VpnExtension;
+			targetProxy = 5260B08F2C4F1BBF00CDF289 /* PBXContainerItemProxy */;
+		};
 		5296DB082A57BBAF0009C9BB /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = FC0799E52037532900A1C822 /* OutlineLauncher */;
@@ -565,11 +532,6 @@
 			name = CordovaLib;
 			targetProxy = 70BD687018FFB19500A1EFCF /* PBXContainerItemProxy */;
 		};
-		FC5FF9391F3E1E5F0032A745 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = FC5FF92A1F3E1E5F0032A745 /* VpnExtension */;
-			targetProxy = FC5FF9381F3E1E5F0032A745 /* PBXContainerItemProxy */;
-		};
 /* End PBXTargetDependency section */
 
 /* Begin PBXVariantGroup section */
@@ -865,78 +827,6 @@
 			};
 			name = Release;
 		};
-		FC5FF93F1F3E1E5F0032A745 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CODE_SIGN_ENTITLEMENTS = Outline/VpnExtension.entitlements;
-				CODE_SIGN_IDENTITY = "Apple Development";
-				CODE_SIGN_STYLE = Automatic;
-				COMBINE_HIDPI_IMAGES = YES;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Outline/Plugins/cordova-plugin-outline",
-				);
-				GCC_NO_COMMON_BLOCKS = YES;
-				INFOPLIST_FILE = "$(SRCROOT)/Outline/VpnExtension-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@executable_path/../../../../Frameworks",
-				);
-				MTL_ENABLE_DEBUG_INFO = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = org.outline.macos.client.VpnExtension;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SKIP_INSTALL = YES;
-				SWIFT_VERSION = 5.0;
-			};
-			name = Debug;
-		};
-		FC5FF9401F3E1E5F0032A745 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CODE_SIGN_ENTITLEMENTS = Outline/VpnExtension.entitlements;
-				CODE_SIGN_IDENTITY = "Apple Development";
-				COMBINE_HIDPI_IMAGES = YES;
-				COPY_PHASE_STRIP = NO;
-				DEVELOPMENT_TEAM = QT8Z3Q9V3A;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/Outline/Plugins/cordova-plugin-outline",
-				);
-				GCC_NO_COMMON_BLOCKS = YES;
-				INFOPLIST_FILE = "$(SRCROOT)/Outline/VpnExtension-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = (
-					"$(inherited)",
-					"@executable_path/../Frameworks",
-					"@executable_path/../../../../Frameworks",
-				);
-				MTL_ENABLE_DEBUG_INFO = NO;
-				PRODUCT_BUNDLE_IDENTIFIER = org.outline.macos.client.VpnExtension;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE_SPECIFIER = "";
-				SKIP_INSTALL = YES;
-				SWIFT_VERSION = 5.0;
-			};
-			name = Release;
-		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
@@ -967,15 +857,6 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		FC5FF93E1F3E1E5F0032A745 /* Build configuration list for PBXNativeTarget "VpnExtension" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				FC5FF93F1F3E1E5F0032A745 /* Debug */,
-				FC5FF9401F3E1E5F0032A745 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
 /* End XCConfigurationList section */
 
 /* Begin XCRemoteSwiftPackageReference section */
@@ -1003,10 +884,6 @@
 			package = 52355CF9295B70020057557B /* XCRemoteSwiftPackageReference "sentry-cocoa" */;
 			productName = Sentry;
 		};
-		52C198962A587525006E0ACE /* PacketTunnelProvider */ = {
-			isa = XCSwiftPackageProductDependency;
-			productName = PacketTunnelProvider;
-		};
 		52CBB848295BC79300D0073F /* CocoaLumberjack */ = {
 			isa = XCSwiftPackageProductDependency;
 			package = 52CBB847295BC79300D0073F /* XCRemoteSwiftPackageReference "CocoaLumberjack" */;

From ce567481f30bfbf7c0bdf7372c95de16cac27560 Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 19:34:23 -0400
Subject: [PATCH 4/9] Add note

---
 client/src/cordova/apple/README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/client/src/cordova/apple/README.md b/client/src/cordova/apple/README.md
index a4c92eeb6ad..c533420d2ab 100644
--- a/client/src/cordova/apple/README.md
+++ b/client/src/cordova/apple/README.md
@@ -167,6 +167,8 @@ It's safe to unregister all the Outline VPN Extensions, since the system will lo
 pluginkit -r $APP_EXTENSION_PATH
 ```
 
+Make sure that you list the registered plugins again after unregistering them, since they may fallback to other versions of it, which you may also need to unregister.
+
 Where the `$APP_EXTENSION_PATH` is the location of the `VpnExtension.appex` file from the pluginkit command.
 
 If your extenstion is still not loading, you can try to force register it:

From 030f5c433587320c06da5f3571d0674e3bcc84ba Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 19:38:26 -0400
Subject: [PATCH 5/9] Clean up test

---
 client/src/cordova/apple/OutlineAppleLib/Package.swift          | 2 +-
 .../Tests/OutlineTunnelTest/OutlineTunnelTest.swift             | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/client/src/cordova/apple/OutlineAppleLib/Package.swift b/client/src/cordova/apple/OutlineAppleLib/Package.swift
index 986b2837469..1f09f6abf0e 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Package.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Package.swift
@@ -80,7 +80,7 @@ let package = Package(
         ),
         .testTarget(
             name: "OutlineTunnelTest",
-            dependencies: ["OutlineTunnel", "PacketTunnelProvider"]
+            dependencies: ["OutlineTunnel"]
         ),
     ]
 )
diff --git a/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift b/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift
index f9ffd22b092..d9202d582c7 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift
@@ -4,7 +4,6 @@ import NetworkExtension
 import Tun2socks
 
 @testable import OutlineTunnel
-@testable import PacketTunnelProvider
 
 final class OutlineTunnelTest: XCTestCase {
     

From 7da81b5f360609b99e6c96ca2d29c971b11cfa81 Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 19:45:33 -0400
Subject: [PATCH 6/9] Remove unused deps on tun2socks

---
 client/src/cordova/apple/OutlineAppleLib/Package.swift         | 3 +--
 .../OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift     | 1 -
 .../Tests/OutlineTunnelTest/OutlineTunnelTest.swift            | 1 -
 3 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/client/src/cordova/apple/OutlineAppleLib/Package.swift b/client/src/cordova/apple/OutlineAppleLib/Package.swift
index 1f09f6abf0e..5632a239353 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Package.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Package.swift
@@ -16,7 +16,7 @@ let package = Package(
     products: [
         .library(
             name: "OutlineAppleLib",
-            targets: ["Tun2socks", "OutlineSentryLogger", "OutlineTunnel", "OutlineCatalystApp", "OutlineNotification"]
+            targets: ["OutlineSentryLogger", "OutlineTunnel", "OutlineCatalystApp", "OutlineNotification"]
         ),
         .library(
             name: "OutlineLauncher",
@@ -71,7 +71,6 @@ let package = Package(
             name: "OutlineTunnel",
             dependencies: [
                 .product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
-                "Tun2socks",
             ]
         ),
         .binaryTarget(
diff --git a/client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift b/client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift
index 9418fb1a169..679fbb4aa8d 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift
@@ -14,7 +14,6 @@
 
 import CocoaLumberjackSwift
 import NetworkExtension
-import Tun2socks
 
 // Manages the system's VPN tunnel through the VpnExtension process.
 @objcMembers
diff --git a/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift b/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift
index d9202d582c7..127ed99e856 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift
@@ -1,7 +1,6 @@
 import XCTest
 
 import NetworkExtension
-import Tun2socks
 
 @testable import OutlineTunnel
 

From 1b12f784a0735c4a5633e039d89685426d314f1d Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 19:58:54 -0400
Subject: [PATCH 7/9] Migrate PacketTunnelProvider to side project.

---
 .../apple/OutlineAppleLib/Package.swift       | 25 ++------
 .../OutlineLib.xcodeproj/project.pbxproj      | 61 +++++++++++++++++--
 .../Sources}/PacketTunnelProvider.h           |  0
 .../Sources}/PacketTunnelProvider.m           |  0
 4 files changed, 61 insertions(+), 25 deletions(-)
 rename client/src/cordova/apple/{OutlineAppleLib/Sources/PacketTunnelProvider/include => OutlineLib/VpnExtension/Sources}/PacketTunnelProvider.h (100%)
 rename client/src/cordova/apple/{OutlineAppleLib/Sources/PacketTunnelProvider => OutlineLib/VpnExtension/Sources}/PacketTunnelProvider.m (100%)

diff --git a/client/src/cordova/apple/OutlineAppleLib/Package.swift b/client/src/cordova/apple/OutlineAppleLib/Package.swift
index 5632a239353..0931eef8ff0 100644
--- a/client/src/cordova/apple/OutlineAppleLib/Package.swift
+++ b/client/src/cordova/apple/OutlineAppleLib/Package.swift
@@ -18,13 +18,14 @@ let package = Package(
             name: "OutlineAppleLib",
             targets: ["OutlineSentryLogger", "OutlineTunnel", "OutlineCatalystApp", "OutlineNotification"]
         ),
+        // Expose OutlineTunnel so the VpnExtension can use it.
         .library(
-            name: "OutlineLauncher",
-            targets: ["OutlineLauncher"]
+            name: "OutlineTunnel",
+            targets: ["OutlineTunnel"]
         ),
         .library(
-            name: "PacketTunnelProvider",
-            targets: ["PacketTunnelProvider"]
+            name: "OutlineLauncher",
+            targets: ["OutlineLauncher"]
         ),
     ],
     dependencies: [
@@ -47,18 +48,6 @@ let package = Package(
                 "OutlineNotification",
             ]
         ),
-        .target(
-            name: "PacketTunnelProvider",
-            dependencies: [
-                "CocoaLumberjack",
-                .product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
-                "Tun2socks",
-                "OutlineTunnel",
-            ],
-            cSettings: [
-                .headerSearchPath("Internal"),
-            ]
-        ),
         .target(name: "OutlineNotification"),
         .target(
             name: "OutlineSentryLogger",
@@ -73,10 +62,6 @@ let package = Package(
                 .product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
             ]
         ),
-        .binaryTarget(
-            name: "Tun2socks",
-            path: "../../../../output/build/apple/Tun2socks.xcframework"
-        ),
         .testTarget(
             name: "OutlineTunnelTest",
             dependencies: ["OutlineTunnel"]
diff --git a/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj b/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
index 2f0dc258831..322fd5b3e0c 100644
--- a/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
+++ b/client/src/cordova/apple/OutlineLib/OutlineLib.xcodeproj/project.pbxproj
@@ -7,11 +7,32 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		522987052C4F273E009EE577 /* PacketTunnelProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 522987042C4F273E009EE577 /* PacketTunnelProvider.m */; };
+		522987082C4F278E009EE577 /* CocoaLumberjack in Frameworks */ = {isa = PBXBuildFile; productRef = 522987072C4F278E009EE577 /* CocoaLumberjack */; };
+		5229870C2C4F2850009EE577 /* OutlineTunnel in Frameworks */ = {isa = PBXBuildFile; productRef = 5229870B2C4F2850009EE577 /* OutlineTunnel */; };
+		5229870E2C4F2873009EE577 /* Tun2socks.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5229870D2C4F2873009EE577 /* Tun2socks.xcframework */; };
+		5229870F2C4F2873009EE577 /* Tun2socks.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5229870D2C4F2873009EE577 /* Tun2socks.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		52334EAF2B0D58AD00817E56 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */; };
-		5260B06A2C4F114000CDF289 /* PacketTunnelProvider in Frameworks */ = {isa = PBXBuildFile; productRef = 5260B0692C4F114000CDF289 /* PacketTunnelProvider */; };
 /* End PBXBuildFile section */
 
+/* Begin PBXCopyFilesBuildPhase section */
+		522987102C4F2873009EE577 /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				5229870F2C4F2873009EE577 /* Tun2socks.xcframework in Embed Frameworks */,
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
 /* Begin PBXFileReference section */
+		522987032C4F273E009EE577 /* PacketTunnelProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketTunnelProvider.h; sourceTree = "<group>"; };
+		522987042C4F273E009EE577 /* PacketTunnelProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PacketTunnelProvider.m; sourceTree = "<group>"; };
+		5229870D2C4F2873009EE577 /* Tun2socks.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Tun2socks.xcframework; path = ../../../../output/build/apple/Tun2socks.xcframework; sourceTree = "<group>"; };
 		522C98B62B0D673200E6E4A9 /* OutlineAppleLib */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = OutlineAppleLib; path = ../OutlineAppleLib; sourceTree = "<group>"; };
 		52334EAC2B0D58AD00817E56 /* VpnExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VpnExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
@@ -24,14 +45,25 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				5229870E2C4F2873009EE577 /* Tun2socks.xcframework in Frameworks */,
+				522987082C4F278E009EE577 /* CocoaLumberjack in Frameworks */,
 				52334EAF2B0D58AD00817E56 /* NetworkExtension.framework in Frameworks */,
-				5260B06A2C4F114000CDF289 /* PacketTunnelProvider in Frameworks */,
+				5229870C2C4F2850009EE577 /* OutlineTunnel in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		522987022C4F26D4009EE577 /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				522987032C4F273E009EE577 /* PacketTunnelProvider.h */,
+				522987042C4F273E009EE577 /* PacketTunnelProvider.m */,
+			);
+			path = Sources;
+			sourceTree = "<group>";
+		};
 		52334DE02B0D56D600817E56 = {
 			isa = PBXGroup;
 			children = (
@@ -53,6 +85,7 @@
 		52334EAD2B0D58AD00817E56 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				5229870D2C4F2873009EE577 /* Tun2socks.xcframework */,
 				52334EAE2B0D58AD00817E56 /* NetworkExtension.framework */,
 			);
 			name = Frameworks;
@@ -61,6 +94,7 @@
 		52334EB02B0D58AD00817E56 /* VpnExtension */ = {
 			isa = PBXGroup;
 			children = (
+				522987022C4F26D4009EE577 /* Sources */,
 				52334EB32B0D58AD00817E56 /* Info.plist */,
 				52334EB42B0D58AD00817E56 /* VpnExtension.entitlements */,
 			);
@@ -77,6 +111,7 @@
 				52334EA82B0D58AD00817E56 /* Sources */,
 				52334EA92B0D58AD00817E56 /* Frameworks */,
 				52334EAA2B0D58AD00817E56 /* Resources */,
+				522987102C4F2873009EE577 /* Embed Frameworks */,
 			);
 			buildRules = (
 			);
@@ -85,7 +120,8 @@
 			);
 			name = VpnExtension;
 			packageProductDependencies = (
-				5260B0692C4F114000CDF289 /* PacketTunnelProvider */,
+				522987072C4F278E009EE577 /* CocoaLumberjack */,
+				5229870B2C4F2850009EE577 /* OutlineTunnel */,
 			);
 			productName = VpnExtension;
 			productReference = 52334EAC2B0D58AD00817E56 /* VpnExtension.appex */;
@@ -187,6 +223,7 @@
 			packageReferences = (
 				52334EFA2B0D619D00817E56 /* XCRemoteSwiftPackageReference "sentry-cocoa" */,
 				5260B0682C4F114000CDF289 /* XCLocalSwiftPackageReference "../OutlineAppleLib" */,
+				522987062C4F278E009EE577 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */,
 			);
 			productRefGroup = 52334DEB2B0D56D600817E56 /* Products */;
 			projectDirPath = "";
@@ -212,6 +249,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				522987052C4F273E009EE577 /* PacketTunnelProvider.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -449,6 +487,14 @@
 /* End XCLocalSwiftPackageReference section */
 
 /* Begin XCRemoteSwiftPackageReference section */
+		522987062C4F278E009EE577 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/CocoaLumberjack/CocoaLumberjack";
+			requirement = {
+				kind = upToNextMajorVersion;
+				minimumVersion = 3.8.5;
+			};
+		};
 		52334EFA2B0D619D00817E56 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = {
 			isa = XCRemoteSwiftPackageReference;
 			repositoryURL = "https://github.com/getsentry/sentry-cocoa";
@@ -460,9 +506,14 @@
 /* End XCRemoteSwiftPackageReference section */
 
 /* Begin XCSwiftPackageProductDependency section */
-		5260B0692C4F114000CDF289 /* PacketTunnelProvider */ = {
+		522987072C4F278E009EE577 /* CocoaLumberjack */ = {
 			isa = XCSwiftPackageProductDependency;
-			productName = PacketTunnelProvider;
+			package = 522987062C4F278E009EE577 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */;
+			productName = CocoaLumberjack;
+		};
+		5229870B2C4F2850009EE577 /* OutlineTunnel */ = {
+			isa = XCSwiftPackageProductDependency;
+			productName = OutlineTunnel;
 		};
 		5260B0832C4F18B200CDF289 /* PacketTunnelProvider */ = {
 			isa = XCSwiftPackageProductDependency;
diff --git a/client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h b/client/src/cordova/apple/OutlineLib/VpnExtension/Sources/PacketTunnelProvider.h
similarity index 100%
rename from client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h
rename to client/src/cordova/apple/OutlineLib/VpnExtension/Sources/PacketTunnelProvider.h
diff --git a/client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m b/client/src/cordova/apple/OutlineLib/VpnExtension/Sources/PacketTunnelProvider.m
similarity index 100%
rename from client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m
rename to client/src/cordova/apple/OutlineLib/VpnExtension/Sources/PacketTunnelProvider.m

From 5461cb1f116e18f6ea60e2694d57d5661961259c Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 20:02:33 -0400
Subject: [PATCH 8/9] Remove unused references to VpnExtension on iOS

---
 .../ios/Outline.xcodeproj/project.pbxproj     | 13 --------
 .../xcode/ios/Outline/VpnExtension-Info.plist | 33 -------------------
 .../ios/Outline/VpnExtension.entitlements     | 20 -----------
 3 files changed, 66 deletions(-)
 delete mode 100644 client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist
 delete mode 100644 client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements

diff --git a/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj b/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
index 21928768a98..b02cf4166e9 100755
--- a/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
+++ b/client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj
@@ -175,7 +175,6 @@
 		3047A5111AB8059700498E2A /* build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = build.xcconfig; path = cordova/build.xcconfig; sourceTree = SOURCE_ROOT; };
 		32CA4F630368D1EE00C91783 /* Outline-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Outline-Prefix.pch"; sourceTree = "<group>"; };
 		3B0347431F212E6500C8EF1F /* Outline.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Outline.entitlements; path = Outline/Outline.entitlements; sourceTree = "<group>"; };
-		3B03475B1F212F2D00C8EF1F /* VpnExtension.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = VpnExtension.entitlements; path = Outline/VpnExtension.entitlements; sourceTree = SOURCE_ROOT; };
 		5260B0572C4F09FB00CDF289 /* OutlineLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OutlineLib.xcodeproj; path = ../../src/cordova/apple/OutlineLib/OutlineLib.xcodeproj; sourceTree = "<group>"; };
 		65A9AC9B2BEC091700C5899F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
 		6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = Outline/CDVLaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
@@ -264,7 +263,6 @@
 		ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
 		F63DC2162970AFE600D92E0A /* OutlineAppleLib */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = OutlineAppleLib; path = ../../src/cordova/apple/OutlineAppleLib; sourceTree = "<group>"; };
 		F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = Outline/config.xml; sourceTree = "<group>"; };
-		FC55AB411F4F960A0056F12C /* VpnExtension-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "VpnExtension-Info.plist"; path = "Outline/VpnExtension-Info.plist"; sourceTree = SOURCE_ROOT; };
 		FC8C310A1FAA814A004262BE /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
@@ -335,7 +333,6 @@
 				307C750510C5A3420062BCA9 /* Plugins */,
 				29B97315FDCFA39411CA2CEA /* Other Sources */,
 				29B97317FDCFA39411CA2CEA /* Resources */,
-				3B0347491F212F0200C8EF1F /* VpnExtension */,
 				A26D262E2A1C41B1009838E0 /* OutlineLauncher */,
 				29B97323FDCFA39411CA2CEA /* Frameworks */,
 				19C28FACFE9D520D11CA2CBB /* Products */,
@@ -357,7 +354,6 @@
 		29B97317FDCFA39411CA2CEA /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				FC55AB411F4F960A0056F12C /* VpnExtension-Info.plist */,
 				0207DA571B56EA530066E2B4 /* Assets.xcassets */,
 				3047A50E1AB8057F00498E2A /* config */,
 				8D1107310486CEB800E47090 /* Outline-Info.plist */,
@@ -408,15 +404,6 @@
 			path = Outline/Plugins;
 			sourceTree = SOURCE_ROOT;
 		};
-		3B0347491F212F0200C8EF1F /* VpnExtension */ = {
-			isa = PBXGroup;
-			children = (
-				3B03475B1F212F2D00C8EF1F /* VpnExtension.entitlements */,
-			);
-			name = VpnExtension;
-			path = Outline/Resources/vpn;
-			sourceTree = "<group>";
-		};
 		5260B0582C4F09FB00CDF289 /* Products */ = {
 			isa = PBXGroup;
 			children = (
diff --git a/client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist b/client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist
deleted file mode 100644
index e4e1e2a439a..00000000000
--- a/client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>$(DEVELOPMENT_LANGUAGE)</string>
-	<key>CFBundleDisplayName</key>
-	<string>VpnExtension</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>XPC!</string>
-	<key>CFBundleShortVersionString</key>
-	<string>0.0.0-debug</string>
-	<key>CFBundleVersion</key>
-	<string>0</string>
-	<key>ITSAppUsesNonExemptEncryption</key>
-	<false/>
-	<key>NSExtension</key>
-	<dict>
-		<key>NSExtensionPointIdentifier</key>
-		<string>com.apple.networkextension.packet-tunnel</string>
-		<key>NSExtensionPrincipalClass</key>
-		<string>PacketTunnelProvider</string>
-	</dict>
-</dict>
-</plist>
diff --git a/client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements b/client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements
deleted file mode 100644
index fb4bf1a906d..00000000000
--- a/client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>com.apple.developer.networking.networkextension</key>
-	<array>
-		<string>packet-tunnel-provider</string>
-	</array>
-	<key>com.apple.security.app-sandbox</key>
-	<true/>
-	<key>com.apple.security.application-groups</key>
-	<array>
-		<string>group.org.outline.ios.client</string>
-	</array>
-	<key>com.apple.security.network.client</key>
-	<true/>
-	<key>com.apple.security.network.server</key>
-	<true/>
-</dict>
-</plist>

From 4819181bec946c15f7cf58be5a4ac4c7d9a33e77 Mon Sep 17 00:00:00 2001
From: Vinicius Fortuna <fortuna@users.noreply.github.com>
Date: Mon, 22 Jul 2024 20:06:41 -0400
Subject: [PATCH 9/9] Remove unused references to VpnExtension on macOS

---
 .../macos/Outline.xcodeproj/project.pbxproj   |  4 ---
 .../macos/Outline/VpnExtension-Info.plist     | 35 -------------------
 .../macos/Outline/VpnExtension.entitlements   | 22 ------------
 3 files changed, 61 deletions(-)
 delete mode 100644 client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist
 delete mode 100644 client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements

diff --git a/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj b/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj
index b73ec16b062..9dad9bf10f5 100644
--- a/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj
+++ b/client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj
@@ -131,12 +131,10 @@
 		FC0799F12037532A00A1C822 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		FC0799F22037532A00A1C822 /* OutlineLauncher.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OutlineLauncher.entitlements; sourceTree = "<group>"; };
 		FC0799F82037545D00A1C822 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
-		FC55AB411F4F960A0056F12C /* VpnExtension-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "VpnExtension-Info.plist"; path = "Outline/VpnExtension-Info.plist"; sourceTree = SOURCE_ROOT; };
 		FC5FF9121F3E1D1B0032A745 /* Outline.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Outline.entitlements; sourceTree = "<group>"; };
 		FC5FF9461F3E1E8B0032A745 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
 		FC6E7F8D204DC1BE003CB365 /* CDVMacOsUrlHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CDVMacOsUrlHandler.swift; sourceTree = "<group>"; };
 		FC7D56041F86969E00ABD5CA /* EventMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = "<group>"; };
-		FCB2DED41F3E3CAD000C6A44 /* VpnExtension.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = VpnExtension.entitlements; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -240,7 +238,6 @@
 		70BD682C18FFB02D00A1EFCF /* Outline */ = {
 			isa = PBXGroup;
 			children = (
-				FCB2DED41F3E3CAD000C6A44 /* VpnExtension.entitlements */,
 				FC5FF9121F3E1D1B0032A745 /* Outline.entitlements */,
 				70BD682D18FFB02D00A1EFCF /* Supporting Files */,
 				707060AE18FFC05700755D46 /* MainViewController.xib */,
@@ -285,7 +282,6 @@
 		70D86C851B903D11000750E0 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				FC55AB411F4F960A0056F12C /* VpnExtension-Info.plist */,
 				A508014170A1492DB0D800B3 /* Outline-Bridging-Header.h */,
 			);
 			name = Resources;
diff --git a/client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist b/client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist
deleted file mode 100644
index 18e4ad4bcf2..00000000000
--- a/client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleShortVersionString</key>
-	<string>0.0.0-debug</string>
-	<key>CFBundleVersion</key>
-	<string>0</string>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleDisplayName</key>
-	<string>VpnExtension</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>ITSAppUsesNonExemptEncryption</key>
-	<false/>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>XPC!</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
-	<key>NSExtension</key>
-	<dict>
-		<key>NSExtensionPointIdentifier</key>
-		<string>com.apple.networkextension.packet-tunnel</string>
-		<key>NSExtensionPrincipalClass</key>
-		<string>PacketTunnelProvider</string>
-	</dict>
-</dict>
-</plist>
diff --git a/client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements b/client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements
deleted file mode 100644
index e8485edf160..00000000000
--- a/client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>com.apple.developer.networking.networkextension</key>
-	<array>
-		<string>packet-tunnel-provider</string>
-	</array>
-	<key>com.apple.security.app-sandbox</key>
-	<true/>
-	<key>com.apple.security.application-groups</key>
-	<array>
-		<string>$(TeamIdentifierPrefix)org.outline.macos.client</string>
-	</array>
-	<key>com.apple.security.files.user-selected.read-only</key>
-	<true/>
-	<key>com.apple.security.network.client</key>
-	<true/>
-	<key>com.apple.security.network.server</key>
-	<true/>
-</dict>
-</plist>