diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index 03de4dd1ab9a..3b3c0aaebf43 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -18,12 +18,6 @@ 063F027E2902B6EB001FA09F /* RelayCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5820675A26E6576800655B05 /* RelayCache.swift */; }; 063F027F2902B6EB001FA09F /* CachedRelays.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585DA87626B024A600B8C587 /* CachedRelays.swift */; }; 063F028F2902BD8C001FA09F /* relays.json in Resources */ = {isa = PBXBuildFile; fileRef = 58F3C0A524A50155003E76BE /* relays.json */; }; - 06410DFE292CE18F00AFC18C /* KeychainSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410DFD292CE18F00AFC18C /* KeychainSettingsStore.swift */; }; - 06410DFF292CF16C00AFC18C /* KeychainSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410DFD292CE18F00AFC18C /* KeychainSettingsStore.swift */; }; - 06410E04292D0F7100AFC18C /* SettingsParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410E03292D0F7100AFC18C /* SettingsParser.swift */; }; - 06410E05292D0FC000AFC18C /* SettingsParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410E03292D0F7100AFC18C /* SettingsParser.swift */; }; - 06410E07292D108E00AFC18C /* SettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410E06292D108E00AFC18C /* SettingsStore.swift */; }; - 06410E08292D117800AFC18C /* SettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410E06292D108E00AFC18C /* SettingsStore.swift */; }; 06799ACE28F98E1D00ACD94E /* MullvadREST.h in Headers */ = {isa = PBXBuildFile; fileRef = 06799ABE28F98E1D00ACD94E /* MullvadREST.h */; settings = {ATTRIBUTES = (Public, ); }; }; 06799AD128F98E1D00ACD94E /* MullvadREST.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06799ABC28F98E1D00ACD94E /* MullvadREST.framework */; }; 06799AD228F98E1D00ACD94E /* MullvadREST.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 06799ABC28F98E1D00ACD94E /* MullvadREST.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -49,8 +43,6 @@ 06799AF328F98E4800ACD94E /* RESTAuthenticationProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67028F83CA40033DD93 /* RESTAuthenticationProxy.swift */; }; 06799AF428F98E4800ACD94E /* RESTAuthorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67928F83CA50033DD93 /* RESTAuthorization.swift */; }; 06799AFC28F98EE300ACD94E /* AddressCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06AC114128F8413A0037AF9A /* AddressCache.swift */; }; - 068CE5742927B7A400A068BB /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068CE5732927B7A400A068BB /* Migration.swift */; }; - 068CE5782927BE4800A068BB /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068CE5732927B7A400A068BB /* Migration.swift */; }; 0697D6E728F01513007A9E99 /* TransportMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0697D6E628F01513007A9E99 /* TransportMonitor.swift */; }; 06AC116228F94C450037AF9A /* ApplicationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BFA5CB22A7CE1F00A6173D /* ApplicationConfiguration.swift */; }; 5803B4B02940A47300C23744 /* TunnelConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5803B4AF2940A47300C23744 /* TunnelConfiguration.swift */; }; @@ -65,8 +57,6 @@ 580810E92A30E17300B74552 /* DeviceCheckRemoteServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580810E72A30E15500B74552 /* DeviceCheckRemoteServiceProtocol.swift */; }; 580909D32876D09A0078138D /* RevokedDeviceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580909D22876D09A0078138D /* RevokedDeviceViewController.swift */; }; 58092E542A8B832E00C3CC72 /* TunnelMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58092E532A8B832E00C3CC72 /* TunnelMonitorTests.swift */; }; - 580F8B8328197881002E0998 /* TunnelSettingsV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8228197881002E0998 /* TunnelSettingsV2.swift */; }; - 580F8B8428197884002E0998 /* TunnelSettingsV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8228197881002E0998 /* TunnelSettingsV2.swift */; }; 5811DE50239014550011EB53 /* NEVPNStatus+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5811DE4F239014550011EB53 /* NEVPNStatus+Debug.swift */; }; 58138E61294871C600684F0C /* DeviceDataThrottling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58138E60294871C600684F0C /* DeviceDataThrottling.swift */; }; 58153071294CBE8B00D1702E /* MullvadREST.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06799ABC28F98E1D00ACD94E /* MullvadREST.framework */; }; @@ -144,7 +134,6 @@ 58727283265D173C00F315B2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 58727282265D173C00F315B2 /* LaunchScreen.storyboard */; }; 587425C12299833500CA2045 /* RootContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587425C02299833500CA2045 /* RootContainerViewController.swift */; }; 5875960A26F371FC00BF6711 /* Tunnel+Messaging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5875960926F371FC00BF6711 /* Tunnel+Messaging.swift */; }; - 5877D70F282137E8002FCFC7 /* SettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FF2C02281BDE02009EF542 /* SettingsManager.swift */; }; 5877F94E2A0A59AA0052D9E9 /* NotificationResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5877F94D2A0A59AA0052D9E9 /* NotificationResponse.swift */; }; 5878A26F2907E7E00096FC88 /* ProblemReportInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878A26E2907E7E00096FC88 /* ProblemReportInteractor.swift */; }; 5878A27129091CF20096FC88 /* AccountInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878A27029091CF20096FC88 /* AccountInteractor.swift */; }; @@ -157,8 +146,6 @@ 5878F50029CDA742003D4BE2 /* UIView+AutoLayoutBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5878F4FF29CDA742003D4BE2 /* UIView+AutoLayoutBuilder.swift */; }; 587988C728A2A01F00E3DF54 /* AccountDataThrottling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587988C628A2A01F00E3DF54 /* AccountDataThrottling.swift */; }; 587A01FC23F1F0BE00B68763 /* SimulatorTunnelProviderHost.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587A01FB23F1F0BE00B68763 /* SimulatorTunnelProviderHost.swift */; }; - 587AD7C623421D7000E93A53 /* TunnelSettingsV1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */; }; - 587AD7C723421D8600E93A53 /* TunnelSettingsV1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */; }; 587B7536266528A200DEF7E9 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587B7535266528A200DEF7E9 /* NotificationManager.swift */; }; 587B753B2666467500DEF7E9 /* NotificationBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587B753A2666467500DEF7E9 /* NotificationBannerView.swift */; }; 587B753D2666468F00DEF7E9 /* NotificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587B753C2666468F00DEF7E9 /* NotificationController.swift */; }; @@ -181,17 +168,13 @@ 58907D9524D17B4E00CFC3F5 /* DisconnectSplitButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58907D9424D17B4E00CFC3F5 /* DisconnectSplitButton.swift */; }; 58915D632A25F8400066445B /* DeviceCheckOperationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58915D622A25F8400066445B /* DeviceCheckOperationTests.swift */; }; 58915D642A25F8B30066445B /* DeviceCheckOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FDF2D82A0BA11900C2B061 /* DeviceCheckOperation.swift */; }; - 58915D652A25F9E20066445B /* TunnelSettingsV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8228197881002E0998 /* TunnelSettingsV2.swift */; }; 58915D682A25FA080066445B /* DeviceCheckRemoteService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58915D672A25FA080066445B /* DeviceCheckRemoteService.swift */; }; 58915D692A2601FB0066445B /* WgKeyRotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581DA2742A1E283E0046ED47 /* WgKeyRotation.swift */; }; - 58915D6A2A26031B0066445B /* DNSSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8528197958002E0998 /* DNSSettings.swift */; }; 58915D6E2A26037A0066445B /* WireGuardKitTypes in Frameworks */ = {isa = PBXBuildFile; productRef = 58915D6D2A26037A0066445B /* WireGuardKitTypes */; }; 5891BF1C25E3E3EB006D6FB0 /* Bundle+ProductVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5891BF1B25E3E3EB006D6FB0 /* Bundle+ProductVersion.swift */; }; 5891BF5125E66B1E006D6FB0 /* UIBarButtonItem+KeyboardNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5891BF5025E66B1E006D6FB0 /* UIBarButtonItem+KeyboardNavigation.swift */; }; 5892A45E265FABFF00890742 /* EmptyTableViewHeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5892A45D265FABFF00890742 /* EmptyTableViewHeaderFooterView.swift */; }; 5893716A28817A45004EE76C /* DeviceManagementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5893716928817A45004EE76C /* DeviceManagementViewController.swift */; }; - 5893C6F929C1B480009090D1 /* DNSSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8528197958002E0998 /* DNSSettings.swift */; }; - 5893C6FA29C1B481009090D1 /* DNSSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8528197958002E0998 /* DNSSettings.swift */; }; 58968FAE28743E2000B799DC /* TunnelInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58968FAD28743E2000B799DC /* TunnelInteractor.swift */; }; 5896AE84246D5889005B36CB /* CustomDateComponentsFormatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5896AE83246D5889005B36CB /* CustomDateComponentsFormatting.swift */; }; 5896AE86246D6AD8005B36CB /* CustomDateComponentsFormattingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5896AE85246D6AD8005B36CB /* CustomDateComponentsFormattingTests.swift */; }; @@ -233,6 +216,24 @@ 58B26E262943522400D5980C /* NotificationProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B26E252943522400D5980C /* NotificationProvider.swift */; }; 58B26E282943527300D5980C /* SystemNotificationProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B26E272943527300D5980C /* SystemNotificationProvider.swift */; }; 58B26E2A2943545A00D5980C /* NotificationManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B26E292943545A00D5980C /* NotificationManagerDelegate.swift */; }; + 58B2FDD62AA71D2A003EB5C6 /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B2FDD52AA71D2A003EB5C6 /* Settings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58B2FDD92AA71D2A003EB5C6 /* Settings.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B2FDD32AA71D2A003EB5C6 /* Settings.framework */; }; + 58B2FDDA2AA71D2A003EB5C6 /* Settings.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 58B2FDD32AA71D2A003EB5C6 /* Settings.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 58B2FDDE2AA71D5C003EB5C6 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068CE5732927B7A400A068BB /* Migration.swift */; }; + 58B2FDDF2AA71D5C003EB5C6 /* DNSSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8528197958002E0998 /* DNSSettings.swift */; }; + 58B2FDE02AA71D5C003EB5C6 /* TunnelSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC202A77FFAF0052F1B1 /* TunnelSettings.swift */; }; + 58B2FDE12AA71D5C003EB5C6 /* TunnelSettingsV1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */; }; + 58B2FDE22AA71D5C003EB5C6 /* StoredAccountData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC232A7802520052F1B1 /* StoredAccountData.swift */; }; + 58B2FDE32AA71D5C003EB5C6 /* StoredDeviceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */; }; + 58B2FDE42AA71D5C003EB5C6 /* SettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FF2C02281BDE02009EF542 /* SettingsManager.swift */; }; + 58B2FDE52AA71D5C003EB5C6 /* TunnelSettingsV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580F8B8228197881002E0998 /* TunnelSettingsV2.swift */; }; + 58B2FDE62AA71D5C003EB5C6 /* DeviceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */; }; + 58B2FDE72AA71D5C003EB5C6 /* SettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410E06292D108E00AFC18C /* SettingsStore.swift */; }; + 58B2FDE82AA71D5C003EB5C6 /* KeychainSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410DFD292CE18F00AFC18C /* KeychainSettingsStore.swift */; }; + 58B2FDE92AA71D5C003EB5C6 /* SettingsParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06410E03292D0F7100AFC18C /* SettingsParser.swift */; }; + 58B2FDEB2AA72049003EB5C6 /* WireGuardKitTypes in Frameworks */ = {isa = PBXBuildFile; productRef = 58B2FDEA2AA72049003EB5C6 /* WireGuardKitTypes */; }; + 58B2FDEE2AA72098003EB5C6 /* ApplicationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BFA5CB22A7CE1F00A6173D /* ApplicationConfiguration.swift */; }; + 58B2FDEF2AA720C4003EB5C6 /* ApplicationTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58C76A072A33850E00100D75 /* ApplicationTarget.swift */; }; 58B43C1925F77DB60002C8C3 /* TunnelControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B43C1825F77DB60002C8C3 /* TunnelControlView.swift */; }; 58B465702A98C53300467203 /* RequestExecutorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B4656F2A98C53300467203 /* RequestExecutorTests.swift */; }; 58B8644629C7972F005E107C /* CustomDateComponentsFormatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5896AE83246D5889005B36CB /* CustomDateComponentsFormatting.swift */; }; @@ -385,8 +386,13 @@ 58FD5BF024238EB300112C88 /* SKProduct+Formatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FD5BEF24238EB300112C88 /* SKProduct+Formatting.swift */; }; 58FD5BF42428C67600112C88 /* InAppPurchaseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FD5BF32428C67600112C88 /* InAppPurchaseButton.swift */; }; 58FDF2D92A0BA11A00C2B061 /* DeviceCheckOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FDF2D82A0BA11900C2B061 /* DeviceCheckOperation.swift */; }; + 58FE25BB2AA72188003D1918 /* MullvadLogging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58D223F3294C8FF00029F5F8 /* MullvadLogging.framework */; }; + 58FE25BF2AA72311003D1918 /* MigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D96B192A8247C100A5C673 /* MigrationManager.swift */; }; + 58FE25C22AA72729003D1918 /* MullvadREST.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06799ABC28F98E1D00ACD94E /* MullvadREST.framework */; }; + 58FE25C62AA72779003D1918 /* PacketTunnelCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58C7A4362A863F440060C66F /* PacketTunnelCore.framework */; }; + 58FE25CB2AA727A9003D1918 /* libRelaySelector.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5898D29829017DAC00EB5EBA /* libRelaySelector.a */; }; + 58FE25CE2AA72802003D1918 /* Settings.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B2FDD32AA71D2A003EB5C6 /* Settings.framework */; }; 58FEEB58260B662E00A621A8 /* AutomaticKeyboardResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FEEB57260B662E00A621A8 /* AutomaticKeyboardResponder.swift */; }; - 58FF2C03281BDE02009EF542 /* SettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FF2C02281BDE02009EF542 /* SettingsManager.swift */; }; 7A02D4EB2A9CEC7A00C19E31 /* MullvadVPNScreenshots.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 7A02D4EA2A9CEC7A00C19E31 /* MullvadVPNScreenshots.xctestplan */; }; 7A09C98129D99215000C2CAC /* String+FuzzyMatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A09C98029D99215000C2CAC /* String+FuzzyMatch.swift */; }; 7A0C0F632A979C4A0058EFCE /* Coordinator+Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A0C0F622A979C4A0058EFCE /* Coordinator+Router.swift */; }; @@ -447,20 +453,11 @@ 7AF9BE992A4E0FE900DBFEDB /* MarkdownStylingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF9BE982A4E0FE900DBFEDB /* MarkdownStylingOptions.swift */; }; A917351F29FAA9C400D5DCFD /* RESTTransportStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A917351E29FAA9C400D5DCFD /* RESTTransportStrategy.swift */; }; A917352129FAAA5200D5DCFD /* TransportStrategyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A917352029FAAA5200D5DCFD /* TransportStrategyTests.swift */; }; - A92ECC212A77FFAF0052F1B1 /* TunnelSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC202A77FFAF0052F1B1 /* TunnelSettings.swift */; }; - A92ECC222A77FFAF0052F1B1 /* TunnelSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC202A77FFAF0052F1B1 /* TunnelSettings.swift */; }; - A92ECC242A7802520052F1B1 /* StoredAccountData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC232A7802520052F1B1 /* StoredAccountData.swift */; }; - A92ECC252A7802520052F1B1 /* StoredAccountData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC232A7802520052F1B1 /* StoredAccountData.swift */; }; - A92ECC262A7802520052F1B1 /* StoredAccountData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC232A7802520052F1B1 /* StoredAccountData.swift */; }; - A92ECC282A7802AB0052F1B1 /* StoredDeviceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */; }; - A92ECC292A7802AB0052F1B1 /* StoredDeviceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */; }; - A92ECC2A2A7802AB0052F1B1 /* StoredDeviceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */; }; - A92ECC2C2A7803A50052F1B1 /* DeviceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */; }; - A92ECC2D2A7803A50052F1B1 /* DeviceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */; }; - A92ECC2E2A7803A60052F1B1 /* DeviceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */; }; A93D13782A1F60A6001EB0B1 /* shadowsocks.h in Headers */ = {isa = PBXBuildFile; fileRef = 586F2BE129F6916F009E6924 /* shadowsocks.h */; settings = {ATTRIBUTES = (Private, ); }; }; A9467E7F2A29DEFE000DC21F /* RelayCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9467E7E2A29DEFE000DC21F /* RelayCacheTests.swift */; }; A9467E802A29E0A6000DC21F /* AddressCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9CF11FC2A0518E7001D9565 /* AddressCacheTests.swift */; }; + A94D691A2ABAD66700413DD4 /* WireGuardKitTypes in Frameworks */ = {isa = PBXBuildFile; productRef = 58FE25E22AA72AE9003D1918 /* WireGuardKitTypes */; }; + A94D691B2ABAD66700413DD4 /* WireGuardKitTypes in Frameworks */ = {isa = PBXBuildFile; productRef = 58FE25E72AA7399D003D1918 /* WireGuardKitTypes */; }; A95F86B72A1F53BA00245DAC /* URLSessionTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67C28F83CA50033DD93 /* URLSessionTransport.swift */; }; A95F86B82A1F547000245DAC /* ShadowsocksProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F1FF1B29F06124007083C3 /* ShadowsocksProxy.swift */; }; A97F1F442A1F4E1A00ECEFDE /* MullvadTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = A97F1F432A1F4E1A00ECEFDE /* MullvadTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -470,8 +467,6 @@ A9A8A8EB2A262AB30086D569 /* FileCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A8A8EA2A262AB30086D569 /* FileCache.swift */; }; A9AD31D72A6AB68B00141BE8 /* InputTextFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582AE30F2440A6CA00E6733A /* InputTextFormatter.swift */; }; A9B2CF722A1F64CD0013CC6C /* MullvadREST.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06799ABC28F98E1D00ACD94E /* MullvadREST.framework */; }; - A9D96B1A2A8247C100A5C673 /* MigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D96B192A8247C100A5C673 /* MigrationManager.swift */; }; - A9D96B1B2A8248F200A5C673 /* MigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D96B192A8247C100A5C673 /* MigrationManager.swift */; }; A9D99B9A2A1F7C3200DE27D3 /* RESTTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67D28F83CA50033DD93 /* RESTTransport.swift */; }; A9D99BA02A1F7F3A00DE27D3 /* TransportProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D99B9F2A1F7F3A00DE27D3 /* TransportProvider.swift */; }; A9D99BA52A1F808900DE27D3 /* RelayCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 063F02732902B63F001FA09F /* RelayCache.framework */; }; @@ -581,6 +576,13 @@ remoteGlobalIDString = 06799ABB28F98E1D00ACD94E; remoteInfo = MullvadREST; }; + 58B2FDD72AA71D2A003EB5C6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 58B2FDD22AA71D2A003EB5C6; + remoteInfo = Settings; + }; 58C7A43F2A863F470060C66F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 58CE5E58224146200008646E /* Project object */; @@ -770,6 +772,41 @@ remoteGlobalIDString = 06799ABB28F98E1D00ACD94E; remoteInfo = MullvadREST; }; + 58FE25BD2AA72188003D1918 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 58D223F2294C8FF00029F5F8; + remoteInfo = MullvadLogging; + }; + 58FE25C42AA72729003D1918 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 06799ABB28F98E1D00ACD94E; + remoteInfo = MullvadREST; + }; + 58FE25C82AA72779003D1918 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 58C7A4352A863F440060C66F; + remoteInfo = PacketTunnelCore; + }; + 58FE25CC2AA727A9003D1918 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5898D29729017DAC00EB5EBA; + remoteInfo = RelaySelector; + }; + 58FE25D02AA72802003D1918 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 58CE5E58224146200008646E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 58B2FDD22AA71D2A003EB5C6; + remoteInfo = Settings; + }; 7A88DCD92A8FABBE00D2FF0E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 58CE5E58224146200008646E /* Project object */; @@ -865,6 +902,7 @@ files = ( 58D223E7294C8F120029F5F8 /* MullvadTypes.framework in Embed Frameworks */, 58D223FA294C8FF10029F5F8 /* MullvadLogging.framework in Embed Frameworks */, + 58B2FDDA2AA71D2A003EB5C6 /* Settings.framework in Embed Frameworks */, A9EC20F02A5D79ED0040D56E /* TunnelObfuscation.framework in Embed Frameworks */, 7ABCA5B42A9349F20044A708 /* Routing.framework in Embed Frameworks */, 06799AD228F98E1D00ACD94E /* MullvadREST.framework in Embed Frameworks */, @@ -945,6 +983,26 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 58FE25E52AA72AE9003D1918 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 58FE25E92AA7399D003D1918 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; 7A88DCF02A8FB08D00D2FF0E /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -1214,6 +1272,8 @@ 58B26E252943522400D5980C /* NotificationProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationProvider.swift; sourceTree = ""; }; 58B26E272943527300D5980C /* SystemNotificationProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemNotificationProvider.swift; sourceTree = ""; }; 58B26E292943545A00D5980C /* NotificationManagerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManagerDelegate.swift; sourceTree = ""; }; + 58B2FDD32AA71D2A003EB5C6 /* Settings.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Settings.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 58B2FDD52AA71D2A003EB5C6 /* Settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; 58B43C1825F77DB60002C8C3 /* TunnelControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelControlView.swift; sourceTree = ""; }; 58B4656F2A98C53300467203 /* RequestExecutorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestExecutorTests.swift; sourceTree = ""; }; 58B93A1226C3F13600A55733 /* TunnelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelState.swift; sourceTree = ""; }; @@ -1389,7 +1449,6 @@ F028A5692A34D4E700C0CAA3 /* RedeemVoucherViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RedeemVoucherViewController.swift; sourceTree = ""; }; F028A56B2A34D8E600C0CAA3 /* AddCreditSucceededViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddCreditSucceededViewController.swift; sourceTree = ""; }; F03580242A13842C00E5DAFD /* IncreasedHitButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncreasedHitButton.swift; sourceTree = ""; }; - F0465B5B2A7927B40004089E /* AddCreditSucceededCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCreditSucceededCoordinator.swift; sourceTree = ""; }; F04FBE602A8379EE009278D7 /* AppPreferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPreferences.swift; sourceTree = ""; }; F07BF2572A26112D00042943 /* InputTextFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputTextFormatterTests.swift; sourceTree = ""; }; F07BF2612A26279100042943 /* RedeemVoucherOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RedeemVoucherOperation.swift; sourceTree = ""; }; @@ -1401,7 +1460,6 @@ F0C2AEFC2A0BB5CC00986207 /* NotificationProviderIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationProviderIdentifier.swift; sourceTree = ""; }; F0C6A8422AB08E54000777A8 /* RedeemVoucherViewConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedeemVoucherViewConfiguration.swift; sourceTree = ""; }; F0C6FA802A66E23300F521F0 /* DeleteAccountOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteAccountOperation.swift; sourceTree = ""; }; - F0C6FA822A6A729500F521F0 /* InAppPurchaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppPurchaseCoordinator.swift; sourceTree = ""; }; F0C6FA842A6A733700F521F0 /* InAppPurchaseInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppPurchaseInteractor.swift; sourceTree = ""; }; F0DA87462A9CB9A2006044F1 /* AccountExpiryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountExpiryRow.swift; sourceTree = ""; }; F0DA87482A9CBA9F006044F1 /* AccountDeviceRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeviceRow.swift; sourceTree = ""; }; @@ -1489,10 +1547,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 58B2FDD02AA71D2A003EB5C6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 58FE25BB2AA72188003D1918 /* MullvadLogging.framework in Frameworks */, + 58B2FDEB2AA72049003EB5C6 /* WireGuardKitTypes in Frameworks */, + 58FE25C22AA72729003D1918 /* MullvadREST.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 58C7A4332A863F440060C66F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A94D691A2ABAD66700413DD4 /* WireGuardKitTypes in Frameworks */, + 58FE25CB2AA727A9003D1918 /* libRelaySelector.a in Frameworks */, 58C7A45C2A8640490060C66F /* MullvadLogging.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1501,6 +1571,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A94D691B2ABAD66700413DD4 /* WireGuardKitTypes in Frameworks */, 58C7A43E2A863F470060C66F /* PacketTunnelCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1520,6 +1591,7 @@ 06799AD128F98E1D00ACD94E /* MullvadREST.framework in Frameworks */, 063F02792902B63F001FA09F /* RelayCache.framework in Frameworks */, A97F1F472A1F4E1A00ECEFDE /* MullvadTransport.framework in Frameworks */, + 58B2FDD92AA71D2A003EB5C6 /* Settings.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1528,6 +1600,8 @@ buildActionMask = 2147483647; files = ( 589C6A7D2A45B06800DAD3EF /* TunnelObfuscation.framework in Frameworks */, + 58FE25C62AA72779003D1918 /* PacketTunnelCore.framework in Frameworks */, + 58FE25CE2AA72802003D1918 /* Settings.framework in Frameworks */, A9D99BA92A1F81B700DE27D3 /* MullvadTransport.framework in Frameworks */, 5898D2AB2901845400EB5EBA /* libRelaySelector.a in Frameworks */, 5898D2AC2901845400EB5EBA /* libTunnelProviderMessaging.a in Frameworks */, @@ -1685,25 +1759,6 @@ path = Router; sourceTree = ""; }; - 580F8B88281A79A7002E0998 /* SettingsManager */ = { - isa = PBXGroup; - children = ( - 580F8B8528197958002E0998 /* DNSSettings.swift */, - 06410DFD292CE18F00AFC18C /* KeychainSettingsStore.swift */, - 068CE5732927B7A400A068BB /* Migration.swift */, - 58FF2C02281BDE02009EF542 /* SettingsManager.swift */, - 06410E03292D0F7100AFC18C /* SettingsParser.swift */, - 06410E06292D108E00AFC18C /* SettingsStore.swift */, - A92ECC232A7802520052F1B1 /* StoredAccountData.swift */, - A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */, - 587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */, - 580F8B8228197881002E0998 /* TunnelSettingsV2.swift */, - A92ECC202A77FFAF0052F1B1 /* TunnelSettings.swift */, - A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */, - ); - path = SettingsManager; - sourceTree = ""; - }; 581943F228F8014500B0CB5E /* MullvadTypes */ = { isa = PBXGroup; children = ( @@ -2260,6 +2315,27 @@ path = UI; sourceTree = ""; }; + 58B2FDD42AA71D2A003EB5C6 /* Settings */ = { + isa = PBXGroup; + children = ( + 58B2FDD52AA71D2A003EB5C6 /* Settings.h */, + 580F8B8528197958002E0998 /* DNSSettings.swift */, + 06410DFD292CE18F00AFC18C /* KeychainSettingsStore.swift */, + 068CE5732927B7A400A068BB /* Migration.swift */, + 58FF2C02281BDE02009EF542 /* SettingsManager.swift */, + 06410E03292D0F7100AFC18C /* SettingsParser.swift */, + 06410E06292D108E00AFC18C /* SettingsStore.swift */, + A92ECC232A7802520052F1B1 /* StoredAccountData.swift */, + A92ECC272A7802AB0052F1B1 /* StoredDeviceData.swift */, + 587AD7C523421D7000E93A53 /* TunnelSettingsV1.swift */, + 580F8B8228197881002E0998 /* TunnelSettingsV2.swift */, + A92ECC202A77FFAF0052F1B1 /* TunnelSettings.swift */, + A92ECC2B2A7803A50052F1B1 /* DeviceState.swift */, + A9D96B192A8247C100A5C673 /* MigrationManager.swift */, + ); + path = Settings; + sourceTree = ""; + }; 58BDEB9E2A98F6B400F578F2 /* Mocks */ = { isa = PBXGroup; children = ( @@ -2365,9 +2441,9 @@ 58C7A4432A863F490060C66F /* PacketTunnelCoreTests */, 7A88DCCF2A8FABBE00D2FF0E /* Routing */, 7A88DCDD2A8FABBE00D2FF0E /* RoutingTests */, + 58B2FDD42AA71D2A003EB5C6 /* Settings */, 58CE5E61224146200008646E /* Products */, 584F991F2902CBDD001F858D /* Frameworks */, - F0EF50D02A8FA2C00031E8DF /* Recovered References */, ); sourceTree = ""; }; @@ -2394,6 +2470,7 @@ 58C7A43D2A863F460060C66F /* PacketTunnelCoreTests.xctest */, 7A88DCCE2A8FABBE00D2FF0E /* Routing.framework */, 7A88DCD72A8FABBE00D2FF0E /* RoutingTests.xctest */, + 58B2FDD32AA71D2A003EB5C6 /* Settings.framework */, ); name = Products; sourceTree = ""; @@ -2408,14 +2485,12 @@ 58C774C929AB543C003A1A56 /* Containers */, 58CAF9F22983D32200BE19F7 /* Coordinators */, 583FE02329C1AC9F006E85F9 /* Extensions */, - A9D96B182A82479700A5C673 /* MigrationManager */, 58B26E1F2943516500D5980C /* Notifications */, 586A950B2901250A007BAF2B /* Operations */, 5864859729A0D012006C5743 /* Presentation controllers */, 5864AF0629C78816005B0CD9 /* Protocols */, 585DA87526B0249A00B8C587 /* RelayCacheTracker */, 58E25F802837BBBB002CFB2C /* SceneDelegate.swift */, - 580F8B88281A79A7002E0998 /* SettingsManager */, 583FE02629C1ADB6006E85F9 /* SimulatorTunnelProvider */, 5846226F26E229CD0035F7C2 /* StorePaymentManager */, 583FE02929C1B0E1006E85F9 /* Supporting Files */, @@ -2627,14 +2702,6 @@ path = MullvadTransport; sourceTree = ""; }; - A9D96B182A82479700A5C673 /* MigrationManager */ = { - isa = PBXGroup; - children = ( - A9D96B192A8247C100A5C673 /* MigrationManager.swift */, - ); - path = MigrationManager; - sourceTree = ""; - }; F028A5472A336E1900C0CAA3 /* RedeemVoucher */ = { isa = PBXGroup; children = ( @@ -2689,15 +2756,6 @@ path = AccountDeletion; sourceTree = ""; }; - F0EF50D02A8FA2C00031E8DF /* Recovered References */ = { - isa = PBXGroup; - children = ( - F0C6FA822A6A729500F521F0 /* InAppPurchaseCoordinator.swift */, - F0465B5B2A7927B40004089E /* AddCreditSucceededCoordinator.swift */, - ); - name = "Recovered References"; - sourceTree = ""; - }; F0EF50D12A8FA47E0031E8DF /* ChangeLog */ = { isa = PBXGroup; children = ( @@ -2735,6 +2793,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 58B2FDCE2AA71D2A003EB5C6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 58B2FDD62AA71D2A003EB5C6 /* Settings.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 58C7A4312A863F440060C66F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2970,6 +3036,28 @@ productReference = 58B0A2A0238EE67E00BC001D /* MullvadVPNTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + 58B2FDD22AA71D2A003EB5C6 /* Settings */ = { + isa = PBXNativeTarget; + buildConfigurationList = 58B2FDDD2AA71D2B003EB5C6 /* Build configuration list for PBXNativeTarget "Settings" */; + buildPhases = ( + 58B2FDCE2AA71D2A003EB5C6 /* Headers */, + 58B2FDCF2AA71D2A003EB5C6 /* Sources */, + 58B2FDD02AA71D2A003EB5C6 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 58FE25BE2AA72188003D1918 /* PBXTargetDependency */, + 58FE25C52AA72729003D1918 /* PBXTargetDependency */, + ); + name = Settings; + packageProductDependencies = ( + 58B2FDEA2AA72049003EB5C6 /* WireGuardKitTypes */, + ); + productName = Settings; + productReference = 58B2FDD32AA71D2A003EB5C6 /* Settings.framework */; + productType = "com.apple.product-type.framework"; + }; 58C7A4352A863F440060C66F /* PacketTunnelCore */ = { isa = PBXNativeTarget; buildConfigurationList = 58C7A44B2A863F4A0060C66F /* Build configuration list for PBXNativeTarget "PacketTunnelCore" */; @@ -2978,13 +3066,18 @@ 58C7A4322A863F440060C66F /* Sources */, 58C7A4332A863F440060C66F /* Frameworks */, 58C7A4342A863F440060C66F /* Resources */, + 58FE25E52AA72AE9003D1918 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( 58C7A45F2A8640490060C66F /* PBXTargetDependency */, + 58FE25CD2AA727A9003D1918 /* PBXTargetDependency */, ); name = PacketTunnelCore; + packageProductDependencies = ( + 58FE25E22AA72AE9003D1918 /* WireGuardKitTypes */, + ); productName = PacketTunnelCore; productReference = 58C7A4362A863F440060C66F /* PacketTunnelCore.framework */; productType = "com.apple.product-type.framework"; @@ -2996,6 +3089,7 @@ 58C7A4392A863F450060C66F /* Sources */, 58C7A43A2A863F450060C66F /* Frameworks */, 58C7A43B2A863F450060C66F /* Resources */, + 58FE25E92AA7399D003D1918 /* Embed Frameworks */, ); buildRules = ( ); @@ -3004,6 +3098,9 @@ 58C7A4722A864B860060C66F /* PBXTargetDependency */, ); name = PacketTunnelCoreTests; + packageProductDependencies = ( + 58FE25E72AA7399D003D1918 /* WireGuardKitTypes */, + ); productName = PacketTunnelCoreTests; productReference = 58C7A43D2A863F460060C66F /* PacketTunnelCoreTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; @@ -3034,6 +3131,7 @@ A9EC20F22A5D79ED0040D56E /* PBXTargetDependency */, 58C7A4482A863F490060C66F /* PBXTargetDependency */, 7ABCA5B62A9349F20044A708 /* PBXTargetDependency */, + 58B2FDD82AA71D2A003EB5C6 /* PBXTargetDependency */, ); name = MullvadVPN; packageProductDependencies = ( @@ -3065,6 +3163,8 @@ 063F028C2902B83C001FA09F /* PBXTargetDependency */, 58FBDAA222A52A6800EB69A3 /* PBXTargetDependency */, 58153074294CBE8B00D1702E /* PBXTargetDependency */, + 58FE25C92AA72779003D1918 /* PBXTargetDependency */, + 58FE25D12AA72802003D1918 /* PBXTargetDependency */, ); name = PacketTunnel; packageProductDependencies = ( @@ -3364,6 +3464,7 @@ 58695A9C2A4ADA9100328DB3 /* TunnelObfuscationTests */, 58C7A4352A863F440060C66F /* PacketTunnelCore */, 58C7A43C2A863F450060C66F /* PacketTunnelCoreTests */, + 58B2FDD22AA71D2A003EB5C6 /* Settings */, 7A88DCCD2A8FABBE00D2FF0E /* Routing */, 7A88DCD62A8FABBE00D2FF0E /* RoutingTests */, ); @@ -3701,16 +3802,11 @@ buildActionMask = 2147483647; files = ( A9AD31D72A6AB68B00141BE8 /* InputTextFormatter.swift in Sources */, - 58915D6A2A26031B0066445B /* DNSSettings.swift in Sources */, - A92ECC262A7802520052F1B1 /* StoredAccountData.swift in Sources */, 58915D692A2601FB0066445B /* WgKeyRotation.swift in Sources */, - A92ECC2A2A7802AB0052F1B1 /* StoredDeviceData.swift in Sources */, - A92ECC2E2A7803A60052F1B1 /* DeviceState.swift in Sources */, 580810E62A30E13D00B74552 /* DeviceStateAccessorProtocol.swift in Sources */, 58C3FA662A38549D006A450A /* MockFileCache.swift in Sources */, 58915D642A25F8B30066445B /* DeviceCheckOperation.swift in Sources */, 7AF6E5F12A95F4A500F2679D /* DurationTests.swift in Sources */, - 58915D652A25F9E20066445B /* TunnelSettingsV2.swift in Sources */, A9467E7F2A29DEFE000DC21F /* RelayCacheTests.swift in Sources */, 582A8A3A28BCE19B00D0F9FB /* FixedWidthIntegerArithmeticsTests.swift in Sources */, 58915D632A25F8400066445B /* DeviceCheckOperationTests.swift in Sources */, @@ -3728,6 +3824,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 58B2FDCF2AA71D2A003EB5C6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 58B2FDEE2AA72098003EB5C6 /* ApplicationConfiguration.swift in Sources */, + 58B2FDE52AA71D5C003EB5C6 /* TunnelSettingsV2.swift in Sources */, + 58B2FDE32AA71D5C003EB5C6 /* StoredDeviceData.swift in Sources */, + 58B2FDDF2AA71D5C003EB5C6 /* DNSSettings.swift in Sources */, + 58B2FDE02AA71D5C003EB5C6 /* TunnelSettings.swift in Sources */, + 58B2FDE42AA71D5C003EB5C6 /* SettingsManager.swift in Sources */, + 58B2FDE62AA71D5C003EB5C6 /* DeviceState.swift in Sources */, + 58FE25BF2AA72311003D1918 /* MigrationManager.swift in Sources */, + 58B2FDEF2AA720C4003EB5C6 /* ApplicationTarget.swift in Sources */, + 58B2FDDE2AA71D5C003EB5C6 /* Migration.swift in Sources */, + 58B2FDE12AA71D5C003EB5C6 /* TunnelSettingsV1.swift in Sources */, + 58B2FDE72AA71D5C003EB5C6 /* SettingsStore.swift in Sources */, + 58B2FDE92AA71D5C003EB5C6 /* SettingsParser.swift in Sources */, + 58B2FDE22AA71D5C003EB5C6 /* StoredAccountData.swift in Sources */, + 58B2FDE82AA71D5C003EB5C6 /* KeychainSettingsStore.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 58C7A4322A863F440060C66F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3782,14 +3900,12 @@ 5846227126E229F20035F7C2 /* StoreSubscription.swift in Sources */, 58421030282D8A3C00F24E46 /* UpdateAccountDataOperation.swift in Sources */, F0E8E4C92A604E7400ED26A3 /* AccountDeletionInteractor.swift in Sources */, - 58FF2C03281BDE02009EF542 /* SettingsManager.swift in Sources */, A9F360342AAB626300F53531 /* VPNConnectionProtocol.swift in Sources */, F09A297D2A9F8A9B00EA3B6F /* RedeemVoucherContentView.swift in Sources */, 5803B4B02940A47300C23744 /* TunnelConfiguration.swift in Sources */, 587EB672271451E300123C75 /* PreferencesViewModel.swift in Sources */, 586A950C290125EE007BAF2B /* AlertPresenter.swift in Sources */, 58C3F4F92964B08300D72515 /* MapViewController.swift in Sources */, - A92ECC2C2A7803A50052F1B1 /* DeviceState.swift in Sources */, 584D26C6270C8741004EA533 /* SettingsDNSTextCell.swift in Sources */, 58F2E148276A307400A79513 /* MapConnectionStatusOperation.swift in Sources */, 58BA693123EADA6A009DC256 /* SimulatorTunnelProvider.swift in Sources */, @@ -3807,8 +3923,6 @@ F03580252A13842C00E5DAFD /* IncreasedHitButton.swift in Sources */, 58F8AC0E25D3F8CE002BE0ED /* ProblemReportReviewViewController.swift in Sources */, 5878A27129091CF20096FC88 /* AccountInteractor.swift in Sources */, - 068CE5742927B7A400A068BB /* Migration.swift in Sources */, - A92ECC282A7802AB0052F1B1 /* StoredDeviceData.swift in Sources */, 58CCA010224249A1004F3011 /* TunnelViewController.swift in Sources */, 58B26E22294351EA00D5980C /* InAppNotificationProvider.swift in Sources */, 5893716A28817A45004EE76C /* DeviceManagementViewController.swift in Sources */, @@ -3818,7 +3932,6 @@ E158B360285381C60002F069 /* String+AccountFormatting.swift in Sources */, 582BB1B1229569620055B6EF /* UINavigationBar+Appearance.swift in Sources */, 58ACF6492655365700ACE4B7 /* PreferencesViewController.swift in Sources */, - A9D96B1A2A8247C100A5C673 /* MigrationManager.swift in Sources */, 7ABE318D2A1CDD4500DF4963 /* UIFont+Weight.swift in Sources */, 58C774BE29A7A249003A1A56 /* CustomNavigationController.swift in Sources */, E1FD0DF528AA7CE400299DB4 /* StatusActivityView.swift in Sources */, @@ -3856,12 +3969,10 @@ 58EF581125D69DB400AEBA94 /* StatusImageView.swift in Sources */, 58907D9524D17B4E00CFC3F5 /* DisconnectSplitButton.swift in Sources */, 58EE2E3B272FF814003BFF93 /* SettingsDataSourceDelegate.swift in Sources */, - A92ECC242A7802520052F1B1 /* StoredAccountData.swift in Sources */, 5823FA5426CE49F700283BF8 /* TunnelObserver.swift in Sources */, 5888AD87227B17950051EB06 /* SelectLocationViewController.swift in Sources */, 58293FB3251241B4005D0BB5 /* CustomTextView.swift in Sources */, 586A950E290125F3007BAF2B /* ProductsRequestOperation.swift in Sources */, - 5893C6F929C1B480009090D1 /* DNSSettings.swift in Sources */, 58F19E35228C15BA00C7710B /* SpinnerActivityIndicatorView.swift in Sources */, 5864859929A0D028006C5743 /* FormsheetPresentationController.swift in Sources */, 7A9CCCB52A96302800DD6A34 /* AddCreditSucceededCoordinator.swift in Sources */, @@ -3894,7 +4005,6 @@ 585B4B8726D9098900555C4C /* TunnelStatusNotificationProvider.swift in Sources */, 063F026628FFE11C001FA09F /* RESTCreateApplePaymentResponse+Localization.swift in Sources */, 58DF28A52417CB4B00E836B0 /* StorePaymentManager.swift in Sources */, - A92ECC212A77FFAF0052F1B1 /* TunnelSettings.swift in Sources */, 583DA21425FA4B5C00318683 /* LocationDataSource.swift in Sources */, 587EB6742714520600123C75 /* PreferencesDataSourceDelegate.swift in Sources */, 582BB1AF229566420055B6EF /* SettingsCell.swift in Sources */, @@ -3929,7 +4039,6 @@ 5835B7CC233B76CB0096D79F /* TunnelManager.swift in Sources */, 58607A4D2947287800BC467D /* AccountExpiryInAppNotificationProvider.swift in Sources */, 58C8191829FAA2C400DEB1B4 /* NotificationConfiguration.swift in Sources */, - 06410E07292D108E00AFC18C /* SettingsStore.swift in Sources */, 7A7AD28F29DEDB1C00480EF1 /* SettingsHeaderView.swift in Sources */, 58B93A1326C3F13600A55733 /* TunnelState.swift in Sources */, 58B26E262943522400D5980C /* NotificationProvider.swift in Sources */, @@ -3942,7 +4051,6 @@ F0E8E4C12A602CCB00ED26A3 /* AccountDeletionContentView.swift in Sources */, 58B26E1E2943514300D5980C /* InAppNotificationDescriptor.swift in Sources */, 58421032282E42B000F24E46 /* UpdateDeviceDataOperation.swift in Sources */, - 06410E04292D0F7100AFC18C /* SettingsParser.swift in Sources */, 5878A27D2909657C0096FC88 /* RevokedDeviceInteractor.swift in Sources */, F0E8E4C32A602E0D00ED26A3 /* AccountDeletionViewModel.swift in Sources */, 58677710290975E9006F721F /* SettingsInteractorFactory.swift in Sources */, @@ -3954,7 +4062,6 @@ 581DA2752A1E283E0046ED47 /* WgKeyRotation.swift in Sources */, 7A83C4022A57FAA800DFB83A /* SettingsDNSInfoCell.swift in Sources */, F0C6A8432AB08E54000777A8 /* RedeemVoucherViewConfiguration.swift in Sources */, - 06410DFE292CE18F00AFC18C /* KeychainSettingsStore.swift in Sources */, 58FB865526E8BF3100F188BC /* StorePaymentManagerError.swift in Sources */, 58FD5BF42428C67600112C88 /* InAppPurchaseButton.swift in Sources */, 587D9676288989DB00CD8F1C /* NSLayoutConstraint+Helpers.swift in Sources */, @@ -3974,7 +4081,6 @@ 5896AE84246D5889005B36CB /* CustomDateComponentsFormatting.swift in Sources */, 5871167F2910035700D41AAC /* PreferencesInteractor.swift in Sources */, 7A9CCCC22A96302800DD6A34 /* SafariCoordinator.swift in Sources */, - 587AD7C623421D7000E93A53 /* TunnelSettingsV1.swift in Sources */, 58E20771274672CA00DE5D77 /* LaunchViewController.swift in Sources */, F0E8CC032A4C753B007ED3B4 /* WelcomeViewController.swift in Sources */, 584D26C4270C855B004EA533 /* PreferencesDataSource.swift in Sources */, @@ -3989,7 +4095,6 @@ 58ACF64B26553C3F00ACE4B7 /* SettingsSwitchCell.swift in Sources */, 7A09C98129D99215000C2CAC /* String+FuzzyMatch.swift in Sources */, 58A8EE5E2976DB00009C0F8D /* StorePaymentManagerError+Display.swift in Sources */, - 580F8B8328197881002E0998 /* TunnelSettingsV2.swift in Sources */, 58A8EE5A2976BFBB009C0F8D /* SKError+Localized.swift in Sources */, 7A42DEC92A05164100B209BE /* SettingsInputCell.swift in Sources */, 5803B4B22940A48700C23744 /* TunnelStore.swift in Sources */, @@ -4004,32 +4109,19 @@ files = ( 5806767C27048E9B00C858CB /* PacketTunnelProvider.swift in Sources */, 581DA2762A1E2FD10046ED47 /* WgKeyRotation.swift in Sources */, - 587AD7C723421D8600E93A53 /* TunnelSettingsV1.swift in Sources */, - 5893C6FA29C1B481009090D1 /* DNSSettings.swift in Sources */, 580810E52A30E13A00B74552 /* DeviceStateAccessorProtocol.swift in Sources */, 58C7A45A2A863FDD0060C66F /* WgAdapterDeviceInfo.swift in Sources */, 580810E82A30E15500B74552 /* DeviceCheckRemoteServiceProtocol.swift in Sources */, - 068CE5782927BE4800A068BB /* Migration.swift in Sources */, 58915D682A25FA080066445B /* DeviceCheckRemoteService.swift in Sources */, - 06410E05292D0FC000AFC18C /* SettingsParser.swift in Sources */, - A92ECC292A7802AB0052F1B1 /* StoredDeviceData.swift in Sources */, - A9D96B1B2A8248F200A5C673 /* MigrationManager.swift in Sources */, 58E0729D28814AAE008902F8 /* PacketTunnelConfiguration.swift in Sources */, 58E0729F28814ACC008902F8 /* WireGuardLogLevel+Logging.swift in Sources */, - 580F8B8428197884002E0998 /* TunnelSettingsV2.swift in Sources */, - 06410E08292D117800AFC18C /* SettingsStore.swift in Sources */, - A92ECC222A77FFAF0052F1B1 /* TunnelSettings.swift in Sources */, 58C76A092A33850E00100D75 /* ApplicationTarget.swift in Sources */, 583D86482A2678DC0060D63B /* DeviceStateAccessor.swift in Sources */, 58906DE02445C7A5002F0673 /* NEProviderStopReason+Debug.swift in Sources */, - 06410DFF292CF16C00AFC18C /* KeychainSettingsStore.swift in Sources */, 58E072A128814B0E008902F8 /* MullvadEndpoint+WgEndpoint.swift in Sources */, 58C7A45B2A8640030060C66F /* PacketTunnelPathObserver.swift in Sources */, 06AC116228F94C450037AF9A /* ApplicationConfiguration.swift in Sources */, - A92ECC252A7802520052F1B1 /* StoredAccountData.swift in Sources */, - A92ECC2D2A7803A50052F1B1 /* DeviceState.swift in Sources */, 583FE02429C1ACB3006E85F9 /* RESTCreateApplePaymentResponse+Localization.swift in Sources */, - 5877D70F282137E8002FCFC7 /* SettingsManager.swift in Sources */, 58CE38C728992C8700A6D6E5 /* WireGuardAdapterError+Localization.swift in Sources */, 58E511E828DDDF2400B0BCDE /* CodingErrors+CustomErrorDescription.swift in Sources */, 58FDF2D92A0BA11A00C2B061 /* DeviceCheckOperation.swift in Sources */, @@ -4234,6 +4326,11 @@ isa = PBXTargetDependency; productRef = 58915D6B2A2603700066445B /* WireGuardKitTypes */; }; + 58B2FDD82AA71D2A003EB5C6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 58B2FDD22AA71D2A003EB5C6 /* Settings */; + targetProxy = 58B2FDD72AA71D2A003EB5C6 /* PBXContainerItemProxy */; + }; 58C7A4402A863F470060C66F /* PBXTargetDependency */ = { isa = PBXTargetDependency; platformFilter = ios; @@ -4362,6 +4459,31 @@ target = 06799ABB28F98E1D00ACD94E /* MullvadREST */; targetProxy = 58FBFBEB291622580020E046 /* PBXContainerItemProxy */; }; + 58FE25BE2AA72188003D1918 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 58D223F2294C8FF00029F5F8 /* MullvadLogging */; + targetProxy = 58FE25BD2AA72188003D1918 /* PBXContainerItemProxy */; + }; + 58FE25C52AA72729003D1918 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 06799ABB28F98E1D00ACD94E /* MullvadREST */; + targetProxy = 58FE25C42AA72729003D1918 /* PBXContainerItemProxy */; + }; + 58FE25C92AA72779003D1918 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 58C7A4352A863F440060C66F /* PacketTunnelCore */; + targetProxy = 58FE25C82AA72779003D1918 /* PBXContainerItemProxy */; + }; + 58FE25CD2AA727A9003D1918 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5898D29729017DAC00EB5EBA /* RelaySelector */; + targetProxy = 58FE25CC2AA727A9003D1918 /* PBXContainerItemProxy */; + }; + 58FE25D12AA72802003D1918 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 58B2FDD22AA71D2A003EB5C6 /* Settings */; + targetProxy = 58FE25D02AA72802003D1918 /* PBXContainerItemProxy */; + }; 7A88DCDA2A8FABBE00D2FF0E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 7A88DCCD2A8FABBE00D2FF0E /* Routing */; @@ -4445,10 +4567,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4457,6 +4581,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).RelayCache"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -4477,10 +4603,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4489,6 +4617,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).RelayCache"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -4509,10 +4639,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MullvadREST/Info.plist; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; @@ -4522,6 +4654,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadREST"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -4541,10 +4675,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MullvadREST/Info.plist; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; @@ -4554,6 +4690,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadREST"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -4574,10 +4712,12 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = TunnelObfuscation/Info.plist; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; @@ -4591,6 +4731,8 @@ "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = "$(PROJECT_DIR)/../target/aarch64-apple-ios-sim/debug"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = "$(PROJECT_DIR)/../target/x86_64-apple-ios/debug"; MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/TunnelObfuscation/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).TunnelObfuscation"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -4611,10 +4753,12 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = TunnelObfuscation/Info.plist; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; @@ -4628,6 +4772,8 @@ "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = "$(PROJECT_DIR)/../target/aarch64-apple-ios-sim/release"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = "$(PROJECT_DIR)/../target/x86_64-apple-ios/release"; MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/TunnelObfuscation/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).TunnelObfuscation"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -4805,6 +4951,82 @@ }; name = Release; }; + 58B2FDDB2AA71D2B003EB5C6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).Settings"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 58B2FDDC2AA71D2B003EB5C6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).Settings"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 58C7A44C2A863F4A0060C66F /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5808273928487E3E006B77A4 /* Base.xcconfig */; @@ -4812,6 +5034,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -4850,6 +5073,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; @@ -4895,7 +5119,7 @@ PRODUCT_BUNDLE_IDENTIFIER = net.mullvad.MullvadVPN.PacketTunnelCoreTests; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = YES; + SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; @@ -4917,7 +5141,7 @@ PRODUCT_BUNDLE_IDENTIFIER = net.mullvad.MullvadVPN.PacketTunnelCoreTests; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = YES; + SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; @@ -5166,10 +5390,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5178,6 +5404,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).Operations"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -5197,10 +5425,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5209,6 +5439,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).Operations"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -5228,10 +5460,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5240,6 +5474,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadTypes"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -5259,10 +5495,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5271,6 +5509,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadTypes"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -5290,10 +5530,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5302,6 +5544,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadLogging"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -5322,10 +5566,12 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 4; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5334,6 +5580,8 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadLogging"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -5416,7 +5664,7 @@ BUILD_LIBRARY_FOR_DISTRIBUTION = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -5425,7 +5673,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = "$(CLANG_MODULES_ENABLE_VERIFIER_TOOL)"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5435,6 +5683,8 @@ "@loader_path/Frameworks", ); MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).Routing"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -5464,7 +5714,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = "$(CLANG_MODULES_ENABLE_VERIFIER_TOOL)"; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5474,6 +5724,8 @@ "@loader_path/Frameworks", ); MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).Routing"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -5543,6 +5795,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -5550,7 +5803,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; INFOPLIST_OTHER_PREPROCESSOR_FLAGS = MullvadTransport/Info.plist; @@ -5565,6 +5818,8 @@ "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = "$(PROJECT_DIR)/../target/x86_64-apple-ios/debug"; MARKETING_VERSION = 2023.2; MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/MullvadTransport/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadTransport"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -5587,6 +5842,7 @@ APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -5594,7 +5850,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; + ENABLE_MODULE_VERIFIER = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Mullvad VPN AB. All rights reserved."; INFOPLIST_OTHER_PREPROCESSOR_FLAGS = MullvadTransport/Info.plist; @@ -5609,6 +5865,8 @@ "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = "$(PROJECT_DIR)/../target/x86_64-apple-ios/release"; MARKETING_VERSION = 2023.2; MODULEMAP_PRIVATE_FILE = $PROJECT_DIR/MullvadTransport/module.private.modulemap; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = "$(APPLICATION_IDENTIFIER).MullvadTransport"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -5699,6 +5957,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 58B2FDDD2AA71D2B003EB5C6 /* Build configuration list for PBXNativeTarget "Settings" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 58B2FDDB2AA71D2B003EB5C6 /* Debug */, + 58B2FDDC2AA71D2B003EB5C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 58C7A44B2A863F4A0060C66F /* Build configuration list for PBXNativeTarget "PacketTunnelCore" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -5862,6 +6129,11 @@ package = 58F097482A20C30000DA2DAD /* XCRemoteSwiftPackageReference "wireguard-apple" */; productName = WireGuardKitTypes; }; + 58B2FDEA2AA72049003EB5C6 /* WireGuardKitTypes */ = { + isa = XCSwiftPackageProductDependency; + package = 58F097482A20C30000DA2DAD /* XCRemoteSwiftPackageReference "wireguard-apple" */; + productName = WireGuardKitTypes; + }; 58D22419294C90380029F5F8 /* Logging */ = { isa = XCSwiftPackageProductDependency; package = 585834F624D2BC1F00A8AF56 /* XCRemoteSwiftPackageReference "swift-log" */; @@ -5887,6 +6159,16 @@ package = 58F097482A20C30000DA2DAD /* XCRemoteSwiftPackageReference "wireguard-apple" */; productName = WireGuardKit; }; + 58FE25E22AA72AE9003D1918 /* WireGuardKitTypes */ = { + isa = XCSwiftPackageProductDependency; + package = 58F097482A20C30000DA2DAD /* XCRemoteSwiftPackageReference "wireguard-apple" */; + productName = WireGuardKitTypes; + }; + 58FE25E72AA7399D003D1918 /* WireGuardKitTypes */ = { + isa = XCSwiftPackageProductDependency; + package = 58F097482A20C30000DA2DAD /* XCRemoteSwiftPackageReference "wireguard-apple" */; + productName = WireGuardKitTypes; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 58CE5E58224146200008646E /* Project object */; diff --git a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadREST.xcscheme b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadREST.xcscheme index 6f3701be4c0c..6d3f3da28645 100644 --- a/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadREST.xcscheme +++ b/ios/MullvadVPN.xcodeproj/xcshareddata/xcschemes/MullvadREST.xcscheme @@ -1,6 +1,6 @@ - + - + { private let logger = Logger(label: "LoadTunnelConfigurationOperation") diff --git a/ios/MullvadVPN/TunnelManager/RedeemVoucherOperation.swift b/ios/MullvadVPN/TunnelManager/RedeemVoucherOperation.swift index d87c61b37ec7..a184f6c8c017 100644 --- a/ios/MullvadVPN/TunnelManager/RedeemVoucherOperation.swift +++ b/ios/MullvadVPN/TunnelManager/RedeemVoucherOperation.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings class RedeemVoucherOperation: ResultOperation { private let logger = Logger(label: "RedeemVoucherOperation") diff --git a/ios/MullvadVPN/TunnelManager/RotateKeyOperation.swift b/ios/MullvadVPN/TunnelManager/RotateKeyOperation.swift index 5f3c4481606e..e3344d9afa9c 100644 --- a/ios/MullvadVPN/TunnelManager/RotateKeyOperation.swift +++ b/ios/MullvadVPN/TunnelManager/RotateKeyOperation.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings import class WireGuardKitTypes.PrivateKey class RotateKeyOperation: ResultOperation { diff --git a/ios/MullvadVPN/TunnelManager/SetAccountOperation.swift b/ios/MullvadVPN/TunnelManager/SetAccountOperation.swift index 77eeb02db6e7..72a673468a65 100644 --- a/ios/MullvadVPN/TunnelManager/SetAccountOperation.swift +++ b/ios/MullvadVPN/TunnelManager/SetAccountOperation.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings import class WireGuardKitTypes.PrivateKey import class WireGuardKitTypes.PublicKey diff --git a/ios/MullvadVPN/TunnelManager/TunnelBlockObserver.swift b/ios/MullvadVPN/TunnelManager/TunnelBlockObserver.swift index 2e327299d444..ba928ee40c7c 100644 --- a/ios/MullvadVPN/TunnelManager/TunnelBlockObserver.swift +++ b/ios/MullvadVPN/TunnelManager/TunnelBlockObserver.swift @@ -7,6 +7,7 @@ // import Foundation +import Settings final class TunnelBlockObserver: TunnelObserver { typealias DidLoadConfigurationHandler = (TunnelManager) -> Void diff --git a/ios/MullvadVPN/TunnelManager/TunnelInteractor.swift b/ios/MullvadVPN/TunnelManager/TunnelInteractor.swift index ca42b56b5297..b7cbef5be441 100644 --- a/ios/MullvadVPN/TunnelManager/TunnelInteractor.swift +++ b/ios/MullvadVPN/TunnelManager/TunnelInteractor.swift @@ -9,6 +9,7 @@ import Foundation import RelayCache import RelaySelector +import Settings protocol TunnelInteractor { // MARK: - Tunnel manipulation diff --git a/ios/MullvadVPN/TunnelManager/TunnelManager.swift b/ios/MullvadVPN/TunnelManager/TunnelManager.swift index 710d663bed59..9facc14552c9 100644 --- a/ios/MullvadVPN/TunnelManager/TunnelManager.swift +++ b/ios/MullvadVPN/TunnelManager/TunnelManager.swift @@ -14,6 +14,7 @@ import NetworkExtension import Operations import RelayCache import RelaySelector +import Settings import StoreKit import TunnelProviderMessaging import UIKit diff --git a/ios/MullvadVPN/TunnelManager/TunnelObserver.swift b/ios/MullvadVPN/TunnelManager/TunnelObserver.swift index af5775cca98b..bd930d56fd8e 100644 --- a/ios/MullvadVPN/TunnelManager/TunnelObserver.swift +++ b/ios/MullvadVPN/TunnelManager/TunnelObserver.swift @@ -7,6 +7,7 @@ // import Foundation +import Settings protocol TunnelObserver: AnyObject { func tunnelManagerDidLoadConfiguration(_ manager: TunnelManager) diff --git a/ios/MullvadVPN/TunnelManager/UpdateAccountDataOperation.swift b/ios/MullvadVPN/TunnelManager/UpdateAccountDataOperation.swift index 1f5299165013..be6d3742d88b 100644 --- a/ios/MullvadVPN/TunnelManager/UpdateAccountDataOperation.swift +++ b/ios/MullvadVPN/TunnelManager/UpdateAccountDataOperation.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings class UpdateAccountDataOperation: ResultOperation { private let logger = Logger(label: "UpdateAccountDataOperation") diff --git a/ios/MullvadVPN/TunnelManager/UpdateDeviceDataOperation.swift b/ios/MullvadVPN/TunnelManager/UpdateDeviceDataOperation.swift index 6d3b33ffd384..ceefe4bcc774 100644 --- a/ios/MullvadVPN/TunnelManager/UpdateDeviceDataOperation.swift +++ b/ios/MullvadVPN/TunnelManager/UpdateDeviceDataOperation.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings import class WireGuardKitTypes.PublicKey class UpdateDeviceDataOperation: ResultOperation { diff --git a/ios/MullvadVPN/TunnelManager/WgKeyRotation.swift b/ios/MullvadVPN/TunnelManager/WgKeyRotation.swift index d7aec80b2edb..b1dac73cb4fd 100644 --- a/ios/MullvadVPN/TunnelManager/WgKeyRotation.swift +++ b/ios/MullvadVPN/TunnelManager/WgKeyRotation.swift @@ -8,6 +8,7 @@ import Foundation import MullvadTypes +import Settings import class WireGuardKitTypes.PrivateKey import class WireGuardKitTypes.PublicKey diff --git a/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift b/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift index 8ad2fb25feaf..19d4e39a4c7b 100644 --- a/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift +++ b/ios/MullvadVPN/View controllers/Account/AccountInteractor.swift @@ -10,6 +10,7 @@ import Foundation import MullvadREST import MullvadTypes import Operations +import Settings import StoreKit final class AccountInteractor { diff --git a/ios/MullvadVPN/View controllers/Account/AccountViewController.swift b/ios/MullvadVPN/View controllers/Account/AccountViewController.swift index 435123dc4e17..e8a6bda703c0 100644 --- a/ios/MullvadVPN/View controllers/Account/AccountViewController.swift +++ b/ios/MullvadVPN/View controllers/Account/AccountViewController.swift @@ -10,6 +10,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings import StoreKit import UIKit diff --git a/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift b/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift index 07a4ff1c4e5f..f7b54a66fe89 100644 --- a/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift +++ b/ios/MullvadVPN/View controllers/Login/LoginInteractor.swift @@ -8,6 +8,7 @@ import Foundation import MullvadLogging +import Settings final class LoginInteractor { private let tunnelManager: TunnelManager diff --git a/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeInteractor.swift b/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeInteractor.swift index 79f20ed6759f..55032e892be0 100644 --- a/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeInteractor.swift +++ b/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeInteractor.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings import StoreKit final class OutOfTimeInteractor { diff --git a/ios/MullvadVPN/View controllers/Preferences/PreferencesDataSource.swift b/ios/MullvadVPN/View controllers/Preferences/PreferencesDataSource.swift index 7aa4c82acc4c..eb134361d5c9 100644 --- a/ios/MullvadVPN/View controllers/Preferences/PreferencesDataSource.swift +++ b/ios/MullvadVPN/View controllers/Preferences/PreferencesDataSource.swift @@ -6,6 +6,7 @@ // Copyright © 2021 Mullvad VPN AB. All rights reserved. // +import Settings import UIKit final class PreferencesDataSource: UITableViewDiffableDataSource< diff --git a/ios/MullvadVPN/View controllers/Preferences/PreferencesInteractor.swift b/ios/MullvadVPN/View controllers/Preferences/PreferencesInteractor.swift index 66df78917aff..bd4a5042a128 100644 --- a/ios/MullvadVPN/View controllers/Preferences/PreferencesInteractor.swift +++ b/ios/MullvadVPN/View controllers/Preferences/PreferencesInteractor.swift @@ -8,6 +8,7 @@ import Foundation import RelayCache +import Settings final class PreferencesInteractor { private let tunnelManager: TunnelManager diff --git a/ios/MullvadVPN/View controllers/Preferences/PreferencesViewModel.swift b/ios/MullvadVPN/View controllers/Preferences/PreferencesViewModel.swift index 85a381606a94..66bda89769c9 100644 --- a/ios/MullvadVPN/View controllers/Preferences/PreferencesViewModel.swift +++ b/ios/MullvadVPN/View controllers/Preferences/PreferencesViewModel.swift @@ -7,6 +7,7 @@ // import MullvadTypes +import Settings import UIKit enum CustomDNSPrecondition { diff --git a/ios/MullvadVPN/View controllers/Settings/SettingsDataSource.swift b/ios/MullvadVPN/View controllers/Settings/SettingsDataSource.swift index b2ee13f66c5a..62688ce92d81 100644 --- a/ios/MullvadVPN/View controllers/Settings/SettingsDataSource.swift +++ b/ios/MullvadVPN/View controllers/Settings/SettingsDataSource.swift @@ -6,6 +6,7 @@ // Copyright © 2021 Mullvad VPN AB. All rights reserved. // +import Settings import UIKit final class SettingsDataSource: UITableViewDiffableDataSource< diff --git a/ios/MullvadVPN/View controllers/Settings/SettingsInteractor.swift b/ios/MullvadVPN/View controllers/Settings/SettingsInteractor.swift index 01787f69c37f..3e773c48c662 100644 --- a/ios/MullvadVPN/View controllers/Settings/SettingsInteractor.swift +++ b/ios/MullvadVPN/View controllers/Settings/SettingsInteractor.swift @@ -7,6 +7,7 @@ // import Foundation +import Settings final class SettingsInteractor { private let tunnelManager: TunnelManager diff --git a/ios/MullvadVPN/View controllers/Tunnel/TunnelViewControllerInteractor.swift b/ios/MullvadVPN/View controllers/Tunnel/TunnelViewControllerInteractor.swift index b29e924bcc09..3df518ab8468 100644 --- a/ios/MullvadVPN/View controllers/Tunnel/TunnelViewControllerInteractor.swift +++ b/ios/MullvadVPN/View controllers/Tunnel/TunnelViewControllerInteractor.swift @@ -7,6 +7,7 @@ // import Foundation +import Settings final class TunnelViewControllerInteractor { private let tunnelManager: TunnelManager diff --git a/ios/MullvadVPNTests/DeviceCheckOperationTests.swift b/ios/MullvadVPNTests/DeviceCheckOperationTests.swift index 887194d3d9eb..fa7752e27af6 100644 --- a/ios/MullvadVPNTests/DeviceCheckOperationTests.swift +++ b/ios/MullvadVPNTests/DeviceCheckOperationTests.swift @@ -9,6 +9,7 @@ import MullvadREST import MullvadTypes import Operations +import Settings import WireGuardKitTypes import XCTest diff --git a/ios/MullvadVPNTests/WgKeyRotationTests.swift b/ios/MullvadVPNTests/WgKeyRotationTests.swift index f4e919f475e5..923497386163 100644 --- a/ios/MullvadVPNTests/WgKeyRotationTests.swift +++ b/ios/MullvadVPNTests/WgKeyRotationTests.swift @@ -7,6 +7,7 @@ // import MullvadTypes +import Settings import struct WireGuardKitTypes.IPAddressRange import class WireGuardKitTypes.PrivateKey import XCTest diff --git a/ios/PacketTunnel/DeviceCheck/DeviceCheckOperation.swift b/ios/PacketTunnel/DeviceCheck/DeviceCheckOperation.swift index f04e7666f5c0..97bbf1df5e2b 100644 --- a/ios/PacketTunnel/DeviceCheck/DeviceCheckOperation.swift +++ b/ios/PacketTunnel/DeviceCheck/DeviceCheckOperation.swift @@ -11,6 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes import Operations +import Settings import class WireGuardKitTypes.PrivateKey import class WireGuardKitTypes.PublicKey diff --git a/ios/PacketTunnel/DeviceCheck/DeviceStateAccessor.swift b/ios/PacketTunnel/DeviceCheck/DeviceStateAccessor.swift index 7c3d3fdb54f7..e90669d0a318 100644 --- a/ios/PacketTunnel/DeviceCheck/DeviceStateAccessor.swift +++ b/ios/PacketTunnel/DeviceCheck/DeviceStateAccessor.swift @@ -8,6 +8,7 @@ import Foundation import MullvadTypes +import Settings /// An object that provides access to `DeviceState` used by `DeviceCheckOperation`. struct DeviceStateAccessor: DeviceStateAccessorProtocol { diff --git a/ios/PacketTunnel/DeviceCheck/DeviceStateAccessorProtocol.swift b/ios/PacketTunnel/DeviceCheck/DeviceStateAccessorProtocol.swift index 44f568e9592f..0be6990ba7b6 100644 --- a/ios/PacketTunnel/DeviceCheck/DeviceStateAccessorProtocol.swift +++ b/ios/PacketTunnel/DeviceCheck/DeviceStateAccessorProtocol.swift @@ -7,6 +7,7 @@ // import Foundation +import Settings /// A protocol that formalizes device state accessor dependency used by `DeviceCheckOperation`. protocol DeviceStateAccessorProtocol { diff --git a/ios/PacketTunnel/PacketTunnelConfiguration.swift b/ios/PacketTunnel/PacketTunnelConfiguration.swift index 7cab5d3e22ee..601684e6d0e1 100644 --- a/ios/PacketTunnel/PacketTunnelConfiguration.swift +++ b/ios/PacketTunnel/PacketTunnelConfiguration.swift @@ -10,6 +10,7 @@ import Foundation import MullvadTypes import protocol Network.IPAddress import RelaySelector +import Settings import WireGuardKit struct PacketTunnelConfiguration { diff --git a/ios/PacketTunnel/PacketTunnelProvider.swift b/ios/PacketTunnel/PacketTunnelProvider.swift index df48ddf3a610..01dfbedf3840 100644 --- a/ios/PacketTunnel/PacketTunnelProvider.swift +++ b/ios/PacketTunnel/PacketTunnelProvider.swift @@ -17,6 +17,7 @@ import Operations import PacketTunnelCore import RelayCache import RelaySelector +import Settings import TunnelProviderMessaging import WireGuardKit diff --git a/ios/MullvadVPN/SettingsManager/DNSSettings.swift b/ios/Settings/DNSSettings.swift similarity index 72% rename from ios/MullvadVPN/SettingsManager/DNSSettings.swift rename to ios/Settings/DNSSettings.swift index 81e563f5dee9..cae9de2928ab 100644 --- a/ios/MullvadVPN/SettingsManager/DNSSettings.swift +++ b/ios/Settings/DNSSettings.swift @@ -11,18 +11,16 @@ import MullvadTypes import struct Network.IPv4Address /// A struct describing Mullvad DNS blocking options. -struct DNSBlockingOptions: OptionSet, Codable { - typealias RawValue = UInt32 +public struct DNSBlockingOptions: OptionSet, Codable { + public let rawValue: UInt32 - let rawValue: RawValue + public static let blockAdvertising = DNSBlockingOptions(rawValue: 1 << 0) + public static let blockTracking = DNSBlockingOptions(rawValue: 1 << 1) + public static let blockMalware = DNSBlockingOptions(rawValue: 1 << 2) + public static let blockAdultContent = DNSBlockingOptions(rawValue: 1 << 3) + public static let blockGambling = DNSBlockingOptions(rawValue: 1 << 4) - static let blockAdvertising = DNSBlockingOptions(rawValue: 1 << 0) - static let blockTracking = DNSBlockingOptions(rawValue: 1 << 1) - static let blockMalware = DNSBlockingOptions(rawValue: 1 << 2) - static let blockAdultContent = DNSBlockingOptions(rawValue: 1 << 3) - static let blockGambling = DNSBlockingOptions(rawValue: 1 << 4) - - var serverAddress: IPv4Address? { + public var serverAddress: IPv4Address? { if isEmpty { return nil } else { @@ -30,18 +28,18 @@ struct DNSBlockingOptions: OptionSet, Codable { } } - init(rawValue: RawValue) { + public init(rawValue: UInt32) { self.rawValue = rawValue } - init(from decoder: Decoder) throws { + public init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) self.init(rawValue: rawValue) } - func encode(to encoder: Encoder) throws { + public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() try container.encode(rawValue) @@ -49,21 +47,21 @@ struct DNSBlockingOptions: OptionSet, Codable { } /// A struct that holds DNS settings. -struct DNSSettings: Codable, Equatable { +public struct DNSSettings: Codable, Equatable { /// Maximum number of allowed DNS domains. - static let maxAllowedCustomDNSDomains = 3 + public static let maxAllowedCustomDNSDomains = 3 /// DNS blocking options. - var blockingOptions: DNSBlockingOptions = [] + public var blockingOptions: DNSBlockingOptions = [] /// Enable custom DNS. - var enableCustomDNS = false + public var enableCustomDNS = false /// Custom DNS domains. - var customDNSDomains: [AnyIPAddress] = [] + public var customDNSDomains: [AnyIPAddress] = [] /// Effective state of the custom DNS setting. - var effectiveEnableCustomDNS: Bool { + public var effectiveEnableCustomDNS: Bool { blockingOptions.isEmpty && enableCustomDNS && !customDNSDomains.isEmpty } @@ -77,9 +75,9 @@ struct DNSSettings: Codable, Equatable { case enableCustomDNS, customDNSDomains } - init() {} + public init() {} - init(from decoder: Decoder) throws { + public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) // Added in 2022.1 @@ -119,7 +117,7 @@ struct DNSSettings: Codable, Equatable { } } - func encode(to encoder: Encoder) throws { + public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(blockingOptions, forKey: .blockingOptions) diff --git a/ios/MullvadVPN/SettingsManager/DeviceState.swift b/ios/Settings/DeviceState.swift similarity index 83% rename from ios/MullvadVPN/SettingsManager/DeviceState.swift rename to ios/Settings/DeviceState.swift index f3563480aa8a..052511d328d6 100644 --- a/ios/MullvadVPN/SettingsManager/DeviceState.swift +++ b/ios/Settings/DeviceState.swift @@ -8,7 +8,7 @@ import Foundation -enum DeviceState: Codable, Equatable { +public enum DeviceState: Codable, Equatable { case loggedIn(StoredAccountData, StoredDeviceData) case loggedOut case revoked @@ -18,7 +18,7 @@ enum DeviceState: Codable, Equatable { case _1 = "device" } - var isLoggedIn: Bool { + public var isLoggedIn: Bool { switch self { case .loggedIn: return true @@ -27,7 +27,7 @@ enum DeviceState: Codable, Equatable { } } - var accountData: StoredAccountData? { + public var accountData: StoredAccountData? { switch self { case let .loggedIn(accountData, _): return accountData @@ -36,7 +36,7 @@ enum DeviceState: Codable, Equatable { } } - var deviceData: StoredDeviceData? { + public var deviceData: StoredDeviceData? { switch self { case let .loggedIn(_, deviceData): return deviceData diff --git a/ios/MullvadVPN/SettingsManager/KeychainSettingsStore.swift b/ios/Settings/KeychainSettingsStore.swift similarity index 88% rename from ios/MullvadVPN/SettingsManager/KeychainSettingsStore.swift rename to ios/Settings/KeychainSettingsStore.swift index 00556b8ca5d4..ba0612de0d3a 100644 --- a/ios/MullvadVPN/SettingsManager/KeychainSettingsStore.swift +++ b/ios/Settings/KeychainSettingsStore.swift @@ -10,24 +10,24 @@ import Foundation import MullvadTypes import Security -class KeychainSettingsStore: SettingsStore { - let serviceName: String - let accessGroup: String +public class KeychainSettingsStore: SettingsStore { + public let serviceName: String + public let accessGroup: String - init(serviceName: String, accessGroup: String) { + public init(serviceName: String, accessGroup: String) { self.serviceName = serviceName self.accessGroup = accessGroup } - func read(key: SettingsKey) throws -> Data { + public func read(key: SettingsKey) throws -> Data { try readItemData(key) } - func write(_ data: Data, for key: SettingsKey) throws { + public func write(_ data: Data, for key: SettingsKey) throws { try addOrUpdateItem(key, data: data) } - func delete(key: SettingsKey) throws { + public func delete(key: SettingsKey) throws { try deleteItem(key) } diff --git a/ios/MullvadVPN/SettingsManager/Migration.swift b/ios/Settings/Migration.swift similarity index 91% rename from ios/MullvadVPN/SettingsManager/Migration.swift rename to ios/Settings/Migration.swift index 79704c7b9bf1..0d9678deb5a3 100644 --- a/ios/MullvadVPN/SettingsManager/Migration.swift +++ b/ios/Settings/Migration.swift @@ -8,7 +8,7 @@ import Foundation -protocol Migration { +public protocol Migration { func migrate( with store: SettingsStore, parser: SettingsParser, diff --git a/ios/MullvadVPN/MigrationManager/MigrationManager.swift b/ios/Settings/MigrationManager.swift similarity index 85% rename from ios/MullvadVPN/MigrationManager/MigrationManager.swift rename to ios/Settings/MigrationManager.swift index f2357bcb83c3..6348cf94718a 100644 --- a/ios/MullvadVPN/MigrationManager/MigrationManager.swift +++ b/ios/Settings/MigrationManager.swift @@ -11,7 +11,7 @@ import MullvadLogging import MullvadREST import MullvadTypes -enum SettingsMigrationResult { +public enum SettingsMigrationResult { /// Nothing to migrate. case nothing @@ -22,14 +22,16 @@ enum SettingsMigrationResult { case failure(Error) } -struct MigrationManager { +public struct MigrationManager { private let logger = Logger(label: "MigrationManager") + public init() {} + /// Migrate settings store if needed. /// /// The following types of error are expected to be returned by this method: /// `SettingsMigrationError`, `UnsupportedSettingsVersionError`, `ReadSettingsVersionError`. - func migrateSettings( + public func migrateSettings( store: SettingsStore, proxyFactory: REST.ProxyFactory, migrationCompleted: @escaping (SettingsMigrationResult) -> Void @@ -78,19 +80,19 @@ struct MigrationManager { } /// A wrapper type for errors returned by concrete migrations. -struct SettingsMigrationError: LocalizedError, WrappingError { +public struct SettingsMigrationError: LocalizedError, WrappingError { private let inner: Error - let sourceVersion, targetVersion: SchemaVersion + public let sourceVersion, targetVersion: SchemaVersion - var underlyingError: Error? { + public var underlyingError: Error? { inner } - var errorDescription: String? { + public var errorDescription: String? { "Failed to migrate settings from \(sourceVersion) to \(targetVersion)." } - init(sourceVersion: SchemaVersion, targetVersion: SchemaVersion, underlyingError: Error) { + public init(sourceVersion: SchemaVersion, targetVersion: SchemaVersion, underlyingError: Error) { self.sourceVersion = sourceVersion self.targetVersion = targetVersion inner = underlyingError diff --git a/ios/Settings/Settings.h b/ios/Settings/Settings.h new file mode 100644 index 000000000000..598468f6ea72 --- /dev/null +++ b/ios/Settings/Settings.h @@ -0,0 +1,19 @@ +// +// Settings.h +// Settings +// +// Created by pronebird on 05/09/2023. +// Copyright © 2023 Mullvad VPN AB. All rights reserved. +// + +#import + +//! Project version number for Settings. +FOUNDATION_EXPORT double SettingsVersionNumber; + +//! Project version string for Settings. +FOUNDATION_EXPORT const unsigned char SettingsVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/ios/MullvadVPN/SettingsManager/SettingsManager.swift b/ios/Settings/SettingsManager.swift similarity index 81% rename from ios/MullvadVPN/SettingsManager/SettingsManager.swift rename to ios/Settings/SettingsManager.swift index 91a73b8b0730..953c052beb0a 100644 --- a/ios/MullvadVPN/SettingsManager/SettingsManager.swift +++ b/ios/Settings/SettingsManager.swift @@ -15,10 +15,10 @@ private let keychainServiceName = "Mullvad VPN" private let accountTokenKey = "accountToken" private let accountExpiryKey = "accountExpiry" -enum SettingsManager { +public enum SettingsManager { private static let logger = Logger(label: "SettingsManager") - static let store: SettingsStore = KeychainSettingsStore( + public static let store: SettingsStore = KeychainSettingsStore( serviceName: keychainServiceName, accessGroup: ApplicationConfiguration.securityGroupIdentifier ) @@ -29,7 +29,7 @@ enum SettingsManager { // MARK: - Last used account - static func getLastUsedAccount() throws -> String { + public static func getLastUsedAccount() throws -> String { let data = try store.read(key: .lastUsedAccount) if let string = String(data: data, encoding: .utf8) { @@ -39,7 +39,7 @@ enum SettingsManager { } } - static func setLastUsedAccount(_ string: String?) throws { + public static func setLastUsedAccount(_ string: String?) throws { if let string { guard let data = string.data(using: .utf8) else { throw StringEncodingError(string: string) @@ -59,11 +59,11 @@ enum SettingsManager { // MARK: - Should wipe settings - static func getShouldWipeSettings() -> Bool { + public static func getShouldWipeSettings() -> Bool { (try? store.read(key: .shouldWipeSettings)) != nil } - static func setShouldWipeSettings() { + public static func setShouldWipeSettings() { do { try store.write(Data(), for: .shouldWipeSettings) } catch { @@ -76,7 +76,7 @@ enum SettingsManager { // MARK: - Settings - static func readSettings() throws -> LatestTunnelSettings { + public static func readSettings() throws -> LatestTunnelSettings { let storedVersion: Int let data: Data let parser = makeParser() @@ -100,7 +100,7 @@ enum SettingsManager { } } - static func writeSettings(_ settings: LatestTunnelSettings) throws { + public static func writeSettings(_ settings: LatestTunnelSettings) throws { let parser = makeParser() let data = try parser.producePayload(settings, version: SchemaVersion.current.rawValue) @@ -109,14 +109,14 @@ enum SettingsManager { // MARK: - Device state - static func readDeviceState() throws -> DeviceState { + public static func readDeviceState() throws -> DeviceState { let data = try store.read(key: .deviceState) let parser = makeParser() return try parser.parseUnversionedPayload(as: DeviceState.self, from: data) } - static func writeDeviceState(_ deviceState: DeviceState) throws { + public static func writeDeviceState(_ deviceState: DeviceState) throws { let parser = makeParser() let data = try parser.produceUnversionedPayload(deviceState) @@ -125,7 +125,7 @@ enum SettingsManager { /// Removes all legacy settings, device state and tunnel settings but keeps the last used /// account number stored. - static func resetStore(completely: Bool = false) { + public static func resetStore(completely: Bool = false) { logger.debug("Reset store.") do { @@ -195,28 +195,28 @@ enum SettingsManager { // MARK: - Supporting types /// An error type describing a failure to read or parse settings version. -struct ReadSettingsVersionError: LocalizedError, WrappingError { +public struct ReadSettingsVersionError: LocalizedError, WrappingError { private let inner: Error - var underlyingError: Error? { + public var underlyingError: Error? { inner } - var errorDescription: String? { + public var errorDescription: String? { "Failed to read settings version." } - init(underlyingError: Error) { + public init(underlyingError: Error) { inner = underlyingError } } /// An error returned when stored settings version is unknown to the currently running app. -struct UnsupportedSettingsVersionError: LocalizedError { - let storedVersion: Int - let currentVersion: SchemaVersion +public struct UnsupportedSettingsVersionError: LocalizedError { + public let storedVersion: Int + public let currentVersion: SchemaVersion - var errorDescription: String? { + public var errorDescription: String? { """ Stored settings version was not the same as current version, \ stored version: \(storedVersion), current version: \(currentVersion) @@ -224,18 +224,18 @@ struct UnsupportedSettingsVersionError: LocalizedError { } } -struct StringDecodingError: LocalizedError { - let data: Data +public struct StringDecodingError: LocalizedError { + public let data: Data - var errorDescription: String? { + public var errorDescription: String? { "Failed to decode string from data." } } -struct StringEncodingError: LocalizedError { - let string: String +public struct StringEncodingError: LocalizedError { + public let string: String - var errorDescription: String? { + public var errorDescription: String? { "Failed to encode string into data." } } diff --git a/ios/MullvadVPN/SettingsManager/SettingsParser.swift b/ios/Settings/SettingsParser.swift similarity index 77% rename from ios/MullvadVPN/SettingsManager/SettingsParser.swift rename to ios/Settings/SettingsParser.swift index 60199afb51d3..16bd1ba7ff04 100644 --- a/ios/MullvadVPN/SettingsManager/SettingsParser.swift +++ b/ios/Settings/SettingsParser.swift @@ -21,37 +21,37 @@ private struct VersionedPayload: Codable { var data: T } -struct SettingsParser { +public struct SettingsParser { /// The decoder used to decode values. private let decoder: JSONDecoder /// The encoder used to encode values. private let encoder: JSONEncoder - init(decoder: JSONDecoder, encoder: JSONEncoder) { + public init(decoder: JSONDecoder, encoder: JSONEncoder) { self.decoder = decoder self.encoder = encoder } /// Produces versioned data encoded as the given type - func producePayload(_ payload: some Codable, version: Int) throws -> Data { + public func producePayload(_ payload: some Codable, version: Int) throws -> Data { try encoder.encode(VersionedPayload(version: version, data: payload)) } /// Produces unversioned data encoded as the given type - func produceUnversionedPayload(_ payload: some Codable) throws -> Data { + public func produceUnversionedPayload(_ payload: some Codable) throws -> Data { try encoder.encode(payload) } /// Returns settings version if found inside the stored data. - func parseVersion(data: Data) throws -> Int { + public func parseVersion(data: Data) throws -> Int { let header = try decoder.decode(VersionHeader.self, from: data) return header.version } /// Returns unversioned payload parsed as the given type. - func parseUnversionedPayload( + public func parseUnversionedPayload( as type: T.Type, from data: Data ) throws -> T { @@ -59,7 +59,7 @@ struct SettingsParser { } /// Returns data from versioned payload parsed as the given type. - func parsePayload( + public func parsePayload( as type: T.Type, from data: Data ) throws -> T { diff --git a/ios/MullvadVPN/SettingsManager/SettingsStore.swift b/ios/Settings/SettingsStore.swift similarity index 85% rename from ios/MullvadVPN/SettingsManager/SettingsStore.swift rename to ios/Settings/SettingsStore.swift index 55b565390f2f..4609ce8d39c4 100644 --- a/ios/MullvadVPN/SettingsManager/SettingsStore.swift +++ b/ios/Settings/SettingsStore.swift @@ -8,14 +8,14 @@ import Foundation -enum SettingsKey: String, CaseIterable { +public enum SettingsKey: String, CaseIterable { case settings = "Settings" case deviceState = "DeviceState" case lastUsedAccount = "LastUsedAccount" case shouldWipeSettings = "ShouldWipeSettings" } -protocol SettingsStore { +public protocol SettingsStore { func read(key: SettingsKey) throws -> Data func write(_ data: Data, for key: SettingsKey) throws func delete(key: SettingsKey) throws diff --git a/ios/MullvadVPN/SettingsManager/StoredAccountData.swift b/ios/Settings/StoredAccountData.swift similarity index 62% rename from ios/MullvadVPN/SettingsManager/StoredAccountData.swift rename to ios/Settings/StoredAccountData.swift index 4870c3018fb9..276982805c0e 100644 --- a/ios/MullvadVPN/SettingsManager/StoredAccountData.swift +++ b/ios/Settings/StoredAccountData.swift @@ -8,24 +8,30 @@ import Foundation -struct StoredAccountData: Codable, Equatable { +public struct StoredAccountData: Codable, Equatable { /// Account identifier. - var identifier: String + public var identifier: String /// Account number. - var number: String + public var number: String /// Account expiry. - var expiry: Date + public var expiry: Date /// Returns `true` if account has expired. - var isExpired: Bool { + public var isExpired: Bool { expiry <= Date() } + + public init(identifier: String, number: String, expiry: Date) { + self.identifier = identifier + self.number = number + self.expiry = expiry + } } extension StoredAccountData { - init(from decoder: Decoder) throws { + public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.identifier = try container.decode(String.self, forKey: .identifier) self.number = try container.decode(String.self, forKey: .number) diff --git a/ios/Settings/StoredDeviceData.swift b/ios/Settings/StoredDeviceData.swift new file mode 100644 index 000000000000..a0d784af614c --- /dev/null +++ b/ios/Settings/StoredDeviceData.swift @@ -0,0 +1,67 @@ +// +// StoredDeviceData.swift +// MullvadVPN +// +// Created by Marco Nikic on 2023-07-31. +// Copyright © 2023 Mullvad VPN AB. All rights reserved. +// + +import Foundation +import MullvadTypes +import WireGuardKitTypes + +public struct StoredDeviceData: Codable, Equatable { + /// Device creation date. + public var creationDate: Date + + /// Device identifier. + public var identifier: String + + /// Device name. + public var name: String + + /// Whether relay hijacks DNS from this device. + public var hijackDNS: Bool + + /// IPv4 address + mask assigned to device. + public var ipv4Address: IPAddressRange + + /// IPv6 address + mask assigned to device. + public var ipv6Address: IPAddressRange + + /// WireGuard key data. + public var wgKeyData: StoredWgKeyData + + /// Returns capitalized device name. + public var capitalizedName: String { + name.capitalized + } + + public init( + creationDate: Date, + identifier: String, + name: String, + hijackDNS: Bool, + ipv4Address: IPAddressRange, + ipv6Address: IPAddressRange, + wgKeyData: StoredWgKeyData + ) { + self.creationDate = creationDate + self.identifier = identifier + self.name = name + self.hijackDNS = hijackDNS + self.ipv4Address = ipv4Address + self.ipv6Address = ipv6Address + self.wgKeyData = wgKeyData + } + + /// Fill in part of the structure that contains device related properties from `Device` struct. + public mutating func update(from device: Device) { + identifier = device.id + name = device.name + creationDate = device.created + hijackDNS = device.hijackDNS + ipv4Address = device.ipv4Address + ipv6Address = device.ipv6Address + } +} diff --git a/ios/MullvadVPN/SettingsManager/TunnelSettings.swift b/ios/Settings/TunnelSettings.swift similarity index 75% rename from ios/MullvadVPN/SettingsManager/TunnelSettings.swift rename to ios/Settings/TunnelSettings.swift index 91108d08beb5..f58c88c47c2a 100644 --- a/ios/MullvadVPN/SettingsManager/TunnelSettings.swift +++ b/ios/Settings/TunnelSettings.swift @@ -9,10 +9,10 @@ import Foundation /// Alias to the latest version of the `TunnelSettings`. -typealias LatestTunnelSettings = TunnelSettingsV2 +public typealias LatestTunnelSettings = TunnelSettingsV2 /// Settings and device state schema versions. -enum SchemaVersion: Int, Equatable { +public enum SchemaVersion: Int, Equatable { /// Legacy settings format, stored as `TunnelSettingsV1`. case v1 = 1 @@ -20,5 +20,5 @@ enum SchemaVersion: Int, Equatable { case v2 = 2 /// Current schema version. - static let current = SchemaVersion.v2 + public static let current = SchemaVersion.v2 } diff --git a/ios/MullvadVPN/SettingsManager/TunnelSettingsV1.swift b/ios/Settings/TunnelSettingsV1.swift similarity index 76% rename from ios/MullvadVPN/SettingsManager/TunnelSettingsV1.swift rename to ios/Settings/TunnelSettingsV1.swift index da93003268f8..5148266e21aa 100644 --- a/ios/MullvadVPN/SettingsManager/TunnelSettingsV1.swift +++ b/ios/Settings/TunnelSettingsV1.swift @@ -14,24 +14,24 @@ import class WireGuardKitTypes.PrivateKey import class WireGuardKitTypes.PublicKey /// A struct that holds the configuration passed via `NETunnelProviderProtocol`. -struct TunnelSettingsV1: Codable, Equatable { - var relayConstraints = RelayConstraints() - var interface = InterfaceSettings() +public struct TunnelSettingsV1: Codable, Equatable { + public var relayConstraints = RelayConstraints() + public var interface = InterfaceSettings() } /// A struct that holds a tun interface configuration. -struct InterfaceSettings: Codable, Equatable { - var privateKey: PrivateKeyWithMetadata - var nextPrivateKey: PrivateKeyWithMetadata? +public struct InterfaceSettings: Codable, Equatable { + public var privateKey: PrivateKeyWithMetadata + public var nextPrivateKey: PrivateKeyWithMetadata? - var addresses: [IPAddressRange] - var dnsSettings: DNSSettings + public var addresses: [IPAddressRange] + public var dnsSettings: DNSSettings private enum CodingKeys: String, CodingKey { case privateKey, nextPrivateKey, addresses, dnsSettings } - init( + public init( privateKey: PrivateKeyWithMetadata = PrivateKeyWithMetadata(), nextPrivateKey: PrivateKeyWithMetadata? = nil, addresses: [IPAddressRange] = [], @@ -43,7 +43,7 @@ struct InterfaceSettings: Codable, Equatable { self.dnsSettings = dnsSettings } - init(from decoder: Decoder) throws { + public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) privateKey = try container.decode(PrivateKeyWithMetadata.self, forKey: .privateKey) @@ -60,7 +60,7 @@ struct InterfaceSettings: Codable, Equatable { ?? DNSSettings() } - func encode(to encoder: Encoder) throws { + public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(privateKey, forKey: .privateKey) @@ -71,30 +71,30 @@ struct InterfaceSettings: Codable, Equatable { } /// A struct holding a private WireGuard key with associated metadata -struct PrivateKeyWithMetadata: Equatable, Codable { +public struct PrivateKeyWithMetadata: Equatable, Codable { private enum CodingKeys: String, CodingKey { case privateKey = "privateKeyData", creationDate } /// When the key was created - let creationDate: Date + public let creationDate: Date /// Private key - let privateKey: PrivateKey + public let privateKey: PrivateKey /// Public key - var publicKey: PublicKey { + public var publicKey: PublicKey { privateKey.publicKey } /// Initialize the new private key - init() { + public init() { privateKey = PrivateKey() creationDate = Date() } /// Initialize with the existing private key - init(privateKey: PrivateKey, createdAt: Date) { + public init(privateKey: PrivateKey, createdAt: Date) { self.privateKey = privateKey creationDate = createdAt } diff --git a/ios/Settings/TunnelSettingsV2.swift b/ios/Settings/TunnelSettingsV2.swift new file mode 100644 index 000000000000..001cc3adb6b8 --- /dev/null +++ b/ios/Settings/TunnelSettingsV2.swift @@ -0,0 +1,57 @@ +// +// TunnelSettingsV2.swift +// MullvadVPN +// +// Created by pronebird on 27/04/2022. +// Copyright © 2022 Mullvad VPN AB. All rights reserved. +// + +import Foundation +import MullvadTypes +import struct Network.IPv4Address +import struct WireGuardKitTypes.IPAddressRange +import class WireGuardKitTypes.PrivateKey +import class WireGuardKitTypes.PublicKey + +public struct TunnelSettingsV2: Codable, Equatable { + /// Relay constraints. + public var relayConstraints: RelayConstraints + + /// DNS settings. + public var dnsSettings: DNSSettings + + public init( + relayConstraints: RelayConstraints = RelayConstraints(), + dnsSettings: DNSSettings = DNSSettings() + ) { + self.relayConstraints = relayConstraints + self.dnsSettings = dnsSettings + } +} + +public struct StoredWgKeyData: Codable, Equatable { + /// Private key creation date. + public var creationDate: Date + + /// Last date a rotation was attempted. Nil if last attempt was successful. + public var lastRotationAttemptDate: Date? + + /// Private key. + public var privateKey: PrivateKey + + /// Next private key we're trying to rotate to. + /// Added in 2023.3 + public var nextPrivateKey: PrivateKey? + + public init( + creationDate: Date, + lastRotationAttemptDate: Date? = nil, + privateKey: PrivateKey, + nextPrivateKey: PrivateKey? = nil + ) { + self.creationDate = creationDate + self.lastRotationAttemptDate = lastRotationAttemptDate + self.privateKey = privateKey + self.nextPrivateKey = nextPrivateKey + } +}