diff options
| author | Bug Magnet <marco.nikic@mullvad.net> | 2025-04-25 17:02:34 +0200 |
|---|---|---|
| committer | Bug Magnet <marco.nikic@mullvad.net> | 2025-04-25 17:02:34 +0200 |
| commit | 4bdc7544216ce01424dbde5d5f2564bb7a3aed1c (patch) | |
| tree | c768d95ba17a2b3db68702654ba17e735bb62f54 | |
| parent | ddbf642c562a1728b905034f7eeb164ac0fa86fb (diff) | |
| download | mullvadvpn-boringfun-ios.tar.xz mullvadvpn-boringfun-ios.zip | |
Try getting it to workboringfun-ios
11 files changed, 553 insertions, 18 deletions
diff --git a/ios/BoringtunWrapper/BoringTunWrapper.swift b/ios/BoringtunWrapper/BoringTunWrapper.swift new file mode 100644 index 0000000000..a91c77a37a --- /dev/null +++ b/ios/BoringtunWrapper/BoringTunWrapper.swift @@ -0,0 +1,19 @@ +// +// BoringTunWrapper.swift +// BoringtunWrapper +// +// Created by Marco Nikic on 2025-04-25. +// Copyright © 2025 Mullvad VPN AB. All rights reserved. +// + +import Foundation +import BoringTunProxy + +public class BoringTunWrapper { + public init() {} + + public func createTunnel() { + print("Hello") + new_tunnel("helo", "hello", "hello", 0, 0) + } +} diff --git a/ios/BoringtunWrapper/BoringtunWrapper.h b/ios/BoringtunWrapper/BoringtunWrapper.h new file mode 100644 index 0000000000..df317cb022 --- /dev/null +++ b/ios/BoringtunWrapper/BoringtunWrapper.h @@ -0,0 +1,10 @@ +// +// BoringtunWrapper.h +// BoringtunWrapper +// +// Created by Marco Nikic on 2025-04-25. +// Copyright © 2025 Mullvad VPN AB. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "wireguard_ffi.h" diff --git a/ios/BoringtunWrapper/include/wireguard_ffi.h b/ios/BoringtunWrapper/include/wireguard_ffi.h new file mode 100644 index 0000000000..8078ecdbb6 --- /dev/null +++ b/ios/BoringtunWrapper/include/wireguard_ffi.h @@ -0,0 +1,108 @@ +// Copyright (c) 2019 Cloudflare, Inc. All rights reserved. +// SPDX-License-Identifier: BSD-3-Clause + + +#include <stdarg.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> + + +struct wireguard_tunnel; // This corresponds to the Rust type + +enum +{ + MAX_WIREGUARD_PACKET_SIZE = 65536 + 64, +}; + +enum result_type +{ + WIREGUARD_DONE = 0, + WRITE_TO_NETWORK = 1, + WIREGUARD_ERROR = 2, + WRITE_TO_TUNNEL_IPV4 = 4, + WRITE_TO_TUNNEL_IPV6 = 6, +}; + +struct wireguard_result +{ + enum result_type op; + size_t size; +}; + +struct stats +{ + int64_t time_since_last_handshake; + size_t tx_bytes; + size_t rx_bytes; + float estimated_loss; + int32_t estimated_rtt; // rtt estimated on time it took to complete latest initiated handshake in ms + uint8_t reserved[56]; // decrement appropriately when adding new fields +}; + +struct x25519_key +{ + uint8_t key[32]; +}; + +// Generates a fresh x25519 secret key +struct x25519_key x25519_secret_key(); +// Computes an x25519 public key from a secret key +struct x25519_key x25519_public_key(struct x25519_key private_key); +// Encodes a public or private x25519 key to base64. Must be freed with x25519_key_to_str_free. +const char *x25519_key_to_base64(struct x25519_key key); +// Encodes a public or private x25519 key to hex. Must be freed with x25519_key_to_str_free. +const char *x25519_key_to_hex(struct x25519_key key); +// Free string pointer obtained from either x25519_key_to_base64 or x25519_key_to_hex +void x25519_key_to_str_free(const char *key_str); +// Check if a null terminated string represents a valid x25519 key +// Returns 0 if not +int check_base64_encoded_x25519_key(const char *key); + +/// Sets the default tracing_subscriber to write to `log_func`. +/// +/// Uses Compact format without level, target, thread ids, thread names, or ansi control characters. +/// Subscribes to TRACE level events. +/// +/// This function should only be called once as setting the default tracing_subscriber +/// more than once will result in an error. +/// +/// Returns false on failure. +/// +/// # Safety +/// +/// `c_char` will be freed by the library after calling `log_func`. If the value needs +/// to be stored then `log_func` needs to create a copy, e.g. `strcpy`. +bool set_logging_function(void (*log_func)(const char *)); + +// Allocate a new tunnel +struct wireguard_tunnel *new_tunnel(const char *static_private, + const char *server_static_public, + const char *preshared_key, + uint16_t keep_alive, // Keep alive interval in seconds + uint32_t index); // The 24bit index prefix to be used for session indexes + +// Deallocate the tunnel +void tunnel_free(struct wireguard_tunnel *); + +struct wireguard_result wireguard_write(const struct wireguard_tunnel *tunnel, + const uint8_t *src, + uint32_t src_size, + uint8_t *dst, + uint32_t dst_size); + +struct wireguard_result wireguard_read(const struct wireguard_tunnel *tunnel, + const uint8_t *src, + uint32_t src_size, + uint8_t *dst, + uint32_t dst_size); + +struct wireguard_result wireguard_tick(const struct wireguard_tunnel *tunnel, + uint8_t *dst, + uint32_t dst_size); + +struct wireguard_result wireguard_force_handshake(const struct wireguard_tunnel *tunnel, + uint8_t *dst, + uint32_t dst_size); + +struct stats wireguard_stats(const struct wireguard_tunnel *tunnel); diff --git a/ios/BoringtunWrapper/module.private.modulemap b/ios/BoringtunWrapper/module.private.modulemap new file mode 100644 index 0000000000..b184c04c7f --- /dev/null +++ b/ios/BoringtunWrapper/module.private.modulemap @@ -0,0 +1,5 @@ +framework module BoringTunProxy { + header "wireguard_ffi.h" + link "libboringtun" + export * +} diff --git a/ios/BoringtunWrapperTests/BoringtunWrapperTests.swift b/ios/BoringtunWrapperTests/BoringtunWrapperTests.swift new file mode 100644 index 0000000000..881051e62a --- /dev/null +++ b/ios/BoringtunWrapperTests/BoringtunWrapperTests.swift @@ -0,0 +1,16 @@ +// +// BoringtunWrapperTests.swift +// BoringtunWrapperTests +// +// Created by Marco Nikic on 2025-04-25. +// Copyright © 2025 Mullvad VPN AB. All rights reserved. +// + +@testable import BoringtunWrapper +import Testing + +struct BoringtunWrapperTests { + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } +} diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index b22e3535c1..178e785dd3 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -779,6 +779,9 @@ A935594C2B4C2DA900D5D524 /* APIAvailabilityTestRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A935594B2B4C2DA900D5D524 /* APIAvailabilityTestRequest.swift */; }; A939661B2CAE6CE1008128CA /* MigrationManagerMultiProcessUpgradeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A939661A2CAE6CE1008128CA /* MigrationManagerMultiProcessUpgradeTests.swift */; }; A93969812CE606190032A7A0 /* Maybenot.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9840BB32C69F78A0030F05E /* Maybenot.swift */; }; + A946CF452DBBCF8200D6B5EC /* BoringTunWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A946CF422DBBCF8200D6B5EC /* BoringTunWrapper.swift */; }; + A946CF472DBBCF8200D6B5EC /* BoringtunWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A946CF412DBBCF8200D6B5EC /* BoringtunWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A946CF4E2DBBD87C00D6B5EC /* wireguard_ffi.h in Headers */ = {isa = PBXBuildFile; fileRef = A946CF3F2DBBCF8200D6B5EC /* wireguard_ffi.h */; settings = {ATTRIBUTES = (Private, ); }; }; A959E23E2D75F33300F95DDB /* PersistentAccessMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 586C0D962B04E0AC00E7CDD7 /* PersistentAccessMethod.swift */; }; A959E2412D75F39A00F95DDB /* MullvadTypes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58D223D5294C8E5E0029F5F8 /* MullvadTypes.framework */; }; A959E2422D75F3D200F95DDB /* AccessMethodKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588D7ED72AF3A533005DF40A /* AccessMethodKind.swift */; }; @@ -906,6 +909,10 @@ A9A5FA412ACB05D90083449F /* DeviceStateAccessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 583D86472A2678DC0060D63B /* DeviceStateAccessor.swift */; }; A9A5FA422ACB05D90083449F /* DeviceStateAccessorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580810E42A30E13A00B74552 /* DeviceStateAccessorProtocol.swift */; }; A9A5FA432ACB05F20083449F /* UIColor+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587CBFE222807F530028DED3 /* UIColor+Helpers.swift */; }; + A9A625A52DBBB83D0052E20D /* BoringtunWrapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9A625922DBBB83D0052E20D /* BoringtunWrapper.framework */; }; + A9A625A62DBBB83D0052E20D /* BoringtunWrapper.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A9A625922DBBB83D0052E20D /* BoringtunWrapper.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A9A625B72DBBB9390052E20D /* libboringtun.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CEB1F64E2DBBB12100840AA5 /* libboringtun.a */; }; + A9A625BA2DBBB9BD0052E20D /* BoringtunWrapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9A625922DBBB83D0052E20D /* BoringtunWrapper.framework */; }; A9A8A8EB2A262AB30086D569 /* FileCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A8A8EA2A262AB30086D569 /* FileCache.swift */; }; A9B6AC182ADE8F4300F7802A /* MigrationManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B6AC172ADE8F4300F7802A /* MigrationManagerTests.swift */; }; A9B6AC1A2ADE8FBB00F7802A /* InMemorySettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B6AC192ADE8FBB00F7802A /* InMemorySettingsStore.swift */; }; @@ -1381,6 +1388,13 @@ remoteGlobalIDString = 58D223D4294C8E5E0029F5F8; remoteInfo = MullvadTypes; }; + A946CF4C2DBBD84C00D6B5EC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A9A625912DBBB83D0052E20D; + remoteInfo = BoringtunWrapper; + }; A959E23F2D75F37600F95DDB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 58CE5E58224146200008646E /* Project object */; @@ -1402,6 +1416,13 @@ remoteGlobalIDString = A992DA1C2C24709F00DE7CE5; remoteInfo = MullvadRustRuntime; }; + A9A625A32DBBB83D0052E20D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A9A625912DBBB83D0052E20D; + remoteInfo = BoringtunWrapper; + }; A9D9A4B92C36D2FD004088DD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 58CE5E58224146200008646E /* Project object */; @@ -1449,6 +1470,7 @@ 06799AD228F98E1D00ACD94E /* MullvadREST.framework in Embed Frameworks */, 58D223CD294C8BCB0029F5F8 /* Operations.framework in Embed Frameworks */, 58C7A44A2A863F490060C66F /* PacketTunnelCore.framework in Embed Frameworks */, + A9A625A62DBBB83D0052E20D /* BoringtunWrapper.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -2329,6 +2351,10 @@ A939661A2CAE6CE1008128CA /* MigrationManagerMultiProcessUpgradeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationManagerMultiProcessUpgradeTests.swift; sourceTree = "<group>"; }; A944F2712B8E02E800473F4C /* libmullvad_ios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmullvad_ios.a; path = "../target/aarch64-apple-ios/debug/libmullvad_ios.a"; sourceTree = "<group>"; }; A9467E7E2A29DEFE000DC21F /* RelayCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayCacheTests.swift; sourceTree = "<group>"; }; + A946CF3F2DBBCF8200D6B5EC /* wireguard_ffi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wireguard_ffi.h; sourceTree = "<group>"; }; + A946CF412DBBCF8200D6B5EC /* BoringtunWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BoringtunWrapper.h; sourceTree = "<group>"; }; + A946CF422DBBCF8200D6B5EC /* BoringTunWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoringTunWrapper.swift; sourceTree = "<group>"; }; + A946CF432DBBCF8200D6B5EC /* module.private.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.private.modulemap; sourceTree = "<group>"; }; A948809A2BC9308D0090A44C /* EphemeralPeerExchangeActor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EphemeralPeerExchangeActor.swift; sourceTree = "<group>"; }; A95EEE352B722CD600A8A39B /* TunnelMonitorState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelMonitorState.swift; sourceTree = "<group>"; }; A95EEE372B722DFC00A8A39B /* PingStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PingStats.swift; sourceTree = "<group>"; }; @@ -2359,6 +2385,7 @@ A9A1DE782AD5708E0073F689 /* TransportStrategy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransportStrategy.swift; sourceTree = "<group>"; }; A9A557F42B7E3E5C0017ADA8 /* EphemeralPeerReceiver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EphemeralPeerReceiver.swift; sourceTree = "<group>"; }; A9A5F9A12ACB003D0083449F /* TunnelManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelManagerTests.swift; sourceTree = "<group>"; }; + A9A625922DBBB83D0052E20D /* BoringtunWrapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoringtunWrapper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A9A8A8EA2A262AB30086D569 /* FileCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileCache.swift; sourceTree = "<group>"; }; A9B6AC172ADE8F4300F7802A /* MigrationManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationManagerTests.swift; sourceTree = "<group>"; }; A9B6AC192ADE8FBB00F7802A /* InMemorySettingsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InMemorySettingsStore.swift; sourceTree = "<group>"; }; @@ -2526,6 +2553,10 @@ F998EFF92D3656B100D88D01 /* SKProduct+Sorting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SKProduct+Sorting.swift"; sourceTree = "<group>"; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + A9A6259F2DBBB83D0052E20D /* BoringtunWrapperTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = BoringtunWrapperTests; sourceTree = "<group>"; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 06799AB928F98E1D00ACD94E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -2603,6 +2634,7 @@ A992DA232C24709F00DE7CE5 /* MullvadRustRuntime.framework in Frameworks */, 06799AD128F98E1D00ACD94E /* MullvadREST.framework in Frameworks */, 58B2FDD92AA71D2A003EB5C6 /* MullvadSettings.framework in Frameworks */, + A9A625A52DBBB83D0052E20D /* BoringtunWrapper.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2610,6 +2642,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A9A625BA2DBBB9BD0052E20D /* BoringtunWrapper.framework in Frameworks */, 58FE25C62AA72779003D1918 /* PacketTunnelCore.framework in Frameworks */, 58FE25CE2AA72802003D1918 /* MullvadSettings.framework in Frameworks */, 58D223EA294C8F3C0029F5F8 /* MullvadTypes.framework in Frameworks */, @@ -2687,6 +2720,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A9A6258F2DBBB83D0052E20D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A9A625B72DBBB9390052E20D /* libboringtun.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A9D9A4BD2C36D53C004088DD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3895,6 +3936,8 @@ 58695A9E2A4ADA9200328DB3 /* TunnelObfuscationTests */, A992DA1E2C24709F00DE7CE5 /* MullvadRustRuntime */, A9D9A4C12C36D53C004088DD /* MullvadRustRuntimeTests */, + A946CF442DBBCF8200D6B5EC /* BoringtunWrapper */, + A9A6259F2DBBB83D0052E20D /* BoringtunWrapperTests */, 58CE5E61224146200008646E /* Products */, 584F991F2902CBDD001F858D /* Frameworks */, ); @@ -3921,6 +3964,7 @@ F0ACE3082BE4E478006D5333 /* MullvadMockData.framework */, A992DA1D2C24709F00DE7CE5 /* MullvadRustRuntime.framework */, A9D9A4C02C36D53C004088DD /* MullvadRustRuntimeTests.xctest */, + A9A625922DBBB83D0052E20D /* BoringtunWrapper.framework */, ); name = Products; sourceTree = "<group>"; @@ -4539,6 +4583,25 @@ path = Socks5; sourceTree = "<group>"; }; + A946CF402DBBCF8200D6B5EC /* include */ = { + isa = PBXGroup; + children = ( + A946CF3F2DBBCF8200D6B5EC /* wireguard_ffi.h */, + ); + path = include; + sourceTree = "<group>"; + }; + A946CF442DBBCF8200D6B5EC /* BoringtunWrapper */ = { + isa = PBXGroup; + children = ( + A946CF402DBBCF8200D6B5EC /* include */, + A946CF412DBBCF8200D6B5EC /* BoringtunWrapper.h */, + A946CF422DBBCF8200D6B5EC /* BoringTunWrapper.swift */, + A946CF432DBBCF8200D6B5EC /* module.private.modulemap */, + ); + path = BoringtunWrapper; + sourceTree = "<group>"; + }; A9840BB12C69F7190030F05E /* Daita */ = { isa = PBXGroup; children = ( @@ -4956,6 +5019,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A9A6258D2DBBB83D0052E20D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A946CF472DBBCF8200D6B5EC /* BoringtunWrapper.h in Headers */, + A946CF4E2DBBD87C00D6B5EC /* wireguard_ffi.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F0ACE3032BE4E478006D5333 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -5088,6 +5160,7 @@ buildRules = ( ); dependencies = ( + A946CF4D2DBBD84C00D6B5EC /* PBXTargetDependency */, A9D9A4BA2C36D2FD004088DD /* PBXTargetDependency */, 58C7A45F2A8640490060C66F /* PBXTargetDependency */, 58FE65982AB1D90600E53CB5 /* PBXTargetDependency */, @@ -5149,6 +5222,7 @@ 58B2FDD82AA71D2A003EB5C6 /* PBXTargetDependency */, F0ACE30F2BE4E478006D5333 /* PBXTargetDependency */, A992DA222C24709F00DE7CE5 /* PBXTargetDependency */, + A9A625A42DBBB83D0052E20D /* PBXTargetDependency */, ); name = MullvadVPN; packageProductDependencies = ( @@ -5358,6 +5432,26 @@ productReference = A992DA1D2C24709F00DE7CE5 /* MullvadRustRuntime.framework */; productType = "com.apple.product-type.framework"; }; + A9A625912DBBB83D0052E20D /* BoringtunWrapper */ = { + isa = PBXNativeTarget; + buildConfigurationList = A9A625B02DBBB83D0052E20D /* Build configuration list for PBXNativeTarget "BoringtunWrapper" */; + buildPhases = ( + A9A6258D2DBBB83D0052E20D /* Headers */, + A9A6258E2DBBB83D0052E20D /* Sources */, + A9A6258F2DBBB83D0052E20D /* Frameworks */, + A9A625902DBBB83D0052E20D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BoringtunWrapper; + packageProductDependencies = ( + ); + productName = BoringtunWrapper; + productReference = A9A625922DBBB83D0052E20D /* BoringtunWrapper.framework */; + productType = "com.apple.product-type.framework"; + }; A9D9A4BF2C36D53C004088DD /* MullvadRustRuntimeTests */ = { isa = PBXNativeTarget; buildConfigurationList = A9D9A4C72C36D53C004088DD /* Build configuration list for PBXNativeTarget "MullvadRustRuntimeTests" */; @@ -5410,7 +5504,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastSwiftUpdateCheck = 1520; + LastSwiftUpdateCheck = 1620; LastUpgradeCheck = 1430; ORGANIZATIONNAME = "Mullvad VPN AB"; TargetAttributes = { @@ -5482,6 +5576,10 @@ CreatedOnToolsVersion = 15.2; LastSwiftMigration = 1520; }; + A9A625912DBBB83D0052E20D = { + CreatedOnToolsVersion = 16.2; + LastSwiftMigration = 1620; + }; A9D9A4BF2C36D53C004088DD = { CreatedOnToolsVersion = 15.2; }; @@ -5526,6 +5624,7 @@ F0ACE3072BE4E478006D5333 /* MullvadMockData */, A992DA1C2C24709F00DE7CE5 /* MullvadRustRuntime */, A9D9A4BF2C36D53C004088DD /* MullvadRustRuntimeTests */, + A9A625912DBBB83D0052E20D /* BoringtunWrapper */, ); }; /* End PBXProject section */ @@ -5646,6 +5745,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A9A625902DBBB83D0052E20D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; A9D9A4BE2C36D53C004088DD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -6880,6 +6986,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A9A6258E2DBBB83D0052E20D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A946CF452DBBCF8200D6B5EC /* BoringTunWrapper.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A9D9A4BC2C36D53C004088DD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -7123,6 +7237,11 @@ target = 58D223D4294C8E5E0029F5F8 /* MullvadTypes */; targetProxy = A9173C332C36CCFB00F6A08C /* PBXContainerItemProxy */; }; + A946CF4D2DBBD84C00D6B5EC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A9A625912DBBB83D0052E20D /* BoringtunWrapper */; + targetProxy = A946CF4C2DBBD84C00D6B5EC /* PBXContainerItemProxy */; + }; A959E2402D75F37600F95DDB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 58D223D4294C8E5E0029F5F8 /* MullvadTypes */; @@ -7138,6 +7257,11 @@ target = A992DA1C2C24709F00DE7CE5 /* MullvadRustRuntime */; targetProxy = A992DA212C24709F00DE7CE5 /* PBXContainerItemProxy */; }; + A9A625A42DBBB83D0052E20D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A9A625912DBBB83D0052E20D /* BoringtunWrapper */; + targetProxy = A9A625A32DBBB83D0052E20D /* PBXContainerItemProxy */; + }; A9D9A4BA2C36D2FD004088DD /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = A992DA1C2C24709F00DE7CE5 /* MullvadRustRuntime */; @@ -7282,7 +7406,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; INFOPLIST_FILE = MullvadVPNTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -7302,7 +7425,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; INFOPLIST_FILE = MullvadVPNTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -7642,7 +7764,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273B284888BC006B77A4 /* App.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "MullvadVPN/Supporting Files/MullvadVPN.entitlements"; @@ -7670,7 +7791,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273B284888BC006B77A4 /* App.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "MullvadVPN/Supporting Files/MullvadVPN.entitlements"; @@ -7702,7 +7822,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = .; + HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = PacketTunnel/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -7729,7 +7849,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = PacketTunnel/PacketTunnel.entitlements; ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = .; + HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = PacketTunnel/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -8114,7 +8234,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Manual; @@ -8139,7 +8258,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Manual; @@ -8304,7 +8422,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273B284888BC006B77A4 /* App.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "MullvadVPN/Supporting Files/MullvadVPN.entitlements"; @@ -8353,7 +8470,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = .; + HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = PacketTunnel/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -8377,7 +8494,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; INFOPLIST_FILE = MullvadVPNTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -8719,7 +8835,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Manual; @@ -8996,6 +9111,218 @@ }; name = MockRelease; }; + A9A625A72DBBB83D0052E20D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Mullvad VPN AB. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios/debug"; + "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios-sim/debug"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/BoringtunWrapper/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).BoringtunWrapper"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A9A625A82DBBB83D0052E20D /* Staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Mullvad VPN AB. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios/debug"; + "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios-sim/debug"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/BoringtunWrapper/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).BoringtunWrapper"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Staging; + }; + A9A625A92DBBB83D0052E20D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Mullvad VPN AB. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios/release"; + "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios-sim/release"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/BoringtunWrapper/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).BoringtunWrapper"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + A9A625AA2DBBB83D0052E20D /* MockRelease */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Mullvad VPN AB. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios/release"; + "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = "$(PROJECT_DIR)/boringtun/target/aarch64-apple-ios-sim/release"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/BoringtunWrapper/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).BoringtunWrapper"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = MockRelease; + }; A9D9A4C82C36D53C004088DD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9160,7 +9487,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273B284888BC006B77A4 /* App.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "MullvadVPN/Supporting Files/MullvadVPN.entitlements"; @@ -9205,7 +9531,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = CKG9MXH72F; ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = .; + HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = PacketTunnel/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -9228,7 +9554,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; INFOPLIST_FILE = MullvadVPNTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -9567,7 +9892,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Manual; @@ -9982,6 +10306,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A9A625B02DBBB83D0052E20D /* Build configuration list for PBXNativeTarget "BoringtunWrapper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A9A625A72DBBB83D0052E20D /* Debug */, + A9A625A82DBBB83D0052E20D /* Staging */, + A9A625A92DBBB83D0052E20D /* Release */, + A9A625AA2DBBB83D0052E20D /* MockRelease */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A9D9A4C72C36D53C004088DD /* Build configuration list for PBXNativeTarget "MullvadRustRuntimeTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPN.xcscheme b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPN.xcscheme index f2cc3507bd..f093877bd8 100644 --- a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPN.xcscheme +++ b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPN.xcscheme @@ -282,6 +282,17 @@ ReferencedContainer = "container:MullvadVPN.xcodeproj"> </BuildableReference> </TestableReference> + <TestableReference + skipped = "NO" + parallelizable = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A9A625982DBBB83D0052E20D" + BuildableName = "BoringtunWrapperTests.xctest" + BlueprintName = "BoringtunWrapperTests" + ReferencedContainer = "container:MullvadVPN.xcodeproj"> + </BuildableReference> + </TestableReference> </Testables> </TestAction> <LaunchAction diff --git a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPNUITests.xcscheme b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPNUITests.xcscheme index c7c011fb01..d3a1cff60f 100644 --- a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPNUITests.xcscheme +++ b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadVPNUITests.xcscheme @@ -28,6 +28,17 @@ ReferencedContainer = "container:MullvadVPN.xcodeproj"> </BuildableReference> </TestableReference> + <TestableReference + skipped = "NO" + parallelizable = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A9A625982DBBB83D0052E20D" + BuildableName = "BoringtunWrapperTests.xctest" + BlueprintName = "BoringtunWrapperTests" + ReferencedContainer = "container:MullvadVPN.xcodeproj"> + </BuildableReference> + </TestableReference> </Testables> </TestAction> <LaunchAction diff --git a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/PacketTunnel.xcscheme b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/PacketTunnel.xcscheme index e3d0f107cf..393e070a26 100644 --- a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/PacketTunnel.xcscheme +++ b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/PacketTunnel.xcscheme @@ -51,6 +51,19 @@ reference = "container:TestPlans/MullvadVPNCI.xctestplan"> </TestPlanReference> </TestPlans> + <Testables> + <TestableReference + skipped = "NO" + parallelizable = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "A9A625982DBBB83D0052E20D" + BuildableName = "BoringtunWrapperTests.xctest" + BlueprintName = "BoringtunWrapperTests" + ReferencedContainer = "container:MullvadVPN.xcodeproj"> + </BuildableReference> + </TestableReference> + </Testables> </TestAction> <LaunchAction buildConfiguration = "Debug" @@ -80,6 +93,7 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES" + askForAppToLaunch = "Yes" launchAutomaticallySubstyle = "2"> <BuildableProductRunnable runnableDebuggingMode = "0"> diff --git a/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift b/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift index 90f1aa8d69..119ba8226a 100644 --- a/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift +++ b/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift @@ -46,6 +46,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable { providerLogger = Logger(label: "PacketTunnelProvider") providerLogger.info("Starting new packet tunnel") + BoringTunWrapper().createTunnel() + let containerURL = ApplicationConfiguration.containerURL let addressCache = REST.AddressCache(canWriteToCache: false, cacheDirectory: containerURL) addressCache.loadFromFile() diff --git a/ios/PacketTunnelCore/Actor/PacketTunnelActor.swift b/ios/PacketTunnelCore/Actor/PacketTunnelActor.swift index bf4feac3c1..cc3a58e386 100644 --- a/ios/PacketTunnelCore/Actor/PacketTunnelActor.swift +++ b/ios/PacketTunnelCore/Actor/PacketTunnelActor.swift @@ -14,6 +14,7 @@ import MullvadSettings import MullvadTypes import NetworkExtension import WireGuardKitTypes +import BoringtunWrapper /** Packet tunnel state machine implemented as an actor. @@ -168,6 +169,9 @@ extension PacketTunnelActor { private func start(options: StartOptions) async { guard case .initial = state else { return } + let wrapper = BoringTunWrapper() + wrapper.createTunnel() + logger.debug("\(options.logFormat())") // Start observing default network path to determine network reachability. |
