diff --git a/.DS_Store b/.DS_Store index f91fe84..550f705 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/StosVPN.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/StosVPN.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index 0d8ac2e..e5ae0ff 100644 Binary files a/StosVPN.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate and b/StosVPN.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/StosVPN.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/StosVPN.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index a97bd34..0dede26 100644 --- a/StosVPN.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/StosVPN.xcodeproj/xcuserdata/stossy11.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -3,4 +3,52 @@ uuid = "E9FBFA8B-D737-454C-9876-DFFB697E8C2D" type = "1" version = "2.0"> + + + + + + + + + + + + diff --git a/StosVPN/ContentView.swift b/StosVPN/ContentView.swift index c7768f5..9c12c69 100644 --- a/StosVPN/ContentView.swift +++ b/StosVPN/ContentView.swift @@ -297,6 +297,7 @@ struct ContentView: View { @State private var showSettings = false @State var tunnel = false @AppStorage("autoConnect") private var autoConnect = false + @AppStorage("hasNotCompletedSetup") private var hasNotCompletedSetup = true var body: some View { NavigationStack { @@ -335,10 +336,12 @@ struct ContentView: View { tunnelManager.startVPN() } } - .sheet(isPresented: $showSettings) { SettingsView() } + .sheet(isPresented: $hasNotCompletedSetup) { + SetupView() + } } } } @@ -607,8 +610,8 @@ struct SettingsView: View { .foregroundColor(.secondary) } - NavigationLink(destination: PrivacyPolicyView()) { - Text("Privacy Policy") + Button("Privacy Policy") { + UIApplication.shared.open(URL(string: "https://github.com/stossy11/PrivacyPolicy/blob/main/PrivacyPolicy.md")!) } NavigationLink(destination: HelpView()) { @@ -727,6 +730,151 @@ struct HelpView: View { } } +struct SetupView: View { + @Environment(\.dismiss) private var dismiss + @AppStorage("hasNotCompletedSetup") private var hasNotCompletedSetup = true + @State private var currentPage = 0 + + let pages = [ + SetupPage( + title: "Welcome to StosVPN", + description: "A simple local network tunnel for everyone", + imageName: "checkmark.shield.fill", + details: "StosVPN creates a local network interface on your device that anyone can use for development, testing, and accessing local servers." + ), + SetupPage( + title: "Why Use StosVPN?", + description: "Perfect for developers and everyday users", + imageName: "person.2.fill", + details: "• Access local web servers and development environments\n• Test applications that require specific network configurations\n• Connect to local network services without complex setup\n• Create isolated network environments for testing" + ), + SetupPage( + title: "Easy to Use", + description: "Just one tap to connect", + imageName: "hand.tap.fill", + details: "StosVPN is designed to be simple and straightforward. Just tap the connect button to establish a local network tunnel with pre-configured settings that work for most users." + ), + SetupPage( + title: "Privacy Focused", + description: "Your data stays on your device", + imageName: "lock.shield.fill", + details: "StosVPN creates a local tunnel that doesn't route traffic through external servers. All network traffic remains on your device, ensuring your privacy and security." + ) + ] + + var body: some View { + NavigationStack { + VStack { + TabView(selection: $currentPage) { + ForEach(0..