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..