Initial rebrand

This commit is contained in:
Jackson Coxson
2025-11-25 10:47:38 -07:00
parent 19b4bfbe80
commit e2ca18bf36
56 changed files with 404 additions and 356 deletions

View File

@@ -1,13 +1,36 @@
{ {
"fill" : { "fill" : {
"automatic-gradient" : "display-p3:0.23889,0.54053,0.96826,1.00000" "linear-gradient" : [
"display-p3:0.72718,1.00000,0.56150,1.00000",
"display-p3:0.23889,0.54053,0.96826,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 0
},
"stop" : {
"x" : 0.5,
"y" : 0.7
}
}
}, },
"groups" : [ "groups" : [
{ {
"layers" : [ "layers" : [
{ {
"blend-mode" : "normal",
"hidden" : false,
"image-name" : "StosPlug.svg", "image-name" : "StosPlug.svg",
"name" : "StosPlug" "name" : "StosPlug",
"opacity" : 0.5,
"position" : {
"scale" : 1,
"translation-in-points" : [
0,
0
]
}
} }
], ],
"shadow" : { "shadow" : {

View File

@@ -5,15 +5,15 @@ MARKETING_VERSION = 1.2.1
CURRENT_PROJECT_VERSION = 1 CURRENT_PROJECT_VERSION = 1
// Vars to be overwritten by `CodeSigning.xcconfig` if exists // Vars to be overwritten by `CodeSigning.xcconfig` if exists
DEVELOPMENT_TEAM = 95J8WZ4TN8 DEVELOPMENT_TEAM = 42Q7QX86GV
ORG_IDENTIFIER = com.stossy11 ORG_IDENTIFIER = com.jkcoxson
// Codesigning settings defined optionally, see `CodeSigning.xcconfig.example` // Codesigning settings defined optionally, see `CodeSigning.xcconfig.example`
#include? "CodeSigning.xcconfig" #include? "CodeSigning.xcconfig"
ORG_PREFIX = $(ORG_IDENTIFIER) ORG_PREFIX = $(ORG_IDENTIFIER)
PRODUCT_BUNDLE_IDENTIFIER = $(ORG_PREFIX).StosVPN PRODUCT_BUNDLE_IDENTIFIER = $(ORG_PREFIX).LocalDevVPN
TUNNEL_NAME = TunnelProv TUNNEL_NAME = TunnelProv

View File

@@ -41,13 +41,20 @@
0E6351B62E18DF53002AF750 /* Build.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Build.xcconfig; sourceTree = "<group>"; }; 0E6351B62E18DF53002AF750 /* Build.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Build.xcconfig; sourceTree = "<group>"; };
0E6351B72E18DF53002AF750 /* CodeSigning.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeSigning.xcconfig; sourceTree = "<group>"; }; 0E6351B72E18DF53002AF750 /* CodeSigning.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeSigning.xcconfig; sourceTree = "<group>"; };
0E6351B82E18DF53002AF750 /* CodeSigning.xcconfig.sample */ = {isa = PBXFileReference; lastKnownFileType = text; path = CodeSigning.xcconfig.sample; sourceTree = "<group>"; }; 0E6351B82E18DF53002AF750 /* CodeSigning.xcconfig.sample */ = {isa = PBXFileReference; lastKnownFileType = text; path = CodeSigning.xcconfig.sample; sourceTree = "<group>"; };
4EB3C7582D96631A00C1B22C /* StosVPN.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StosVPN.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4EB3C7582D96631A00C1B22C /* LocalDevVPN.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LocalDevVPN.app; sourceTree = BUILT_PRODUCTS_DIR; };
4EB3C76E2D96715400C1B22C /* TunnelProv.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = TunnelProv.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 4EB3C76E2D96715400C1B22C /* TunnelProv.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = TunnelProv.appex; sourceTree = BUILT_PRODUCTS_DIR; };
4EB3C7702D96715400C1B22C /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; }; 4EB3C7702D96715400C1B22C /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
4EE6B99A2E8F756700E30694 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = "<group>"; }; 4EE6B99A2E8F756700E30694 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
190996C92ED0FC91006411F1 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 4EB3C7572D96631A00C1B22C /* LocalDevVPN */;
};
4EB3C77A2D96715400C1B22C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { 4EB3C77A2D96715400C1B22C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet; isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = ( membershipExceptions = (
@@ -55,17 +62,10 @@
); );
target = 4EB3C76D2D96715400C1B22C /* TunnelProv */; target = 4EB3C76D2D96715400C1B22C /* TunnelProv */;
}; };
4EB3C7802D9672DE00C1B22C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 4EB3C7572D96631A00C1B22C /* StosVPN */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFileSystemSynchronizedRootGroup section */
4EB3C75A2D96631A00C1B22C /* StosVPN */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (4EB3C7802D9672DE00C1B22C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = StosVPN; sourceTree = "<group>"; }; 4EB3C75A2D96631A00C1B22C /* LocalDevVPN */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (190996C92ED0FC91006411F1 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = LocalDevVPN; sourceTree = "<group>"; };
4EB3C7722D96715400C1B22C /* TunnelProv */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (4EB3C77A2D96715400C1B22C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = TunnelProv; sourceTree = "<group>"; }; 4EB3C7722D96715400C1B22C /* TunnelProv */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (4EB3C77A2D96715400C1B22C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = TunnelProv; sourceTree = "<group>"; };
/* End PBXFileSystemSynchronizedRootGroup section */ /* End PBXFileSystemSynchronizedRootGroup section */
@@ -96,7 +96,7 @@
0E6351B62E18DF53002AF750 /* Build.xcconfig */, 0E6351B62E18DF53002AF750 /* Build.xcconfig */,
0E6351B72E18DF53002AF750 /* CodeSigning.xcconfig */, 0E6351B72E18DF53002AF750 /* CodeSigning.xcconfig */,
0E6351B82E18DF53002AF750 /* CodeSigning.xcconfig.sample */, 0E6351B82E18DF53002AF750 /* CodeSigning.xcconfig.sample */,
4EB3C75A2D96631A00C1B22C /* StosVPN */, 4EB3C75A2D96631A00C1B22C /* LocalDevVPN */,
4EB3C7722D96715400C1B22C /* TunnelProv */, 4EB3C7722D96715400C1B22C /* TunnelProv */,
4EB3C76F2D96715400C1B22C /* Frameworks */, 4EB3C76F2D96715400C1B22C /* Frameworks */,
4EB3C7592D96631A00C1B22C /* Products */, 4EB3C7592D96631A00C1B22C /* Products */,
@@ -106,7 +106,7 @@
4EB3C7592D96631A00C1B22C /* Products */ = { 4EB3C7592D96631A00C1B22C /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4EB3C7582D96631A00C1B22C /* StosVPN.app */, 4EB3C7582D96631A00C1B22C /* LocalDevVPN.app */,
4EB3C76E2D96715400C1B22C /* TunnelProv.appex */, 4EB3C76E2D96715400C1B22C /* TunnelProv.appex */,
); );
name = Products; name = Products;
@@ -123,9 +123,9 @@
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
4EB3C7572D96631A00C1B22C /* StosVPN */ = { 4EB3C7572D96631A00C1B22C /* LocalDevVPN */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 4EB3C7662D96631B00C1B22C /* Build configuration list for PBXNativeTarget "StosVPN" */; buildConfigurationList = 4EB3C7662D96631B00C1B22C /* Build configuration list for PBXNativeTarget "LocalDevVPN" */;
buildPhases = ( buildPhases = (
4EB3C7542D96631A00C1B22C /* Sources */, 4EB3C7542D96631A00C1B22C /* Sources */,
4EB3C7552D96631A00C1B22C /* Frameworks */, 4EB3C7552D96631A00C1B22C /* Frameworks */,
@@ -138,14 +138,14 @@
4EB3C7782D96715400C1B22C /* PBXTargetDependency */, 4EB3C7782D96715400C1B22C /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = ( fileSystemSynchronizedGroups = (
4EB3C75A2D96631A00C1B22C /* StosVPN */, 4EB3C75A2D96631A00C1B22C /* LocalDevVPN */,
); );
name = StosVPN; name = LocalDevVPN;
packageProductDependencies = ( packageProductDependencies = (
0E6351BD2E18EABA002AF750 /* NavigationBackport */, 0E6351BD2E18EABA002AF750 /* NavigationBackport */,
); );
productName = StosVPN; productName = LocalDevVPN;
productReference = 4EB3C7582D96631A00C1B22C /* StosVPN.app */; productReference = 4EB3C7582D96631A00C1B22C /* LocalDevVPN.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
}; };
4EB3C76D2D96715400C1B22C /* TunnelProv */ = { 4EB3C76D2D96715400C1B22C /* TunnelProv */ = {
@@ -190,7 +190,7 @@
}; };
}; };
}; };
buildConfigurationList = 4EB3C7532D96631A00C1B22C /* Build configuration list for PBXProject "StosVPN" */; buildConfigurationList = 4EB3C7532D96631A00C1B22C /* Build configuration list for PBXProject "LocalDevVPN" */;
compatibilityVersion = "Xcode 14.0"; compatibilityVersion = "Xcode 14.0";
developmentRegion = en; developmentRegion = en;
hasScannedForEncodings = 0; hasScannedForEncodings = 0;
@@ -210,7 +210,7 @@
projectDirPath = ""; projectDirPath = "";
projectRoot = ""; projectRoot = "";
targets = ( targets = (
4EB3C7572D96631A00C1B22C /* StosVPN */, 4EB3C7572D96631A00C1B22C /* LocalDevVPN */,
4EB3C76D2D96715400C1B22C /* TunnelProv */, 4EB3C76D2D96715400C1B22C /* TunnelProv */,
); );
}; };
@@ -414,8 +414,13 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
DEVELOPMENT_ASSET_PATHS = "\"StosVPN/Preview Content\""; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_ASSET_PATHS = "\"LocalDevVPN/Preview Content\"";
DEVELOPMENT_TEAM = 42Q7QX86GV;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
INFOPLIST_KEY_CFBundleDisplayName = LocalDevVPN;
INFOPLIST_KEY_NSHumanReadableCopyright = Stossy11;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
@@ -425,9 +430,11 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.jkcoxson.LocalDevVPN;
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "StosVPN/StosVPN-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "LocalDevVPN/LocalDevVPN-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,3"; TARGETED_DEVICE_FAMILY = "1,2,3";
@@ -442,8 +449,13 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
DEVELOPMENT_ASSET_PATHS = "\"StosVPN/Preview Content\""; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_ASSET_PATHS = "\"LocalDevVPN/Preview Content\"";
DEVELOPMENT_TEAM = 42Q7QX86GV;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
INFOPLIST_KEY_CFBundleDisplayName = LocalDevVPN;
INFOPLIST_KEY_NSHumanReadableCopyright = Stossy11;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
@@ -453,9 +465,11 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.jkcoxson.LocalDevVPN;
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "StosVPN/StosVPN-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "LocalDevVPN/LocalDevVPN-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,3"; TARGETED_DEVICE_FAMILY = "1,2,3";
TVOS_DEPLOYMENT_TARGET = 17.0; TVOS_DEPLOYMENT_TARGET = 17.0;
@@ -465,6 +479,7 @@
4EB3C77C2D96715400C1B22C /* Debug */ = { 4EB3C77C2D96715400C1B22C /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEVELOPMENT_TEAM = 42Q7QX86GV;
INFOPLIST_KEY_CFBundleDisplayName = TunnelProv; INFOPLIST_KEY_CFBundleDisplayName = TunnelProv;
INFOPLIST_KEY_NSHumanReadableCopyright = Stossy11; INFOPLIST_KEY_NSHumanReadableCopyright = Stossy11;
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
@@ -474,10 +489,12 @@
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = "$(TUNNEL_BUNDLE_IDENTIFIER)"; PRODUCT_BUNDLE_IDENTIFIER = "$(TUNNEL_BUNDLE_IDENTIFIER)";
"PRODUCT_BUNDLE_IDENTIFIER[sdk=appletvos*]" = com.jkcoxson.LocalDevVPN.TunnelProv;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = com.jkcoxson.LocalDevVPN.TunnelProv;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "StosVPN/StosVPN-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "LocalDevVPN/LocalDevVPN-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,3"; TARGETED_DEVICE_FAMILY = "1,2,3";
TVOS_DEPLOYMENT_TARGET = 17.0; TVOS_DEPLOYMENT_TARGET = 17.0;
@@ -487,6 +504,7 @@
4EB3C77D2D96715400C1B22C /* Release */ = { 4EB3C77D2D96715400C1B22C /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEVELOPMENT_TEAM = 42Q7QX86GV;
INFOPLIST_KEY_CFBundleDisplayName = TunnelProv; INFOPLIST_KEY_CFBundleDisplayName = TunnelProv;
INFOPLIST_KEY_NSHumanReadableCopyright = Stossy11; INFOPLIST_KEY_NSHumanReadableCopyright = Stossy11;
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
@@ -496,10 +514,12 @@
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = "$(TUNNEL_BUNDLE_IDENTIFIER)"; PRODUCT_BUNDLE_IDENTIFIER = "$(TUNNEL_BUNDLE_IDENTIFIER)";
"PRODUCT_BUNDLE_IDENTIFIER[sdk=appletvos*]" = com.jkcoxson.LocalDevVPN.TunnelProv;
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = com.jkcoxson.LocalDevVPN.TunnelProv;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "StosVPN/StosVPN-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "LocalDevVPN/LocalDevVPN-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,3"; TARGETED_DEVICE_FAMILY = "1,2,3";
TVOS_DEPLOYMENT_TARGET = 17.0; TVOS_DEPLOYMENT_TARGET = 17.0;
@@ -509,7 +529,7 @@
/* End XCBuildConfiguration section */ /* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */ /* Begin XCConfigurationList section */
4EB3C7532D96631A00C1B22C /* Build configuration list for PBXProject "StosVPN" */ = { 4EB3C7532D96631A00C1B22C /* Build configuration list for PBXProject "LocalDevVPN" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (
4EB3C7642D96631B00C1B22C /* Debug */, 4EB3C7642D96631B00C1B22C /* Debug */,
@@ -518,7 +538,7 @@
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release; defaultConfigurationName = Release;
}; };
4EB3C7662D96631B00C1B22C /* Build configuration list for PBXNativeTarget "StosVPN" */ = { 4EB3C7662D96631B00C1B22C /* Build configuration list for PBXNativeTarget "LocalDevVPN" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (
4EB3C7672D96631B00C1B22C /* Debug */, 4EB3C7672D96631B00C1B22C /* Debug */,

View File

@@ -16,9 +16,9 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4EB3C7572D96631A00C1B22C" BlueprintIdentifier = "4EB3C7572D96631A00C1B22C"
BuildableName = "StosVPN.app" BuildableName = "LocalDevVPN.app"
BlueprintName = "StosVPN" BlueprintName = "LocalDevVPN"
ReferencedContainer = "container:StosVPN.xcodeproj"> ReferencedContainer = "container:LocalDevVPN.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildActionEntry> </BuildActionEntry>
</BuildActionEntries> </BuildActionEntries>
@@ -45,9 +45,9 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4EB3C7572D96631A00C1B22C" BlueprintIdentifier = "4EB3C7572D96631A00C1B22C"
BuildableName = "StosVPN.app" BuildableName = "LocalDevVPN.app"
BlueprintName = "StosVPN" BlueprintName = "LocalDevVPN"
ReferencedContainer = "container:StosVPN.xcodeproj"> ReferencedContainer = "container:LocalDevVPN.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
</LaunchAction> </LaunchAction>
@@ -62,9 +62,9 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4EB3C7572D96631A00C1B22C" BlueprintIdentifier = "4EB3C7572D96631A00C1B22C"
BuildableName = "StosVPN.app" BuildableName = "LocalDevVPN.app"
BlueprintName = "StosVPN" BlueprintName = "LocalDevVPN"
ReferencedContainer = "container:StosVPN.xcodeproj"> ReferencedContainer = "container:LocalDevVPN.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
</ProfileAction> </ProfileAction>

View File

@@ -31,8 +31,8 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4EB3C7572D96631A00C1B22C" BlueprintIdentifier = "4EB3C7572D96631A00C1B22C"
BuildableName = "StosVPN.app" BuildableName = "LocalDevVPN.app"
BlueprintName = "StosVPN" BlueprintName = "LocalDevVPN"
ReferencedContainer = "container:StosVPN.xcodeproj"> ReferencedContainer = "container:StosVPN.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildActionEntry> </BuildActionEntry>
@@ -62,8 +62,8 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4EB3C7572D96631A00C1B22C" BlueprintIdentifier = "4EB3C7572D96631A00C1B22C"
BuildableName = "StosVPN.app" BuildableName = "LocalDevVPN.app"
BlueprintName = "StosVPN" BlueprintName = "LocalDevVPN"
ReferencedContainer = "container:StosVPN.xcodeproj"> ReferencedContainer = "container:StosVPN.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
@@ -81,8 +81,8 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "4EB3C7572D96631A00C1B22C" BlueprintIdentifier = "4EB3C7572D96631A00C1B22C"
BuildableName = "StosVPN.app" BuildableName = "LocalDevVPN.app"
BlueprintName = "StosVPN" BlueprintName = "LocalDevVPN"
ReferencedContainer = "container:StosVPN.xcodeproj"> ReferencedContainer = "container:StosVPN.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -1,13 +1,13 @@
// //
// ContentView.swift // ContentView.swift
// StosVPN // LocalDevVPN
// //
// Created by Stossy11 on 28/03/2025. // Created by Stossy11 on 28/03/2025.
// //
import SwiftUI
import Foundation import Foundation
import NetworkExtension import NetworkExtension
import SwiftUI
import NavigationBackport import NavigationBackport
@@ -17,6 +17,7 @@ extension Bundle {
} }
// MARK: - Logging Utility // MARK: - Logging Utility
class VPNLogger: ObservableObject { class VPNLogger: ObservableObject {
@Published var logs: [String] = [] @Published var logs: [String] = []
@@ -35,6 +36,7 @@ class VPNLogger: ObservableObject {
} }
// MARK: - Tunnel Manager // MARK: - Tunnel Manager
class TunnelManager: ObservableObject { class TunnelManager: ObservableObject {
@Published var hasLocalDeviceSupport = false @Published var hasLocalDeviceSupport = false
@Published var tunnelStatus: TunnelStatus = .disconnected @Published var tunnelStatus: TunnelStatus = .disconnected
@@ -111,8 +113,9 @@ class TunnelManager: ObservableObject {
} }
// MARK: - Private Methods // MARK: - Private Methods
private func loadTunnelPreferences() { private func loadTunnelPreferences() {
NETunnelProviderManager.loadAllFromPreferences { [weak self] (managers, error) in NETunnelProviderManager.loadAllFromPreferences { [weak self] managers, error in
guard let self = self else { return } guard let self = self else { return }
DispatchQueue.main.async { DispatchQueue.main.async {
@@ -140,11 +143,11 @@ class TunnelManager: ObservableObject {
} else if let manager = stosManagers.first { } else if let manager = stosManagers.first {
self.vpnManager = manager self.vpnManager = manager
let currentStatus = manager.connection.status let currentStatus = manager.connection.status
VPNLogger.shared.log("Loaded existing StosVPN tunnel configuration with status: \(currentStatus.rawValue)") VPNLogger.shared.log("Loaded existing LocalDevVPN tunnel configuration with status: \(currentStatus.rawValue)")
self.updateTunnelStatus(from: currentStatus) self.updateTunnelStatus(from: currentStatus)
} }
} else { } else {
VPNLogger.shared.log("No StosVPN tunnel configuration found") VPNLogger.shared.log("No LocalDevVPN tunnel configuration found")
} }
} else { } else {
VPNLogger.shared.log("No existing tunnel configurations found") VPNLogger.shared.log("No existing tunnel configurations found")
@@ -154,7 +157,7 @@ class TunnelManager: ObservableObject {
} }
private func cleanupDuplicateManagers(_ managers: [NETunnelProviderManager]) { private func cleanupDuplicateManagers(_ managers: [NETunnelProviderManager]) {
VPNLogger.shared.log("Found \(managers.count) StosVPN configurations. Cleaning up duplicates...") VPNLogger.shared.log("Found \(managers.count) LocalDevVPN configurations. Cleaning up duplicates...")
let activeManager = managers.first { let activeManager = managers.first {
$0.connection.status == .connected || $0.connection.status == .connecting $0.connection.status == .connected || $0.connection.status == .connecting
@@ -218,14 +221,14 @@ class TunnelManager: ObservableObject {
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
guard let self = self else { return } guard let self = self else { return }
if self.tunnelStatus != newStatus { if self.tunnelStatus != newStatus {
VPNLogger.shared.log("StosVPN status updated from \(self.tunnelStatus) to \(newStatus)") VPNLogger.shared.log("LocalDevVPN status updated from \(self.tunnelStatus) to \(newStatus)")
} }
self.tunnelStatus = newStatus self.tunnelStatus = newStatus
} }
} }
private func createStosVPNConfiguration(completion: @escaping (NETunnelProviderManager?) -> Void) { private func createLocalDevVPNConfiguration(completion: @escaping (NETunnelProviderManager?) -> Void) {
NETunnelProviderManager.loadAllFromPreferences { [weak self] (managers, error) in NETunnelProviderManager.loadAllFromPreferences { [weak self] managers, error in
guard let self = self else { guard let self = self else {
completion(nil) completion(nil)
return return
@@ -246,18 +249,18 @@ class TunnelManager: ObservableObject {
} }
if let existingManager = stosManagers.first { if let existingManager = stosManagers.first {
VPNLogger.shared.log("Found existing StosVPN configuration, using it instead of creating new one") VPNLogger.shared.log("Found existing LocalDevVPN configuration, using it instead of creating new one")
completion(existingManager) completion(existingManager)
return return
} }
} }
let manager = NETunnelProviderManager() let manager = NETunnelProviderManager()
manager.localizedDescription = "StosVPN" manager.localizedDescription = "LocalDevVPN"
let proto = NETunnelProviderProtocol() let proto = NETunnelProviderProtocol()
proto.providerBundleIdentifier = self.tunnelBundleId proto.providerBundleIdentifier = self.tunnelBundleId
proto.serverAddress = "StosVPN's Local Network Tunnel" proto.serverAddress = "LocalDevVPN's Local Network Tunnel"
manager.protocolConfiguration = proto manager.protocolConfiguration = proto
let onDemandRule = NEOnDemandRuleEvaluateConnection() let onDemandRule = NEOnDemandRuleEvaluateConnection()
@@ -274,12 +277,12 @@ class TunnelManager: ObservableObject {
manager.saveToPreferences { error in manager.saveToPreferences { error in
DispatchQueue.main.async { DispatchQueue.main.async {
if let error = error { if let error = error {
VPNLogger.shared.log("Error creating StosVPN configuration: \(error.localizedDescription)") VPNLogger.shared.log("Error creating LocalDevVPN configuration: \(error.localizedDescription)")
completion(nil) completion(nil)
return return
} }
VPNLogger.shared.log("StosVPN configuration created successfully") VPNLogger.shared.log("LocalDevVPN configuration created successfully")
completion(manager) completion(manager)
} }
} }
@@ -343,19 +346,20 @@ class TunnelManager: ObservableObject {
guard let self = self else { return } guard let self = self else { return }
if let activeManager = activeManager, if let activeManager = activeManager,
(activeManager.protocolConfiguration as? NETunnelProviderProtocol)?.providerBundleIdentifier != self.tunnelBundleId { (activeManager.protocolConfiguration as? NETunnelProviderProtocol)?.providerBundleIdentifier != self.tunnelBundleId
VPNLogger.shared.log("Disconnecting existing VPN connection before starting StosVPN") {
VPNLogger.shared.log("Disconnecting existing VPN connection before starting LocalDevVPN")
UserDefaults.standard.set(true, forKey: "ShouldStartStosVPNAfterDisconnect") UserDefaults.standard.set(true, forKey: "ShouldStartLocalDevVPNAfterDisconnect")
activeManager.connection.stopVPNTunnel() activeManager.connection.stopVPNTunnel()
return return
} }
self.initializeAndStartStosVPN() self.initializeAndStartLocalDevVPN()
} }
} }
private func initializeAndStartStosVPN() { private func initializeAndStartLocalDevVPN() {
if let manager = vpnManager { if let manager = vpnManager {
manager.loadFromPreferences { [weak self] error in manager.loadFromPreferences { [weak self] error in
guard let self = self else { return } guard let self = self else { return }
@@ -405,7 +409,7 @@ class TunnelManager: ObservableObject {
} }
} }
self.createStosVPNConfiguration { [weak self] manager in self.createLocalDevVPNConfiguration { [weak self] manager in
guard let self = self, let manager = manager else { return } guard let self = self, let manager = manager else { return }
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
self?.vpnManager = manager self?.vpnManager = manager
@@ -421,7 +425,7 @@ class TunnelManager: ObservableObject {
VPNLogger.shared.log("Current VPN status before start attempt: \(currentStatus.rawValue)") VPNLogger.shared.log("Current VPN status before start attempt: \(currentStatus.rawValue)")
if currentStatus == .connected { if currentStatus == .connected {
VPNLogger.shared.log("StosVPN tunnel is already connected") VPNLogger.shared.log("LocalDevVPN tunnel is already connected")
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
self?.tunnelStatus = .connected self?.tunnelStatus = .connected
} }
@@ -429,7 +433,7 @@ class TunnelManager: ObservableObject {
} }
if currentStatus == .connecting { if currentStatus == .connecting {
VPNLogger.shared.log("StosVPN tunnel is already connecting") VPNLogger.shared.log("LocalDevVPN tunnel is already connecting")
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
self?.tunnelStatus = .connecting self?.tunnelStatus = .connecting
} }
@@ -478,17 +482,17 @@ class TunnelManager: ObservableObject {
let options: [String: NSObject] = [ let options: [String: NSObject] = [
"TunnelDeviceIP": self.tunnelDeviceIp as NSObject, "TunnelDeviceIP": self.tunnelDeviceIp as NSObject,
"TunnelFakeIP": self.tunnelFakeIp as NSObject, "TunnelFakeIP": self.tunnelFakeIp as NSObject,
"TunnelSubnetMask": self.tunnelSubnetMask as NSObject "TunnelSubnetMask": self.tunnelSubnetMask as NSObject,
] ]
do { do {
try manager.connection.startVPNTunnel(options: options) try manager.connection.startVPNTunnel(options: options)
VPNLogger.shared.log("StosVPN tunnel start initiated") VPNLogger.shared.log("LocalDevVPN tunnel start initiated")
} catch { } catch {
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
self?.tunnelStatus = .error self?.tunnelStatus = .error
} }
VPNLogger.shared.log("Failed to start StosVPN tunnel: \(error.localizedDescription)") VPNLogger.shared.log("Failed to start LocalDevVPN tunnel: \(error.localizedDescription)")
} }
} }
} }
@@ -505,9 +509,9 @@ class TunnelManager: ObservableObject {
} }
manager.connection.stopVPNTunnel() manager.connection.stopVPNTunnel()
VPNLogger.shared.log("StosVPN tunnel stop initiated") VPNLogger.shared.log("LocalDevVPN tunnel stop initiated")
UserDefaults.standard.removeObject(forKey: "ShouldStartStosVPNAfterDisconnect") UserDefaults.standard.removeObject(forKey: "ShouldStartLocalDevVPNAfterDisconnect")
} }
func handleVPNStatusChange(notification: Notification) { func handleVPNStatusChange(notification: Notification) {
@@ -517,16 +521,17 @@ class TunnelManager: ObservableObject {
// Always update status if it's our manager's connection // Always update status if it's our manager's connection
if let manager = vpnManager, connection == manager.connection { if let manager = vpnManager, connection == manager.connection {
VPNLogger.shared.log("Status change is for our StosVPN manager") VPNLogger.shared.log("Status change is for our LocalDevVPN manager")
updateTunnelStatus(from: connection.status) updateTunnelStatus(from: connection.status)
} }
if connection.status == .disconnected && if connection.status == .disconnected &&
UserDefaults.standard.bool(forKey: "ShouldStartStosVPNAfterDisconnect") { UserDefaults.standard.bool(forKey: "ShouldStartLocalDevVPNAfterDisconnect")
UserDefaults.standard.removeObject(forKey: "ShouldStartStosVPNAfterDisconnect") {
UserDefaults.standard.removeObject(forKey: "ShouldStartLocalDevVPNAfterDisconnect")
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
self?.initializeAndStartStosVPN() self?.initializeAndStartLocalDevVPN()
} }
return return
} }
@@ -539,7 +544,7 @@ class TunnelManager: ObservableObject {
DispatchQueue.global(qos: .utility).async { [weak self] in DispatchQueue.global(qos: .utility).async { [weak self] in
guard let self = self else { return } guard let self = self else { return }
NETunnelProviderManager.loadAllFromPreferences { [weak self] managers, error in NETunnelProviderManager.loadAllFromPreferences { [weak self] managers, _ in
guard let self = self, let managers = managers, !managers.isEmpty else { guard let self = self, let managers = managers, !managers.isEmpty else {
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
self?.isProcessingStatusChange = false self?.isProcessingStatusChange = false
@@ -582,7 +587,8 @@ class TunnelManager: ObservableObject {
for manager in managers { for manager in managers {
guard let proto = manager.protocolConfiguration as? NETunnelProviderProtocol, guard let proto = manager.protocolConfiguration as? NETunnelProviderProtocol,
proto.providerBundleIdentifier == self.tunnelBundleId else { proto.providerBundleIdentifier == self.tunnelBundleId
else {
continue continue
} }
@@ -642,7 +648,7 @@ struct ContentView: View {
} }
} }
.padding() .padding()
.navigationTitle("StosVPN") .navigationTitle("LocalDevVPN")
.tvOSNavigationBarTitleDisplayMode(.inline) .tvOSNavigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar {
ToolbarItem(placement: .topBarTrailing) { ToolbarItem(placement: .topBarTrailing) {
@@ -673,14 +679,13 @@ extension View {
@ViewBuilder @ViewBuilder
func tvOSNavigationBarTitleDisplayMode(_ displayMode: NavigationBarItem.TitleDisplayMode) -> some View { func tvOSNavigationBarTitleDisplayMode(_ displayMode: NavigationBarItem.TitleDisplayMode) -> some View {
#if os(iOS) #if os(iOS)
self.navigationBarTitleDisplayMode(displayMode) navigationBarTitleDisplayMode(displayMode)
#else #else
self self
#endif #endif
} }
} }
struct StatusIndicatorView: View { struct StatusIndicatorView: View {
@StateObject private var tunnelManager = TunnelManager.shared @StateObject private var tunnelManager = TunnelManager.shared
@State private var animationAmount = 1.0 @State private var animationAmount = 1.0
@@ -746,7 +751,6 @@ struct StatusIndicatorView: View {
} }
} }
struct ConnectionButton: View { struct ConnectionButton: View {
@StateObject private var tunnelManager = TunnelManager.shared @StateObject private var tunnelManager = TunnelManager.shared
let action: () -> Void let action: () -> Void
@@ -888,6 +892,7 @@ struct StatItemView: View {
} }
// MARK: - Updated SettingsView // MARK: - Updated SettingsView
struct SettingsView: View { struct SettingsView: View {
@Environment(\.presentationMode) var presentationMode @Environment(\.presentationMode) var presentationMode
@AppStorage("selectedLanguage") private var selectedLanguage = Locale.current.languageCode ?? "en" @AppStorage("selectedLanguage") private var selectedLanguage = Locale.current.languageCode ?? "en"
@@ -952,7 +957,7 @@ struct SettingsView: View {
LanguageManager.shared.updateLanguage(to: languageCode) LanguageManager.shared.updateLanguage(to: languageCode)
showRestartPopUp = true showRestartPopUp = true
} }
.alert(isPresented: $showRestartPopUp){ .alert(isPresented: $showRestartPopUp) {
Alert( Alert(
title: Text("restart_title"), title: Text("restart_title"),
message: Text("restart_message"), message: Text("restart_message"),
@@ -1000,7 +1005,7 @@ struct SettingsView: View {
.multilineTextAlignment(.trailing) .multilineTextAlignment(.trailing)
.foregroundColor(.secondary) .foregroundColor(.secondary)
.keyboardType(.numbersAndPunctuation) .keyboardType(.numbersAndPunctuation)
.onChange(of: text.wrappedValue) { newValue in .onChange(of: text.wrappedValue) { _ in
if !shownTunnelAlert { if !shownTunnelAlert {
showNetworkWarning = true showNetworkWarning = true
} }
@@ -1016,6 +1021,7 @@ struct SettingsView: View {
} }
// MARK: - New Data Collection Info View // MARK: - New Data Collection Info View
struct DataCollectionInfoView: View { struct DataCollectionInfoView: View {
var body: some View { var body: some View {
ScrollView { ScrollView {
@@ -1188,13 +1194,13 @@ struct SetupView: View {
description: "setup_privacy_description", description: "setup_privacy_description",
imageName: "lock.shield.fill", imageName: "lock.shield.fill",
details: "setup_privacy_details" details: "setup_privacy_details"
) ),
] ]
var body: some View { var body: some View {
NBNavigationStack { NBNavigationStack {
VStack { VStack {
TabView(selection: $currentPage) { TabView(selection: $currentPage) {
ForEach(0..<pages.count, id: \.self) { index in ForEach(0 ..< pages.count, id: \.self) { index in
SetupPageView(page: pages[index]) SetupPageView(page: pages[index])
.tag(index) .tag(index)
} }
@@ -1233,7 +1239,6 @@ struct SetupView: View {
} }
.padding(.bottom) .padding(.bottom)
} }
} }
.navigationTitle(Text("setup_nav")) .navigationTitle(Text("setup_nav"))
.tvOSNavigationBarTitleDisplayMode(.inline) .tvOSNavigationBarTitleDisplayMode(.inline)
@@ -1290,6 +1295,7 @@ struct SetupPageView: View {
} }
// MARK: - Conditional sizes for tvOS // MARK: - Conditional sizes for tvOS
private var tvOSImageSize: CGFloat { private var tvOSImageSize: CGFloat {
#if os(tvOS) #if os(tvOS)
return 60 return 60
@@ -1316,7 +1322,7 @@ struct SetupPageView: View {
private var tvOSTitleFont: Font { private var tvOSTitleFont: Font {
#if os(tvOS) #if os(tvOS)
return .headline //.system(size: 35).bold() return .headline // .system(size: 35).bold()
#else #else
return .title return .title
#endif #endif
@@ -1339,7 +1345,6 @@ struct SetupPageView: View {
} }
} }
class LanguageManager: ObservableObject { class LanguageManager: ObservableObject {
static let shared = LanguageManager() static let shared = LanguageManager()
@Published var currentLanguage: String = Locale.current.languageCode ?? "en" @Published var currentLanguage: String = Locale.current.languageCode ?? "en"
@@ -1351,7 +1356,7 @@ class LanguageManager: ObservableObject {
UserDefaults.standard.set([languageCode], forKey: "AppleLanguages") UserDefaults.standard.set([languageCode], forKey: "AppleLanguages")
UserDefaults.standard.synchronize() UserDefaults.standard.synchronize()
} else { } else {
currentLanguage = "en" //FALLBACK TO DEFAULT LANGUAGE currentLanguage = "en" // FALLBACK TO DEFAULT LANGUAGE
UserDefaults.standard.set(["en"], forKey: "AppleLanguages") UserDefaults.standard.set(["en"], forKey: "AppleLanguages")
UserDefaults.standard.synchronize() UserDefaults.standard.synchronize()
} }
@@ -1359,11 +1364,11 @@ class LanguageManager: ObservableObject {
} }
#if os(tvOS) #if os(tvOS)
@ViewBuilder @ViewBuilder
func GroupBox<Content: View>( func GroupBox<Content: View>(
label: some View, label: some View,
@ViewBuilder content: @escaping () -> Content @ViewBuilder content: @escaping () -> Content
) -> some View { ) -> some View {
#if os(tvOS) #if os(tvOS)
tvOSGroupBox(label: { tvOSGroupBox(label: {
label label
@@ -1371,9 +1376,9 @@ func GroupBox<Content: View>(
#else #else
SwiftUI.GroupBox(label: label, content: content) SwiftUI.GroupBox(label: label, content: content)
#endif #endif
} }
struct tvOSGroupBox<Label: View, Content: View>: View { struct tvOSGroupBox<Label: View, Content: View>: View {
@ViewBuilder let label: () -> Label @ViewBuilder let label: () -> Label
@ViewBuilder let content: () -> Content @ViewBuilder let content: () -> Content
@@ -1403,7 +1408,7 @@ struct tvOSGroupBox<Label: View, Content: View>: View {
.stroke(.separator, lineWidth: 0.5) .stroke(.separator, lineWidth: 0.5)
) )
} }
} }
#endif #endif
#Preview { #Preview {

View File

@@ -13,7 +13,7 @@
"disconnect" = "Disconnect"; "disconnect" = "Disconnect";
"connecting_ellipsis" = "Connecting..."; "connecting_ellipsis" = "Connecting...";
"disconnecting_ellipsis" = "Disconnecting..."; "disconnecting_ellipsis" = "Disconnecting...";
"server_address_name" = "StosVPN Local Tunnel"; "server_address_name" = "LocalDevVPN Local Tunnel";
"local_tunnel_details" = "Tunnel Details"; "local_tunnel_details" = "Tunnel Details";
"time_connected" = "Time Connected"; "time_connected" = "Time Connected";
@@ -53,32 +53,32 @@
"data_collection_policy_title" = "Data Collection Policy"; "data_collection_policy_title" = "Data Collection Policy";
"no_data_collection" = "No Data Collection"; "no_data_collection" = "No Data Collection";
"no_data_collection_description" = "StosVPN DOES NOT collect user data, traffic information, or browsing activity. This app creates a local network tunnel that stays entirely on your device."; "no_data_collection_description" = "LocalDevVPN DOES NOT collect user data, traffic information, or browsing activity. This app creates a local network tunnel that stays entirely on your device.";
"local_processing_only" = "Local Processing Only"; "local_processing_only" = "Local Processing Only";
"local_processing_only_description" = "All network traffic and configurations are processed locally on your device. No information ever leaves the device or is transmitted over the Internet."; "local_processing_only_description" = "All network traffic and configurations are processed locally on your device. No information ever leaves the device or is transmitted over the Internet.";
"no_third_party_sharing" = "No Third Party Sharing"; "no_third_party_sharing" = "No Third Party Sharing";
"no_third_party_sharing_description" = "Since we do not collect data, there is no sharing with third parties. We do not have analytics, tracking, or data collection mechanisms in this app."; "no_third_party_sharing_description" = "Since we do not collect data, there is no sharing with third parties. We do not have analytics, tracking, or data collection mechanisms in this app.";
"why_use_network_permissions" = "Why Use Network Permissions?"; "why_use_network_permissions" = "Why Use Network Permissions?";
"why_use_network_permissions_description" = "StosVPN requires network extension permissions to create a local network interface on your device. This is used exclusively for local development and testing."; "why_use_network_permissions_description" = "LocalDevVPN requires network extension permissions to create a local network interface on your device. This is used exclusively for local development and testing.";
"our_promise" = "Our Promise"; "our_promise" = "Our Promise";
"our_promise_description" = "We are committed to privacy and transparency. This app is designed for developers to test and connect to local servers with no privacy concerns."; "our_promise_description" = "We are committed to privacy and transparency. This app is designed for developers to test and connect to local servers with no privacy concerns.";
"data_collection_policy_nav" = "Data Collection"; "data_collection_policy_nav" = "Data Collection";
"logs_nav" = "Logs"; "logs_nav" = "Logs";
"faq_header" = "Frequently Asked Questions"; "faq_header" = "Frequently Asked Questions";
"faq_q1" = "What does this app do?"; "faq_q1" = "What does this app do?";
"faq_q1_a1" = "StosVPN creates a local network interface for development and testing. It does not route traffic through external servers: everything stays on the device."; "faq_q1_a1" = "LocalDevVPN creates a local network interface for development and testing. It does not route traffic through external servers: everything stays on the device.";
"faq_common_use_cases" = "Common use cases include:"; "faq_common_use_cases" = "Common use cases include:";
"faq_case1" = "• Web app testing with local servers"; "faq_case1" = "• Web app testing with local servers";
"faq_case2" = "• Development and debugging of network features"; "faq_case2" = "• Development and debugging of network features";
"faq_case3" = "• Accessing hosted local development environments"; "faq_case3" = "• Accessing hosted local development environments";
"faq_case4" = "• Testing apps that require specific network configurations"; "faq_case4" = "• Testing apps that require specific network configurations";
"faq_q2" = "Is it a traditional VPN?"; "faq_q2" = "Is it a traditional VPN?";
"faq_q2_a1" = "No, StosVPN is NOT a traditional VPN service. It does NOT:"; "faq_q2_a1" = "No, LocalDevVPN is NOT a traditional VPN service. It does NOT:";
"faq_q2_point1" = "• Route your traffic through external servers"; "faq_q2_point1" = "• Route your traffic through external servers";
"faq_q2_point2" = "• Provide privacy or anonymity for browsing"; "faq_q2_point2" = "• Provide privacy or anonymity for browsing";
"faq_q2_point3" = "• Connect to remote VPN servers"; "faq_q2_point3" = "• Connect to remote VPN servers";
"faq_q2_point4" = "• Encrypt or route your internet traffic"; "faq_q2_point4" = "• Encrypt or route your internet traffic";
"faq_q2_a2" = "StosVPN only creates a local network interface to help developers connect to local services for development and testing."; "faq_q2_a2" = "LocalDevVPN only creates a local network interface to help developers connect to local services for development and testing.";
"faq_q3" = "Why does the connection fail?"; "faq_q3" = "Why does the connection fail?";
"faq_q3_a1" = "Connection failures may be due to system permissions, configuration errors, or iOS restrictions."; "faq_q3_a1" = "Connection failures may be due to system permissions, configuration errors, or iOS restrictions.";
"faq_troubleshoot_header" = "Troubleshooting steps:"; "faq_troubleshoot_header" = "Troubleshooting steps:";
@@ -87,15 +87,15 @@
"faq_troubleshoot3" = "• Check if the IP configuration is valid"; "faq_troubleshoot3" = "• Check if the IP configuration is valid";
"faq_troubleshoot4" = "• Restart the device if problems persist"; "faq_troubleshoot4" = "• Restart the device if problems persist";
"faq_q4" = "Who is this app for?"; "faq_q4" = "Who is this app for?";
"faq_q4_intro" = "StosVPN is primarily designed for:"; "faq_q4_intro" = "LocalDevVPN is primarily designed for:";
"faq_q4_case1" = "• Developers testing local web servers"; "faq_q4_case1" = "• Developers testing local web servers";
"faq_q4_case2" = "• App developers testing network features"; "faq_q4_case2" = "• App developers testing network features";
"faq_q4_case3" = "• QA engineers testing apps in isolated environments"; "faq_q4_case3" = "• QA engineers testing apps in isolated environments";
"faq_q4_case4" = "• Anyone needing access to local services on iOS"; "faq_q4_case4" = "• Anyone needing access to local services on iOS";
"faq_q4_conclusion" = "This app is publicly available and useful for developers who need to test apps with network features on iOS."; "faq_q4_conclusion" = "This app is publicly available and useful for developers who need to test apps with network features on iOS.";
"business_model_header" = "Business Model"; "business_model_header" = "Business Model";
"biz_q1" = "How does StosVPN work?"; "biz_q1" = "How does LocalDevVPN work?";
"biz_q1_a1" = "StosVPN is a completely free app available to the public. There are no paid features, subscriptions, or in-app purchases."; "biz_q1_a1" = "LocalDevVPN is a completely free app available to the public. There are no paid features, subscriptions, or in-app purchases.";
"biz_key_points_header" = "Key points of our model:"; "biz_key_points_header" = "Key points of our model:";
"biz_point1" = "• The app is not tied to any company or group"; "biz_point1" = "• The app is not tied to any company or group";
"biz_point2" = "• Anyone can download and use the app from the App Store"; "biz_point2" = "• Anyone can download and use the app from the App Store";
@@ -106,18 +106,18 @@
"requires_ios" = "Requires iOS 14.0 or later"; "requires_ios" = "Requires iOS 14.0 or later";
"uses_network_extension" = "Uses Apple Network Extension APIs"; "uses_network_extension" = "Uses Apple Network Extension APIs";
"help_and_support_nav" = "Help & Support"; "help_and_support_nav" = "Help & Support";
"setup_welcome_title" = "Welcome to StosVPN"; "setup_welcome_title" = "Welcome to LocalDevVPN";
"setup_welcome_description" = "A simple local network tunnel for developers"; "setup_welcome_description" = "A simple local network tunnel for developers";
"setup_welcome_details" = "StosVPN creates a local network interface for development, testing, and access to local servers. This app DOES NOT collect user data or route traffic through external servers."; "setup_welcome_details" = "LocalDevVPN creates a local network interface for development, testing, and access to local servers. This app DOES NOT collect user data or route traffic through external servers.";
"setup_why_title" = "Why Use StosVPN?"; "setup_why_title" = "Why Use LocalDevVPN?";
"setup_why_description" = "Perfect for iOS developers"; "setup_why_description" = "Perfect for iOS developers";
"setup_why_details" = "• Access local web servers and development environments\n• Test apps requiring specific network configurations\n• Connect to local network services without complex setup\n• Create isolated testing environments"; "setup_why_details" = "• Access local web servers and development environments\n• Test apps requiring specific network configurations\n• Connect to local network services without complex setup\n• Create isolated testing environments";
"setup_easy_title" = "Easy to Use"; "setup_easy_title" = "Easy to Use";
"setup_easy_description" = "Just one tap to connect"; "setup_easy_description" = "Just one tap to connect";
"setup_easy_details" = "StosVPN is designed to be simple. Just tap the connect button to establish a local tunnel with preconfigured settings."; "setup_easy_details" = "LocalDevVPN is designed to be simple. Just tap the connect button to establish a local tunnel with preconfigured settings.";
"setup_privacy_title" = "Privacy Focused"; "setup_privacy_title" = "Privacy Focused";
"setup_privacy_description" = "Your data stays on the device"; "setup_privacy_description" = "Your data stays on the device";
"setup_privacy_details" = "StosVPN creates a local tunnel that does not route traffic through external servers. All traffic stays on your device, ensuring privacy and security. No data is collected or shared with third parties."; "setup_privacy_details" = "LocalDevVPN creates a local tunnel that does not route traffic through external servers. All traffic stays on your device, ensuring privacy and security. No data is collected or shared with third parties.";
"setup_nav" = "Setup"; "setup_nav" = "Setup";
"setup_get_started" = "Get Started"; "setup_get_started" = "Get Started";
"setup_next" = "Next"; "setup_next" = "Next";

View File

@@ -13,7 +13,7 @@
"disconnect" = "Desconectar"; "disconnect" = "Desconectar";
"connecting_ellipsis" = "Conectando..."; "connecting_ellipsis" = "Conectando...";
"disconnecting_ellipsis" = "Desconectando..."; "disconnecting_ellipsis" = "Desconectando...";
"server_address_name" = "Túnel Local de StosVPN"; "server_address_name" = "Túnel Local de LocalDevVPN";
"local_tunnel_details" = "Detalles del Túnel"; "local_tunnel_details" = "Detalles del Túnel";
"time_connected" = "Tiempo Conectado"; "time_connected" = "Tiempo Conectado";
@@ -53,32 +53,32 @@
"data_collection_policy_title" = "Política de Recopilación de Datos"; "data_collection_policy_title" = "Política de Recopilación de Datos";
"no_data_collection" = "No Recopilación de Datos"; "no_data_collection" = "No Recopilación de Datos";
"no_data_collection_description" = "StosVPN NO recopila datos de usuarios, información sobre el tráfico o actividad de navegación. Esta app crea un túnel de red local que permanece completamente en tu dispositivo."; "no_data_collection_description" = "LocalDevVPN NO recopila datos de usuarios, información sobre el tráfico o actividad de navegación. Esta app crea un túnel de red local que permanece completamente en tu dispositivo.";
"local_processing_only" = "Solo Procesamiento Local"; "local_processing_only" = "Solo Procesamiento Local";
"local_processing_only_description" = "Todo el tráfico de red y configuraciones se procesan localmente en tu dispositivo. Ninguna información deja el dispositivo ni se transmite a Internet."; "local_processing_only_description" = "Todo el tráfico de red y configuraciones se procesan localmente en tu dispositivo. Ninguna información deja el dispositivo ni se transmite a Internet.";
"no_third_party_sharing" = "No Compartir con Terceros"; "no_third_party_sharing" = "No Compartir con Terceros";
"no_third_party_sharing_description" = "Dado que no recopilamos datos, no compartimos con terceros. No tenemos análisis, rastreo ni mecanismos de recopilación de datos en esta app."; "no_third_party_sharing_description" = "Dado que no recopilamos datos, no compartimos con terceros. No tenemos análisis, rastreo ni mecanismos de recopilación de datos en esta app.";
"why_use_network_permissions" = "¿Por Qué Usar Permisos de Red?"; "why_use_network_permissions" = "¿Por Qué Usar Permisos de Red?";
"why_use_network_permissions_description" = "StosVPN requiere permisos de extensión de red para crear una interfaz de red local en tu dispositivo. Esto se utiliza exclusivamente para desarrollo y pruebas locales."; "why_use_network_permissions_description" = "LocalDevVPN requiere permisos de extensión de red para crear una interfaz de red local en tu dispositivo. Esto se utiliza exclusivamente para desarrollo y pruebas locales.";
"our_promise" = "Nuestra Promesa"; "our_promise" = "Nuestra Promesa";
"our_promise_description" = "Estamos comprometidos con la privacidad y la transparencia. Esta app está diseñada para desarrolladores para probar y conectarse a servidores locales sin preocupaciones sobre la privacidad."; "our_promise_description" = "Estamos comprometidos con la privacidad y la transparencia. Esta app está diseñada para desarrolladores para probar y conectarse a servidores locales sin preocupaciones sobre la privacidad.";
"data_collection_policy_nav" = "Recopilación de Datos"; "data_collection_policy_nav" = "Recopilación de Datos";
"logs_nav" = "Registros"; "logs_nav" = "Registros";
"faq_header" = "Preguntas Frecuentes"; "faq_header" = "Preguntas Frecuentes";
"faq_q1" = "¿Qué hace esta app?"; "faq_q1" = "¿Qué hace esta app?";
"faq_q1_a1" = "StosVPN crea una interfaz de red local útil para el desarrollo y las pruebas. No enruta el tráfico a través de servidores externos: todo permanece en el dispositivo."; "faq_q1_a1" = "LocalDevVPN crea una interfaz de red local útil para el desarrollo y las pruebas. No enruta el tráfico a través de servidores externos: todo permanece en el dispositivo.";
"faq_common_use_cases" = "Los casos de uso comunes incluyen:"; "faq_common_use_cases" = "Los casos de uso comunes incluyen:";
"faq_case1" = "• Pruebas de aplicaciones web con servidores locales"; "faq_case1" = "• Pruebas de aplicaciones web con servidores locales";
"faq_case2" = "• Desarrollo y depuración de funcionalidades de red"; "faq_case2" = "• Desarrollo y depuración de funcionalidades de red";
"faq_case3" = "• Acceso a entornos de desarrollo locales alojados"; "faq_case3" = "• Acceso a entornos de desarrollo locales alojados";
"faq_case4" = "• Pruebas de apps que requieren configuraciones de red específicas"; "faq_case4" = "• Pruebas de apps que requieren configuraciones de red específicas";
"faq_q2" = "¿Es una VPN tradicional?"; "faq_q2" = "¿Es una VPN tradicional?";
"faq_q2_a1" = "No, StosVPN NO es un servicio de VPN tradicional. No:"; "faq_q2_a1" = "No, LocalDevVPN NO es un servicio de VPN tradicional. No:";
"faq_q2_point1" = "• Enruta tu tráfico a través de servidores externos"; "faq_q2_point1" = "• Enruta tu tráfico a través de servidores externos";
"faq_q2_point2" = "• Proporciona privacidad o anonimato para la navegación"; "faq_q2_point2" = "• Proporciona privacidad o anonimato para la navegación";
"faq_q2_point3" = "• Se conecta a servidores VPN remotos"; "faq_q2_point3" = "• Se conecta a servidores VPN remotos";
"faq_q2_point4" = "• Cifra o enruta tu tráfico de internet"; "faq_q2_point4" = "• Cifra o enruta tu tráfico de internet";
"faq_q2_a2" = "StosVPN solo crea una interfaz de red local para ayudar a los desarrolladores a conectarse a servicios locales para el desarrollo y las pruebas."; "faq_q2_a2" = "LocalDevVPN solo crea una interfaz de red local para ayudar a los desarrolladores a conectarse a servicios locales para el desarrollo y las pruebas.";
"faq_q3" = "¿Por qué falla la conexión?"; "faq_q3" = "¿Por qué falla la conexión?";
"faq_q3_a1" = "Las fallas en la conexión pueden deberse a permisos del sistema, errores de configuración o restricciones de iOS."; "faq_q3_a1" = "Las fallas en la conexión pueden deberse a permisos del sistema, errores de configuración o restricciones de iOS.";
"faq_troubleshoot_header" = "Pasos para solucionar problemas:"; "faq_troubleshoot_header" = "Pasos para solucionar problemas:";
@@ -87,15 +87,15 @@
"faq_troubleshoot3" = "• Verifica si la configuración IP es válida"; "faq_troubleshoot3" = "• Verifica si la configuración IP es válida";
"faq_troubleshoot4" = "• Reinicia el dispositivo si los problemas persisten"; "faq_troubleshoot4" = "• Reinicia el dispositivo si los problemas persisten";
"faq_q4" = "¿Para quién es esta app?"; "faq_q4" = "¿Para quién es esta app?";
"faq_q4_intro" = "StosVPN está diseñado principalmente para:"; "faq_q4_intro" = "LocalDevVPN está diseñado principalmente para:";
"faq_q4_case1" = "• Desarrolladores que prueban servidores web locales"; "faq_q4_case1" = "• Desarrolladores que prueban servidores web locales";
"faq_q4_case2" = "• Desarrolladores de apps que prueban funcionalidades de red"; "faq_q4_case2" = "• Desarrolladores de apps que prueban funcionalidades de red";
"faq_q4_case3" = "• Ingenieros de QA que prueban apps en entornos aislados"; "faq_q4_case3" = "• Ingenieros de QA que prueban apps en entornos aislados";
"faq_q4_case4" = "• Cualquier persona que necesite acceder a servicios locales en iOS"; "faq_q4_case4" = "• Cualquier persona que necesite acceder a servicios locales en iOS";
"faq_q4_conclusion" = "Esta app está disponible para el público y es útil para desarrolladores que necesitan probar apps con funcionalidades de red en iOS."; "faq_q4_conclusion" = "Esta app está disponible para el público y es útil para desarrolladores que necesitan probar apps con funcionalidades de red en iOS.";
"business_model_header" = "Modelo de Negocio"; "business_model_header" = "Modelo de Negocio";
"biz_q1" = "¿Cómo funciona StosVPN?"; "biz_q1" = "¿Cómo funciona LocalDevVPN?";
"biz_q1_a1" = "StosVPN es una app completamente gratuita disponible para el público. No hay funciones de pago, suscripciones ni compras dentro de la app."; "biz_q1_a1" = "LocalDevVPN es una app completamente gratuita disponible para el público. No hay funciones de pago, suscripciones ni compras dentro de la app.";
"biz_key_points_header" = "Puntos clave de nuestro modelo:"; "biz_key_points_header" = "Puntos clave de nuestro modelo:";
"biz_point1" = "• La app no está vinculada a ninguna empresa o grupo"; "biz_point1" = "• La app no está vinculada a ninguna empresa o grupo";
"biz_point2" = "• Cualquier persona puede descargar y usar la app desde la App Store"; "biz_point2" = "• Cualquier persona puede descargar y usar la app desde la App Store";
@@ -106,18 +106,18 @@
"requires_ios" = "Requiere iOS 14.0 o superior"; "requires_ios" = "Requiere iOS 14.0 o superior";
"uses_network_extension" = "Usa la API de Extensión de Red de Apple"; "uses_network_extension" = "Usa la API de Extensión de Red de Apple";
"help_and_support_nav" = "Ayuda & Soporte"; "help_and_support_nav" = "Ayuda & Soporte";
"setup_welcome_title" = "Bienvenido a StosVPN"; "setup_welcome_title" = "Bienvenido a LocalDevVPN";
"setup_welcome_description" = "Un simple túnel de red local para desarrolladores"; "setup_welcome_description" = "Un simple túnel de red local para desarrolladores";
"setup_welcome_details" = "StosVPN crea una interfaz de red local para el desarrollo, pruebas y acceso a servidores locales. Esta app NO recopila datos de usuario ni enruta el tráfico a través de servidores externos."; "setup_welcome_details" = "LocalDevVPN crea una interfaz de red local para el desarrollo, pruebas y acceso a servidores locales. Esta app NO recopila datos de usuario ni enruta el tráfico a través de servidores externos.";
"setup_why_title" = "¿Por qué usar StosVPN?"; "setup_why_title" = "¿Por qué usar LocalDevVPN?";
"setup_why_description" = "Ideal para desarrolladores iOS"; "setup_why_description" = "Ideal para desarrolladores iOS";
"setup_why_details" = "• Accede a servidores web locales y entornos de desarrollo\n• Prueba apps que requieren configuraciones de red específicas\n• Conéctate a servicios de red locales sin configuraciones complejas\n• Crea entornos aislados para pruebas"; "setup_why_details" = "• Accede a servidores web locales y entornos de desarrollo\n• Prueba apps que requieren configuraciones de red específicas\n• Conéctate a servicios de red locales sin configuraciones complejas\n• Crea entornos aislados para pruebas";
"setup_easy_title" = "Fácil de Usar"; "setup_easy_title" = "Fácil de Usar";
"setup_easy_description" = "Conéctate con solo un toque"; "setup_easy_description" = "Conéctate con solo un toque";
"setup_easy_details" = "StosVPN está diseñado para ser simple. Solo toca el botón de conexión para establecer un túnel local con configuraciones predefinidas."; "setup_easy_details" = "LocalDevVPN está diseñado para ser simple. Solo toca el botón de conexión para establecer un túnel local con configuraciones predefinidas.";
"setup_privacy_title" = "Enfocado en la Privacidad"; "setup_privacy_title" = "Enfocado en la Privacidad";
"setup_privacy_description" = "Tus datos permanecen en tu dispositivo"; "setup_privacy_description" = "Tus datos permanecen en tu dispositivo";
"setup_privacy_details" = "StosVPN crea un túnel local que no enruta el tráfico a través de servidores externos. Todo el tráfico permanece en tu dispositivo, asegurando privacidad y seguridad. Ningún dato se recopila ni se comparte con terceros."; "setup_privacy_details" = "LocalDevVPN crea un túnel local que no enruta el tráfico a través de servidores externos. Todo el tráfico permanece en tu dispositivo, asegurando privacidad y seguridad. Ningún dato se recopila ni se comparte con terceros.";
"setup_nav" = "Configuración"; "setup_nav" = "Configuración";
"setup_get_started" = "Comenzar"; "setup_get_started" = "Comenzar";
"setup_next" = "Siguiente"; "setup_next" = "Siguiente";

View File

@@ -13,7 +13,7 @@
"disconnect" = "Disconnetti"; "disconnect" = "Disconnetti";
"connecting_ellipsis" = "Connessione in corso..."; "connecting_ellipsis" = "Connessione in corso...";
"disconnecting_ellipsis" = "Disconnessione in corso..."; "disconnecting_ellipsis" = "Disconnessione in corso...";
"server_address_name" = "Tunnel Locale di StosVPN"; "server_address_name" = "Tunnel Locale di LocalDevVPN";
"local_tunnel_details" = "Dettagli del Tunnel"; "local_tunnel_details" = "Dettagli del Tunnel";
"time_connected" = "Tempo Connesso"; "time_connected" = "Tempo Connesso";
@@ -53,32 +53,32 @@
"data_collection_policy_title" = "Politica di Raccolta Dati"; "data_collection_policy_title" = "Politica di Raccolta Dati";
"no_data_collection" = "Nessuna raccolta di dati"; "no_data_collection" = "Nessuna raccolta di dati";
"no_data_collection_description" = "StosVPN NON raccoglie dati utente, informazioni sul traffico o attività di navigazione. Questa app crea un tunnel di rete locale che rimane interamente sul tuo dispositivo."; "no_data_collection_description" = "LocalDevVPN NON raccoglie dati utente, informazioni sul traffico o attività di navigazione. Questa app crea un tunnel di rete locale che rimane interamente sul tuo dispositivo.";
"local_processing_only" = "Elaborazione solo sul tuo smartphone"; "local_processing_only" = "Elaborazione solo sul tuo smartphone";
"local_processing_only_description" = "Tutto il traffico di rete e le configurazioni vengono elaborate localmente sul tuo dispositivo. Nessuna informazione lascia mai il dispositivo o viene trasmessa su Internet."; "local_processing_only_description" = "Tutto il traffico di rete e le configurazioni vengono elaborate localmente sul tuo dispositivo. Nessuna informazione lascia mai il dispositivo o viene trasmessa su Internet.";
"no_third_party_sharing" = "Nessuna condivisione con servizi di terze parti"; "no_third_party_sharing" = "Nessuna condivisione con servizi di terze parti";
"no_third_party_sharing_description" = "Poiché non raccogliamo dati, non c'è alcuna condivisione con terze parti. Non abbiamo analisi, tracciamento o meccanismi di raccolta dati in questa app."; "no_third_party_sharing_description" = "Poiché non raccogliamo dati, non c'è alcuna condivisione con terze parti. Non abbiamo analisi, tracciamento o meccanismi di raccolta dati in questa app.";
"why_use_network_permissions" = "Perché concedere i permessi di Rete?"; "why_use_network_permissions" = "Perché concedere i permessi di Rete?";
"why_use_network_permissions_description" = "StosVPN richiede permessi di estensione di rete per creare un'interfaccia di rete locale sul tuo dispositivo. Questo è utilizzato esclusivamente per sviluppo e test locali sul tuo dispositivo."; "why_use_network_permissions_description" = "LocalDevVPN richiede permessi di estensione di rete per creare un'interfaccia di rete locale sul tuo dispositivo. Questo è utilizzato esclusivamente per sviluppo e test locali sul tuo dispositivo.";
"our_promise" = "La nostra promessa"; "our_promise" = "La nostra promessa";
"our_promise_description" = "Ci impegniamo per la privacy e la trasparenza. Questa app è progettata per sviluppatori per testare e connettersi a server locali senza preoccupazioni sulla privacy."; "our_promise_description" = "Ci impegniamo per la privacy e la trasparenza. Questa app è progettata per sviluppatori per testare e connettersi a server locali senza preoccupazioni sulla privacy.";
"data_collection_policy_nav" = "Raccolta Dati"; "data_collection_policy_nav" = "Raccolta Dati";
"logs_nav" = "Log di connessione"; "logs_nav" = "Log di connessione";
"faq_header" = "Domande Frequenti"; "faq_header" = "Domande Frequenti";
"faq_q1" = "Cosa fa questa app?"; "faq_q1" = "Cosa fa questa app?";
"faq_q1_a1" = "StosVPN crea un'interfaccia di rete locale utilizzabile per sviluppo e test. Non instrada il traffico attraverso server esterni, tutto rimane sul dispositivo."; "faq_q1_a1" = "LocalDevVPN crea un'interfaccia di rete locale utilizzabile per sviluppo e test. Non instrada il traffico attraverso server esterni, tutto rimane sul dispositivo.";
"faq_common_use_cases" = "I casi d'uso comuni includono:"; "faq_common_use_cases" = "I casi d'uso comuni includono:";
"faq_case1" = "• Test di applicazioni web con server locali."; "faq_case1" = "• Test di applicazioni web con server locali.";
"faq_case2" = "• Sviluppo e Debug di funzionalità di rete."; "faq_case2" = "• Sviluppo e Debug di funzionalità di rete.";
"faq_case3" = "• Accesso ad ambienti di sviluppo locali ospitati."; "faq_case3" = "• Accesso ad ambienti di sviluppo locali ospitati.";
"faq_case4" = "• Test di applicazioni che richiedono configurazioni di rete specifiche."; "faq_case4" = "• Test di applicazioni che richiedono configurazioni di rete specifiche.";
"faq_q2" = "È un VPN tradizionale?"; "faq_q2" = "È un VPN tradizionale?";
"faq_q2_a1" = "No, StosVPN NON è un servizio VPN tradizionale. Non:"; "faq_q2_a1" = "No, LocalDevVPN NON è un servizio VPN tradizionale. Non:";
"faq_q2_point1" = "• Instrada il tuo traffico attraverso server esterni."; "faq_q2_point1" = "• Instrada il tuo traffico attraverso server esterni.";
"faq_q2_point2" = "• Garantisce privacy e la navigazione in incognito."; "faq_q2_point2" = "• Garantisce privacy e la navigazione in incognito.";
"faq_q2_point3" = "• Esegue connessioni a server VPN remoti."; "faq_q2_point3" = "• Esegue connessioni a server VPN remoti.";
"faq_q2_point4" = "• Cripta o instrada il tuo traffico internet."; "faq_q2_point4" = "• Cripta o instrada il tuo traffico internet.";
"faq_q2_a2" = "StosVPN crea solo un'interfaccia di rete locale per aiutare gli sviluppatori a connettersi a servizi locali per lo sviluppo e test."; "faq_q2_a2" = "LocalDevVPN crea solo un'interfaccia di rete locale per aiutare gli sviluppatori a connettersi a servizi locali per lo sviluppo e test.";
"faq_q3" = "Perché non si connette?"; "faq_q3" = "Perché non si connette?";
"faq_q3_a1" = "Un errore durante la connessione può essere dovuto a permessi di sistema, errori di configurazione o restrizioni di iOS."; "faq_q3_a1" = "Un errore durante la connessione può essere dovuto a permessi di sistema, errori di configurazione o restrizioni di iOS.";
"faq_troubleshoot_header" = "Passaggi per risolvere:"; "faq_troubleshoot_header" = "Passaggi per risolvere:";
@@ -87,15 +87,15 @@
"faq_troubleshoot3" = "• Verifica se la configurazione IP è valida."; "faq_troubleshoot3" = "• Verifica se la configurazione IP è valida.";
"faq_troubleshoot4" = "• Riavvia il dispositivo se i problemi persistono."; "faq_troubleshoot4" = "• Riavvia il dispositivo se i problemi persistono.";
"faq_q4" = "Per chi è questa app?"; "faq_q4" = "Per chi è questa app?";
"faq_q4_intro" = "StosVPN è progettato principalmente per:"; "faq_q4_intro" = "LocalDevVPN è progettato principalmente per:";
"faq_q4_case1" = "• Sviluppatori che testano server web locali."; "faq_q4_case1" = "• Sviluppatori che testano server web locali.";
"faq_q4_case2" = "• Sviluppatori app che testano funzionalità di rete."; "faq_q4_case2" = "• Sviluppatori app che testano funzionalità di rete.";
"faq_q4_case3" = "• Ingegneri QA che testano app in ambienti isolati."; "faq_q4_case3" = "• Ingegneri QA che testano app in ambienti isolati.";
"faq_q4_case4" = "• Chiunque necessiti di accedere a servizi locali sull'iOS."; "faq_q4_case4" = "• Chiunque necessiti di accedere a servizi locali sull'iOS.";
"faq_q4_conclusion" = "Questa app è disponibile al pubblico ed è utile per sviluppatori che devono testare app con funzionalità di rete su iOS."; "faq_q4_conclusion" = "Questa app è disponibile al pubblico ed è utile per sviluppatori che devono testare app con funzionalità di rete su iOS.";
"business_model_header" = "Modello di Business"; "business_model_header" = "Modello di Business";
"biz_q1" = "Come funziona StosVPN?"; "biz_q1" = "Come funziona LocalDevVPN?";
"biz_q1_a1" = "StosVPN è un'app completamente gratuita disponibile al pubblico. Non ci sono funzionalità a pagamento, abbonamenti o acquisti inapp."; "biz_q1_a1" = "LocalDevVPN è un'app completamente gratuita disponibile al pubblico. Non ci sono funzionalità a pagamento, abbonamenti o acquisti inapp.";
"biz_key_points_header" = "Punti chiave del nostro modello:"; "biz_key_points_header" = "Punti chiave del nostro modello:";
"biz_point1" = "• L'app non è vincolata a nessuna azienda o gruppo."; "biz_point1" = "• L'app non è vincolata a nessuna azienda o gruppo.";
"biz_point2" = "• Chiunque può scaricare e usare l'app dall'App Store."; "biz_point2" = "• Chiunque può scaricare e usare l'app dall'App Store.";
@@ -106,18 +106,18 @@
"requires_ios" = "Richiede iOS 14.0 o superiore"; "requires_ios" = "Richiede iOS 14.0 o superiore";
"uses_network_extension" = "Usa le Network Extension API di Apple"; "uses_network_extension" = "Usa le Network Extension API di Apple";
"help_and_support_nav" = "Guida & Supporto"; "help_and_support_nav" = "Guida & Supporto";
"setup_welcome_title" = "Benvenuto in StosVPN"; "setup_welcome_title" = "Benvenuto in LocalDevVPN";
"setup_welcome_description" = "Un semplice tunnel di rete locale per sviluppatori"; "setup_welcome_description" = "Un semplice tunnel di rete locale per sviluppatori";
"setup_welcome_details" = "StosVPN crea un'interfaccia di rete locale per sviluppo, test e accesso a server locali. Questa app NON raccoglie dati utente né instrada il traffico attraverso server esterni."; "setup_welcome_details" = "LocalDevVPN crea un'interfaccia di rete locale per sviluppo, test e accesso a server locali. Questa app NON raccoglie dati utente né instrada il traffico attraverso server esterni.";
"setup_why_title" = "Perché Usare StosVPN?"; "setup_why_title" = "Perché Usare LocalDevVPN?";
"setup_why_description" = "Perfetto per sviluppatori iOS"; "setup_why_description" = "Perfetto per sviluppatori iOS";
"setup_why_details" = "• Accedi a server web locali e ambienti di sviluppo\n• Testa app che richiedono configurazioni di rete specifiche\n• Connettiti a servizi di rete locali senza setup complessi\n• Crea ambienti isolati per test"; "setup_why_details" = "• Accedi a server web locali e ambienti di sviluppo\n• Testa app che richiedono configurazioni di rete specifiche\n• Connettiti a servizi di rete locali senza setup complessi\n• Crea ambienti isolati per test";
"setup_easy_title" = "Facile da Usare"; "setup_easy_title" = "Facile da Usare";
"setup_easy_description" = "Basta un tap per connettersi"; "setup_easy_description" = "Basta un tap per connettersi";
"setup_easy_details" = "StosVPN è progettato per essere semplice. Basta toccare il pulsante di connessione per stabilire un tunnel locale con impostazioni preconfigurate."; "setup_easy_details" = "LocalDevVPN è progettato per essere semplice. Basta toccare il pulsante di connessione per stabilire un tunnel locale con impostazioni preconfigurate.";
"setup_privacy_title" = "Focalizzato sulla Privacy"; "setup_privacy_title" = "Focalizzato sulla Privacy";
"setup_privacy_description" = "I tuoi dati restano sul dispositivo"; "setup_privacy_description" = "I tuoi dati restano sul dispositivo";
"setup_privacy_details" = "StosVPN crea un tunnel locale che non instrada il traffico attraverso server esterni. Tutto il traffico rimane sul tuo dispositivo, garantendo privacy e sicurezza. Nessun dato viene raccolto o condiviso con terze parti."; "setup_privacy_details" = "LocalDevVPN crea un tunnel locale che non instrada il traffico attraverso server esterni. Tutto il traffico rimane sul tuo dispositivo, garantendo privacy e sicurezza. Nessun dato viene raccolto o condiviso con terze parti.";
"setup_nav" = "Setup"; "setup_nav" = "Setup";
"setup_get_started" = "Inizia"; "setup_get_started" = "Inizia";
"setup_next" = "Avanti"; "setup_next" = "Avanti";

View File

@@ -13,7 +13,7 @@
"disconnect" = "Rozłącz"; "disconnect" = "Rozłącz";
"connecting_ellipsis" = "Łączenie..."; "connecting_ellipsis" = "Łączenie...";
"disconnecting_ellipsis" = "Rozłączanie..."; "disconnecting_ellipsis" = "Rozłączanie...";
"server_address_name" = "Lokalny tunel StosVPN"; "server_address_name" = "Lokalny tunel LocalDevVPN";
"local_tunnel_details" = "Szczegóły tunelu"; "local_tunnel_details" = "Szczegóły tunelu";
"time_connected" = "Czas połączenia"; "time_connected" = "Czas połączenia";
@@ -54,32 +54,32 @@
"understand_button" = "Rozumiem"; "understand_button" = "Rozumiem";
"data_collection_policy_title" = "Polityka zbierania danych"; "data_collection_policy_title" = "Polityka zbierania danych";
"no_data_collection" = "Brak zbierania danych"; "no_data_collection" = "Brak zbierania danych";
"no_data_collection_description" = "StosVPN NIE zbiera danych użytkownika, informacji o ruchu ani aktywności w przeglądarce. Aplikacja tworzy lokalny tunel sieciowy, który działa wyłącznie na Twoim urządzeniu."; "no_data_collection_description" = "LocalDevVPN NIE zbiera danych użytkownika, informacji o ruchu ani aktywności w przeglądarce. Aplikacja tworzy lokalny tunel sieciowy, który działa wyłącznie na Twoim urządzeniu.";
"local_processing_only" = "Tylko lokalne przetwarzanie"; "local_processing_only" = "Tylko lokalne przetwarzanie";
"local_processing_only_description" = "Cały ruch sieciowy i konfiguracje są przetwarzane lokalnie na Twoim urządzeniu. Żadne informacje nie opuszczają urządzenia ani nie są przesyłane przez Internet."; "local_processing_only_description" = "Cały ruch sieciowy i konfiguracje są przetwarzane lokalnie na Twoim urządzeniu. Żadne informacje nie opuszczają urządzenia ani nie są przesyłane przez Internet.";
"no_third_party_sharing" = "Brak udostępniania osobom trzecim"; "no_third_party_sharing" = "Brak udostępniania osobom trzecim";
"no_third_party_sharing_description" = "Ponieważ nie zbieramy danych, nie ma żadnego udostępniania osobom trzecim. Aplikacja nie zawiera analityki, śledzenia ani mechanizmów zbierania danych."; "no_third_party_sharing_description" = "Ponieważ nie zbieramy danych, nie ma żadnego udostępniania osobom trzecim. Aplikacja nie zawiera analityki, śledzenia ani mechanizmów zbierania danych.";
"why_use_network_permissions" = "Dlaczego wymagane są uprawnienia sieciowe"; "why_use_network_permissions" = "Dlaczego wymagane są uprawnienia sieciowe";
"why_use_network_permissions_description" = "StosVPN wymaga uprawnień rozszerzenia sieciowego, aby utworzyć lokalny interfejs sieciowy na Twoim urządzeniu. Jest on używany wyłącznie do lokalnego rozwoju i testowania."; "why_use_network_permissions_description" = "LocalDevVPN wymaga uprawnień rozszerzenia sieciowego, aby utworzyć lokalny interfejs sieciowy na Twoim urządzeniu. Jest on używany wyłącznie do lokalnego rozwoju i testowania.";
"our_promise" = "Nasza obietnica"; "our_promise" = "Nasza obietnica";
"our_promise_description" = "Zobowiązujemy się do ochrony prywatności i przejrzystości. Ta aplikacja została zaprojektowana z myślą o programistach do testowania i łączenia się z lokalnymi serwerami bez obaw o prywatność."; "our_promise_description" = "Zobowiązujemy się do ochrony prywatności i przejrzystości. Ta aplikacja została zaprojektowana z myślą o programistach do testowania i łączenia się z lokalnymi serwerami bez obaw o prywatność.";
"data_collection_policy_nav" = "Zbieranie danych"; "data_collection_policy_nav" = "Zbieranie danych";
"logs_nav" = "Logi"; "logs_nav" = "Logi";
"faq_header" = "Najczęściej zadawane pytania"; "faq_header" = "Najczęściej zadawane pytania";
"faq_q1" = "Do czego służy ta aplikacja?"; "faq_q1" = "Do czego służy ta aplikacja?";
"faq_q1_a1" = "StosVPN tworzy lokalny interfejs sieciowy do celów rozwojowych i testowych. Nie przekierowuje ruchu przez zewnętrzne serwery wszystko pozostaje na urządzeniu."; "faq_q1_a1" = "LocalDevVPN tworzy lokalny interfejs sieciowy do celów rozwojowych i testowych. Nie przekierowuje ruchu przez zewnętrzne serwery wszystko pozostaje na urządzeniu.";
"faq_common_use_cases" = "Typowe przypadki użycia:"; "faq_common_use_cases" = "Typowe przypadki użycia:";
"faq_case1" = "• Testowanie aplikacji webowych z lokalnymi serwerami"; "faq_case1" = "• Testowanie aplikacji webowych z lokalnymi serwerami";
"faq_case2" = "• Tworzenie i debugowanie funkcji sieciowych"; "faq_case2" = "• Tworzenie i debugowanie funkcji sieciowych";
"faq_case3" = "• Dostęp do lokalnych środowisk deweloperskich"; "faq_case3" = "• Dostęp do lokalnych środowisk deweloperskich";
"faq_case4" = "• Testowanie aplikacji wymagających określonych konfiguracji sieciowych"; "faq_case4" = "• Testowanie aplikacji wymagających określonych konfiguracji sieciowych";
"faq_q2" = "Czy to tradycyjna sieć VPN?"; "faq_q2" = "Czy to tradycyjna sieć VPN?";
"faq_q2_a1" = "Nie, StosVPN NIE jest tradycyjną usługą VPN. NIE robi:"; "faq_q2_a1" = "Nie, LocalDevVPN NIE jest tradycyjną usługą VPN. NIE robi:";
"faq_q2_point1" = "• Przekierowywania ruchu przez zewnętrzne serwery"; "faq_q2_point1" = "• Przekierowywania ruchu przez zewnętrzne serwery";
"faq_q2_point2" = "• Zapewnienia prywatności lub anonimowości przeglądania"; "faq_q2_point2" = "• Zapewnienia prywatności lub anonimowości przeglądania";
"faq_q2_point3" = "• Łączenia z zewnętrznymi serwerami VPN"; "faq_q2_point3" = "• Łączenia z zewnętrznymi serwerami VPN";
"faq_q2_point4" = "• Szyfrowania lub przekierowywania Twojego ruchu internetowego"; "faq_q2_point4" = "• Szyfrowania lub przekierowywania Twojego ruchu internetowego";
"faq_q2_a2" = "StosVPN jedynie tworzy lokalny interfejs sieciowy, aby pomóc programistom łączyć się z lokalnymi usługami w celu rozwoju i testowania."; "faq_q2_a2" = "LocalDevVPN jedynie tworzy lokalny interfejs sieciowy, aby pomóc programistom łączyć się z lokalnymi usługami w celu rozwoju i testowania.";
"faq_q3" = "Dlaczego połączenie się nie udaje?"; "faq_q3" = "Dlaczego połączenie się nie udaje?";
"faq_q3_a1" = "Nieudane połączenia mogą wynikać z braku uprawnień systemowych, błędów konfiguracji lub ograniczeń iOS."; "faq_q3_a1" = "Nieudane połączenia mogą wynikać z braku uprawnień systemowych, błędów konfiguracji lub ograniczeń iOS.";
"faq_troubleshoot_header" = "Kroki rozwiązywania problemów:"; "faq_troubleshoot_header" = "Kroki rozwiązywania problemów:";
@@ -88,15 +88,15 @@
"faq_troubleshoot3" = "• Sprawdź, czy konfiguracja IP jest prawidłowa"; "faq_troubleshoot3" = "• Sprawdź, czy konfiguracja IP jest prawidłowa";
"faq_troubleshoot4" = "• Uruchom ponownie urządzenie, jeśli problemy będą się powtarzać"; "faq_troubleshoot4" = "• Uruchom ponownie urządzenie, jeśli problemy będą się powtarzać";
"faq_q4" = "Dla kogo jest ta aplikacja?"; "faq_q4" = "Dla kogo jest ta aplikacja?";
"faq_q4_intro" = "StosVPN został zaprojektowany głównie dla:"; "faq_q4_intro" = "LocalDevVPN został zaprojektowany głównie dla:";
"faq_q4_case1" = "• Programistów testujących lokalne serwery webowe"; "faq_q4_case1" = "• Programistów testujących lokalne serwery webowe";
"faq_q4_case2" = "• Twórców aplikacji testujących funkcje sieciowe"; "faq_q4_case2" = "• Twórców aplikacji testujących funkcje sieciowe";
"faq_q4_case3" = "• Inżynierów QA testujących aplikacje w izolowanych środowiskach"; "faq_q4_case3" = "• Inżynierów QA testujących aplikacje w izolowanych środowiskach";
"faq_q4_case4" = "• Każdego, kto potrzebuje dostępu do lokalnych usług na iOS"; "faq_q4_case4" = "• Każdego, kto potrzebuje dostępu do lokalnych usług na iOS";
"faq_q4_conclusion" = "Aplikacja jest publicznie dostępna i przydatna dla deweloperów testujących aplikacje z funkcjami sieciowymi na iOS."; "faq_q4_conclusion" = "Aplikacja jest publicznie dostępna i przydatna dla deweloperów testujących aplikacje z funkcjami sieciowymi na iOS.";
"business_model_header" = "Model biznesowy"; "business_model_header" = "Model biznesowy";
"biz_q1" = "Jak działa StosVPN?"; "biz_q1" = "Jak działa LocalDevVPN?";
"biz_q1_a1" = "StosVPN to całkowicie darmowa aplikacja dostępna publicznie. Nie ma żadnych płatnych funkcji, subskrypcji ani zakupów w aplikacji."; "biz_q1_a1" = "LocalDevVPN to całkowicie darmowa aplikacja dostępna publicznie. Nie ma żadnych płatnych funkcji, subskrypcji ani zakupów w aplikacji.";
"biz_key_points_header" = "Kluczowe cechy naszego modelu:"; "biz_key_points_header" = "Kluczowe cechy naszego modelu:";
"biz_point1" = "• Aplikacja nie jest powiązana z żadną firmą ani organizacją"; "biz_point1" = "• Aplikacja nie jest powiązana z żadną firmą ani organizacją";
"biz_point2" = "• Każdy może pobrać i używać aplikacji z App Store"; "biz_point2" = "• Każdy może pobrać i używać aplikacji z App Store";
@@ -107,18 +107,18 @@
"requires_ios" = "Wymaga iOS 14.0 lub nowszego"; "requires_ios" = "Wymaga iOS 14.0 lub nowszego";
"uses_network_extension" = "Wykorzystuje API Apple Network Extension"; "uses_network_extension" = "Wykorzystuje API Apple Network Extension";
"help_and_support_nav" = "Pomoc i wsparcie"; "help_and_support_nav" = "Pomoc i wsparcie";
"setup_welcome_title" = "Witamy w StosVPN"; "setup_welcome_title" = "Witamy w LocalDevVPN";
"setup_welcome_description" = "Prosty lokalny tunel sieciowy dla programistów"; "setup_welcome_description" = "Prosty lokalny tunel sieciowy dla programistów";
"setup_welcome_details" = "StosVPN tworzy lokalny interfejs sieciowy do rozwoju, testowania i dostępu do lokalnych serwerów. Aplikacja NIE zbiera danych użytkownika ani nie przekierowuje ruchu przez zewnętrzne serwery."; "setup_welcome_details" = "LocalDevVPN tworzy lokalny interfejs sieciowy do rozwoju, testowania i dostępu do lokalnych serwerów. Aplikacja NIE zbiera danych użytkownika ani nie przekierowuje ruchu przez zewnętrzne serwery.";
"setup_why_title" = "Dlaczego warto używać StosVPN?"; "setup_why_title" = "Dlaczego warto używać LocalDevVPN?";
"setup_why_description" = "Idealny dla programistów iOS"; "setup_why_description" = "Idealny dla programistów iOS";
"setup_why_details" = "• Dostęp do lokalnych serwerów webowych i środowisk deweloperskich\n• Testowanie aplikacji wymagających określonych konfiguracji sieci\n• Łączenie z lokalnymi usługami sieciowymi bez skomplikowanej konfiguracji\n• Tworzenie izolowanych środowisk testowych"; "setup_why_details" = "• Dostęp do lokalnych serwerów webowych i środowisk deweloperskich\n• Testowanie aplikacji wymagających określonych konfiguracji sieci\n• Łączenie z lokalnymi usługami sieciowymi bez skomplikowanej konfiguracji\n• Tworzenie izolowanych środowisk testowych";
"setup_easy_title" = "Łatwy w użyciu"; "setup_easy_title" = "Łatwy w użyciu";
"setup_easy_description" = "Połączenie za pomocą jednego kliknięcia"; "setup_easy_description" = "Połączenie za pomocą jednego kliknięcia";
"setup_easy_details" = "StosVPN został zaprojektowany z myślą o prostocie. Wystarczy kliknąć przycisk połączenia, aby ustanowić lokalny tunel z gotową konfiguracją."; "setup_easy_details" = "LocalDevVPN został zaprojektowany z myślą o prostocie. Wystarczy kliknąć przycisk połączenia, aby ustanowić lokalny tunel z gotową konfiguracją.";
"setup_privacy_title" = "Skoncentrowany na prywatności"; "setup_privacy_title" = "Skoncentrowany na prywatności";
"setup_privacy_description" = "Twoje dane pozostają na urządzeniu"; "setup_privacy_description" = "Twoje dane pozostają na urządzeniu";
"setup_privacy_details" = "StosVPN tworzy lokalny tunel, który nie przekierowuje ruchu przez zewnętrzne serwery. Cały ruch pozostaje na Twoim urządzeniu, zapewniając prywatność i bezpieczeństwo. Żadne dane nie są zbierane ani udostępniane osobom trzecim."; "setup_privacy_details" = "LocalDevVPN tworzy lokalny tunel, który nie przekierowuje ruchu przez zewnętrzne serwery. Cały ruch pozostaje na Twoim urządzeniu, zapewniając prywatność i bezpieczeństwo. Żadne dane nie są zbierane ani udostępniane osobom trzecim.";
"setup_nav" = "Konfiguracja"; "setup_nav" = "Konfiguracja";
"setup_get_started" = "Zaczynamy"; "setup_get_started" = "Zaczynamy";
"setup_next" = "Dalej"; "setup_next" = "Dalej";

View File

@@ -1,6 +1,6 @@
// //
// StosVPNApp.swift // StosVPNApp.swift
// StosVPN // LocalDevVPN
// //
// Created by Stossy11 on 28/03/2025. // Created by Stossy11 on 28/03/2025.
// //
@@ -8,7 +8,7 @@
import SwiftUI import SwiftUI
@main @main
struct StosVPNApp: App { struct LocalDevVPNApp: App {
var body: some Scene { var body: some Scene {
WindowGroup { WindowGroup {
ContentView() ContentView()

Binary file not shown.