diff --git a/.DS_Store b/.DS_Store
index c7eb695..85e8119 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index 69affb1..4b2ed46 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,139 @@
app-profile.apk
+# Do not remove or rename entries in this file, only add new ones
+# See https://github.com/flutter/flutter/issues/128635 for more context.
+
+# Miscellaneous
+*.class
+*.lock
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# Visual Studio Code related
+.classpath
+.project
+.settings/
+.vscode/*
+
+# Flutter repo-specific
+/bin/cache/
+/bin/internal/bootstrap.bat
+/bin/internal/bootstrap.sh
+/bin/mingit/
+/dev/benchmarks/mega_gallery/
+/dev/bots/.recipe_deps
+/dev/bots/android_tools/
+/dev/devicelab/ABresults*.json
+/dev/docs/doc/
+/dev/docs/api_docs.zip
+/dev/docs/flutter.docs.zip
+/dev/docs/lib/
+/dev/docs/pubspec.yaml
+/dev/integration_tests/**/xcuserdata
+/dev/integration_tests/**/Pods
+/packages/flutter/coverage/
+version
+analysis_benchmark.json
+
+# packages file containing multi-root paths
+.packages.generated
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+**/generated_plugin_registrant.dart
+.packages
+.pub-preload-cache/
+.pub-cache/
+.pub/
+build/
+flutter_*.png
+linked_*.ds
+unlinked.ds
+unlinked_spec.ds
+
+# Android related
+**/android/**/gradle-wrapper.jar
+.gradle/
+**/android/captures/
+**/android/gradlew
+**/android/gradlew.bat
+**/android/local.properties
+**/android/**/GeneratedPluginRegistrant.java
+**/android/key.properties
+*.jks
+
+# iOS/XCode related
+**/ios/**/*.mode1v3
+**/ios/**/*.mode2v3
+**/ios/**/*.moved-aside
+**/ios/**/*.pbxuser
+**/ios/**/*.perspectivev3
+**/ios/**/*sync/
+**/ios/**/.sconsign.dblite
+**/ios/**/.tags*
+**/ios/**/.vagrant/
+**/ios/**/DerivedData/
+**/ios/**/Icon?
+**/ios/**/Pods/
+**/ios/**/.symlinks/
+**/ios/**/profile
+**/ios/**/xcuserdata
+**/ios/.generated/
+**/ios/Flutter/.last_build_id
+**/ios/Flutter/App.framework
+**/ios/Flutter/Flutter.framework
+**/ios/Flutter/Flutter.podspec
+**/ios/Flutter/Generated.xcconfig
+**/ios/Flutter/ephemeral
+**/ios/Flutter/app.flx
+**/ios/Flutter/app.zip
+**/ios/Flutter/flutter_assets/
+**/ios/Flutter/flutter_export_environment.sh
+**/ios/ServiceDefinitions.json
+**/ios/Runner/GeneratedPluginRegistrant.*
+
+# macOS
+**/Flutter/ephemeral/
+**/Pods/
+**/macos/Flutter/GeneratedPluginRegistrant.swift
+**/macos/Flutter/ephemeral
+**/xcuserdata/
+
+# Windows
+**/windows/flutter/generated_plugin_registrant.cc
+**/windows/flutter/generated_plugin_registrant.h
+**/windows/flutter/generated_plugins.cmake
+
+# Linux
+**/linux/flutter/generated_plugin_registrant.cc
+**/linux/flutter/generated_plugin_registrant.h
+**/linux/flutter/generated_plugins.cmake
+
+# Coverage
+coverage/
+
+# Symbols
+app.*.symbols
+
+# Exceptions to above rules.
+!**/ios/**/default.mode1v3
+!**/ios/**/default.mode2v3
+!**/ios/**/default.pbxuser
+!**/ios/**/default.perspectivev3
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
+!/dev/ci/**/Gemfile.lock
+!.vscode/settings.json
diff --git a/README.md b/README.md
index 013f8d1..e6482df 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,76 @@
# UUVPN
-基于Flutter开发的VPN客户端(ios/android),自主设计,精美UI,优化VPN速度,完全开源。~~[停止维护]~~
+基于Flutter开发的VPN客户端(ios/android),自主设计,精美UI,优化VPN速度,完全开源。
-UUVPN client (ios/android) developed based on Flutter, self-designed, exquisite UI, optimized VPN speed, completely open source. ~~[Stop maintenance]~~
-
-[ReadME.Old](https://github.com/nicolastinkl/UUVPN/blob/main/README.old.md)

-
-# 推荐 3 个开源的替代品,很强很完美
-# Recommend 3 open source alternatives, very powerful and perfect
-
-| Feature/Aspect | [ClashMetaForAndroid](https://github.com/MetaCubeX/ClashMetaForAndroid) | [sing-box](https://github.com/SagerNet/sing-box) | [hiddify-next](https://github.com/hiddify/hiddify-next?tab=readme-ov-file) |
-|---------------------------------|------------------------------------------------------|------------------------------|-----------------------------------------|
-| **Platform** | Android | Android, iOS, Windows, macOS and Linux | Android, Windows, macOS and Linux platforms |
-| **Interface** | Graphical User Interface | Command Line Interface | Graphical User Interface |
-| **Protocol Support** | Clash.Meta protocols | 🟡 Wide range of protocols: Vless, Vmess, Reality, TUIC, Hysteria, Wireguard, SSH etc. | Multiple protocols |
-| **Automation** | Yes, via intents | Limited | Limited |
-| **Security** | Moderate | High | High |
-| **Performance** | Moderate | High | Moderate |
-| **Ease of Setup** | Moderate, requires OpenJDK, Android SDK, CMake, Golang| Complex | Easy |
-| **Community & Support** | Active community, regular updates | Active community, limited documentation | Active community, regular updates |
-| **Customization** | Limited | High | Moderate |
-| **Main Use Case** | Android users needing a GUI-based proxy solution | Users needing a high-performance proxy platform | Users prioritizing privacy and ease of use |
+# UUVPN
+A flutter application for [V2Board](https://github.com/v2board/v2board) ~~and [SSPanel-Uim](https://github.com/Anankke/SSPanel-Uim)~~
+
+support iOS application and Android now.
+
+**IF THIS PROJECT HELPS YOU, PLEASE GIVE ME A LITTLE STAR⭐️.**
+
+## Screenshots
+
+
+## App Store
+
+
+## Environment
+
+- Flutter Flutter 3.10.1 • channel stable • https://github.com/flutter/flutter.git
+ Framework • revision d3d8effc68 (6 weeks ago) • 2023-05-16 17:59:05 -0700
+ Engine • revision b4fb11214d
+ Tools • Dart 3.0.1 • DevTools 2.23.1
+ - Download this version url: https://drive.google.com/file/d/1ksM4_PK9Ibk7ycyrfF7XffM_99_4JYV3/view?usp=sharing
+ - leaf sdk downlaod url: https://github.com/eycorsican/leaf/releases/tag/v0.10.7
+
+- macOS 13.3.1 +
+- Xcode 14 +
+- iOS 15.0 +
+
+## Installation
+
+```shell
+flutter pub get
+```
+
+## Develop
+```shell
+flutter run
+```
+
+## Build
+build android apk
+```shell
+flutter build apk
+```
+
+build ios
+```shell
+flutter build ios
+```
+
+----------------------
+
+# How to use it?
+
+
+- 1: Change Domain File Path : ~UUVPN/flutter/lib/constant/app_urls.dart
+ ```
+ static const String baseUrl = "https://xxxx.com";
+ ```
+
+- 2: Xcode Settings:
+
+
+
+
+
+- 3: running screenshot:
+
\ No newline at end of file
diff --git a/README.old.md b/README.old.md
deleted file mode 100644
index e6482df..0000000
--- a/README.old.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# UUVPN
-基于Flutter开发的VPN客户端(ios/android),自主设计,精美UI,优化VPN速度,完全开源。
-
-
-
-
-# UUVPN
-
-
-A flutter application for [V2Board](https://github.com/v2board/v2board) ~~and [SSPanel-Uim](https://github.com/Anankke/SSPanel-Uim)~~
-
-support iOS application and Android now.
-
-
-**IF THIS PROJECT HELPS YOU, PLEASE GIVE ME A LITTLE STAR⭐️.**
-
-## Screenshots
-
-
-## App Store
-
-
-
-## Environment
-
-- Flutter Flutter 3.10.1 • channel stable • https://github.com/flutter/flutter.git
- Framework • revision d3d8effc68 (6 weeks ago) • 2023-05-16 17:59:05 -0700
- Engine • revision b4fb11214d
- Tools • Dart 3.0.1 • DevTools 2.23.1
- - Download this version url: https://drive.google.com/file/d/1ksM4_PK9Ibk7ycyrfF7XffM_99_4JYV3/view?usp=sharing
- - leaf sdk downlaod url: https://github.com/eycorsican/leaf/releases/tag/v0.10.7
-
-- macOS 13.3.1 +
-- Xcode 14 +
-- iOS 15.0 +
-
-## Installation
-
-```shell
-flutter pub get
-```
-
-## Develop
-```shell
-flutter run
-```
-
-## Build
-build android apk
-```shell
-flutter build apk
-```
-
-build ios
-```shell
-flutter build ios
-```
-
-----------------------
-
-# How to use it?
-
-
-- 1: Change Domain File Path : ~UUVPN/flutter/lib/constant/app_urls.dart
- ```
- static const String baseUrl = "https://xxxx.com";
- ```
-
-- 2: Xcode Settings:
-
-
-
-
-
-- 3: running screenshot:
-
\ No newline at end of file
diff --git a/flutter/.DS_Store b/flutter/.DS_Store
index 7fcd241..99e7387 100644
Binary files a/flutter/.DS_Store and b/flutter/.DS_Store differ
diff --git a/flutter/README_zh-CN.md b/flutter/README_zh-CN.md
deleted file mode 100644
index 3d2219c..0000000
--- a/flutter/README_zh-CN.md
+++ /dev/null
@@ -1,73 +0,0 @@
-[English](./README.md) | 简体中文
-
-# Sail
-
-
-
-
-
-
-
-
-[](https://github.com/sail-tunnel/sail/actions/workflows/flutter.yml)
-
-使用 [Flutter](https://github.com/flutter/flutter) 为 [V2Board](https://github.com/v2board/v2board) ~~及 [SSPanel-Uim](https://github.com/Anankke/SSPanel-Uim) 构建的应用~~
-
-现在支持iOS而非Android, 我没有Android设备😂.
-
-重现 [Mohammad Reza Farahzad 的设计](https://dribbble.com/shots/14028358-VPN-App-Ui-Design?utm_source=Clipboard_Shot&utm_campaign=mrfarahzad&utm_content=VPN%20App%20Ui%20Design&utm_medium=Social_Share)
-
-**如果这个项目对你有帮助,请给我一颗小星星⭐️。**
-
-## 截图
-
-
-
-
-
-## 资源
-- [Mohammad Reza Farahzad 的设计](https://dribbble.com/shots/14028358-VPN-App-Ui-Design?utm_source=Clipboard_Shot&utm_campaign=mrfarahzad&utm_content=VPN%20App%20Ui%20Design&utm_medium=Social_Share)
-- [flat flags](https://github.com/wobblecode/flat-flags)
-
-## 联络我
-[](https://t.me/sail-tunnel)
-[](mailto:sail-tunnel@gmail.com)
-
-## 待办事项:
-- [x] 支持安卓设备。
-- [ ] Dart ffi 与 iOS 和 android 来控制 vpn。
-- [x] 订单页面
-- [x] 我的设置页面
-- [x] 服务器列表页面支持 ping 操作。
-- [ ] 按Material主题重构颜色。
-
-## 环境
-
-- Flutter 3.0.1
-- Dart 2.17.1
-- macOS 12.4
-- IntelliJ IDEA 2022.1.1 (Ultimate Edition) (感谢 [jetbrains 开源计划](https://www.jetbrains.com/opensource/))
-- Xcode 13.4.1
-- iOS 15.5
-
-## 安装
-
-```shell
-flutter pub get
-```
-
-## 开发
-```shell
-flutter run
-```
-
-## 构建
-build android apk
-```shell
-flutter build apk
-```
-
-build ios
-```shell
-flutter build ios
-```
diff --git a/flutter/android/app/src/main/kotlin/com/sail_tunnel/sail/MainActivity.kt b/flutter/android/app/src/main/kotlin/com/sail_tunnel/sail/MainActivity.kt
index 20c876a..7d10ec6 100644
--- a/flutter/android/app/src/main/kotlin/com/sail_tunnel/sail/MainActivity.kt
+++ b/flutter/android/app/src/main/kotlin/com/sail_tunnel/sail/MainActivity.kt
@@ -22,7 +22,7 @@ import io.flutter.plugins.GeneratedPluginRegistrant
import java.io.File
class MainActivity: FlutterActivity() {
- private val channel = "com.sail_tunnel.sail/vpn_manager"
+ private val channel = "com.vpntunnel.vpnzeus/vpn_manager"
private fun getServiceIntent(): Intent {
return Intent(this, TunnelService::class.java)
diff --git a/flutter/ios/.DS_Store b/flutter/ios/.DS_Store
index c9a6d7e..6216f43 100644
Binary files a/flutter/ios/.DS_Store and b/flutter/ios/.DS_Store differ
diff --git a/flutter/ios/.gitattributes b/flutter/ios/.gitattributes
new file mode 100644
index 0000000..352f149
--- /dev/null
+++ b/flutter/ios/.gitattributes
@@ -0,0 +1 @@
+*.a filter=lfs diff=lfs merge=lfs -text
diff --git a/flutter/ios/PacketTunnel/PacketTunnel.entitlements b/flutter/ios/PacketTunnel/PacketTunnel.entitlements
index 01727f1..26de67b 100644
--- a/flutter/ios/PacketTunnel/PacketTunnel.entitlements
+++ b/flutter/ios/PacketTunnel/PacketTunnel.entitlements
@@ -8,7 +8,7 @@
com.apple.security.application-groups
- group.com.sail-tunnel.vpnzeus
+ group.com.vpntunnel.vpnzeus
diff --git a/flutter/ios/Podfile b/flutter/ios/Podfile
index 1e0d0e6..64e92d1 100644
--- a/flutter/ios/Podfile
+++ b/flutter/ios/Podfile
@@ -33,7 +33,7 @@ target 'Runner' do
use_frameworks!
use_modular_headers!
# pod 'Leaf', :path => 'leaf.xcframework'
-
+
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
diff --git a/flutter/ios/Podfile.lock b/flutter/ios/Podfile.lock
index f583650..bc541fc 100644
--- a/flutter/ios/Podfile.lock
+++ b/flutter/ios/Podfile.lock
@@ -26,7 +26,7 @@ PODS:
- PhoneNumberKit/PhoneNumberKitCore
- shared_preferences_ios (0.0.1):
- Flutter
- - Toast (4.0.0)
+ - Toast (4.1.1)
- url_launcher_ios (0.0.1):
- Flutter
- webview_flutter_wkwebview (0.0.1):
@@ -79,10 +79,10 @@ SPEC CHECKSUMS:
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
PhoneNumberKit: ced55861269312a5e3bc2ef82a58d6255b1c976a
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
- Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
+ Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
-PODFILE CHECKSUM: 2cac2355308eef43139d5b34f7a00e0eaa241759
+PODFILE CHECKSUM: de47e8edb5f824045744e95e4ae955933333d4a0
COCOAPODS: 1.15.2
diff --git a/flutter/ios/Runner.xcodeproj/project.pbxproj b/flutter/ios/Runner.xcodeproj/project.pbxproj
index 1154897..d403fb0 100644
--- a/flutter/ios/Runner.xcodeproj/project.pbxproj
+++ b/flutter/ios/Runner.xcodeproj/project.pbxproj
@@ -32,9 +32,9 @@
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ C09C70752C3E5685000F6E01 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
+ C09C70762C3E5685000F6E01 /* leaf.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
- C0CB10F82C3276C300A1F217 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
- C0CB10F92C3276C300A1F217 /* leaf.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DBC6F25A26C78B1D91884CE1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9C0075B77637136AF52D8B /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
@@ -70,13 +70,13 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
- C0CB10F42C3275A300A1F217 /* Embed Frameworks */ = {
+ C09C70772C3E5685000F6E01 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
- C0CB10F92C3276C300A1F217 /* leaf.xcframework in Embed Frameworks */,
+ C09C70762C3E5685000F6E01 /* leaf.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -110,7 +110,6 @@
3EA6B277293F1D1600B2BABC /* URL+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Helpers.swift"; sourceTree = ""; };
3EA6B279293F1FAD00B2BABC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; };
4A9C0075B77637136AF52D8B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
7F9A79C99E6BB92BFA8F918D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
@@ -123,6 +122,7 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ C00A39D82C3E5F9D004E31E4 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
C0CB10F52C3275EE00A1F217 /* leaf.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = leaf.xcframework; sourceTree = ""; };
/* End PBXFileReference section */
@@ -131,8 +131,8 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- C0CB10F82C3276C300A1F217 /* leaf.xcframework in Frameworks */,
7A31DD8228420C0B00E82EE1 /* NetworkExtension.framework in Frameworks */,
+ C09C70752C3E5685000F6E01 /* leaf.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -235,7 +235,7 @@
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
- 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ C00A39D82C3E5F9D004E31E4 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "";
@@ -260,8 +260,8 @@
2FD21F0925A363E300F556E0 /* Sources */,
2FD21F0A25A363E300F556E0 /* Frameworks */,
C0DAE5F52C3272280023769C /* CopyFiles */,
- C0CB10F42C3275A300A1F217 /* Embed Frameworks */,
2FD21F0B25A363E300F556E0 /* Resources */,
+ C09C70772C3E5685000F6E01 /* Embed Frameworks */,
);
buildRules = (
);
@@ -282,9 +282,9 @@
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 30B17F94E53B12A0859D0A8C /* [CP] Embed Pods Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
9740EEB61CF901F6004384FC /* Run Script */,
- 30B17F94E53B12A0859D0A8C /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -554,7 +554,8 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = "";
+ CURRENT_PROJECT_VERSION = 222;
+ DEVELOPMENT_TEAM = 26XWXKSR3B;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -563,7 +564,7 @@
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = UUVPN;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -572,8 +573,9 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
+ MARKETING_VERSION = 2.0.0;
MODULEMAP_FILE = "${PROJECT_DIR}/LeafFFI/module.modulemap";
- PRODUCT_BUNDLE_IDENTIFIER = "com.sail-tunnel.vpnzeus";
+ PRODUCT_BUNDLE_IDENTIFIER = com.vpntunnel.vpnzeus;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -600,7 +602,7 @@
CODE_SIGN_ENTITLEMENTS = PacketTunnel/PacketTunnel.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 200;
- DEVELOPMENT_TEAM = "";
+ DEVELOPMENT_TEAM = 26XWXKSR3B;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
FRAMEWORK_SEARCH_PATHS = (
@@ -619,7 +621,7 @@
MARKETING_VERSION = 1.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
- PRODUCT_BUNDLE_IDENTIFIER = "com.sail-tunnel.vpnzeus.PacketTunnel";
+ PRODUCT_BUNDLE_IDENTIFIER = com.vpntunnel.vpnzeus.PacketTunnel;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@@ -643,7 +645,7 @@
CODE_SIGN_ENTITLEMENTS = PacketTunnel/PacketTunnel.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 200;
- DEVELOPMENT_TEAM = "";
+ DEVELOPMENT_TEAM = 26XWXKSR3B;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
FRAMEWORK_SEARCH_PATHS = (
@@ -661,7 +663,7 @@
LIBRARY_SEARCH_PATHS = "$(inherited)";
MARKETING_VERSION = 1.0.6;
MTL_FAST_MATH = YES;
- PRODUCT_BUNDLE_IDENTIFIER = "com.sail-tunnel.vpnzeus.PacketTunnel";
+ PRODUCT_BUNDLE_IDENTIFIER = com.vpntunnel.vpnzeus.PacketTunnel;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_INCLUDE_PATHS = "";
@@ -683,7 +685,7 @@
CODE_SIGN_ENTITLEMENTS = PacketTunnel/PacketTunnel.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 200;
- DEVELOPMENT_TEAM = "";
+ DEVELOPMENT_TEAM = 26XWXKSR3B;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64";
FRAMEWORK_SEARCH_PATHS = (
@@ -701,7 +703,7 @@
LIBRARY_SEARCH_PATHS = "$(inherited)";
MARKETING_VERSION = 1.0.6;
MTL_FAST_MATH = YES;
- PRODUCT_BUNDLE_IDENTIFIER = "com.sail-tunnel.vpnzeus.PacketTunnel";
+ PRODUCT_BUNDLE_IDENTIFIER = com.vpntunnel.vpnzeus.PacketTunnel;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_INCLUDE_PATHS = "";
@@ -833,7 +835,8 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = "";
+ CURRENT_PROJECT_VERSION = 222;
+ DEVELOPMENT_TEAM = 26XWXKSR3B;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -842,7 +845,7 @@
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = UUVPN;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -851,8 +854,9 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
+ MARKETING_VERSION = 2.0.0;
MODULEMAP_FILE = "${PROJECT_DIR}/LeafFFI/module.modulemap";
- PRODUCT_BUNDLE_IDENTIFIER = "com.sail-tunnel.vpnzeus";
+ PRODUCT_BUNDLE_IDENTIFIER = com.vpntunnel.vpnzeus;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -877,7 +881,8 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = "";
+ CURRENT_PROJECT_VERSION = 222;
+ DEVELOPMENT_TEAM = 26XWXKSR3B;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -886,7 +891,7 @@
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = UUVPN;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 14.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -895,8 +900,9 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
+ MARKETING_VERSION = 2.0.0;
MODULEMAP_FILE = "${PROJECT_DIR}/LeafFFI/module.modulemap";
- PRODUCT_BUNDLE_IDENTIFIER = "com.sail-tunnel.vpnzeus";
+ PRODUCT_BUNDLE_IDENTIFIER = com.vpntunnel.vpnzeus;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
diff --git a/flutter/ios/Runner/AppDelegate.swift b/flutter/ios/Runner/AppDelegate.swift
index 75d0008..1c5a9fe 100644
--- a/flutter/ios/Runner/AppDelegate.swift
+++ b/flutter/ios/Runner/AppDelegate.swift
@@ -12,7 +12,7 @@ import os
GeneratedPluginRegistrant.register(with: self)
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController;
- let vpnManagerChannel = FlutterMethodChannel.init(name: "com.sail_tunnel.sail/vpn_manager",
+ let vpnManagerChannel = FlutterMethodChannel.init(name: "com.vpntunnel.vpnzeus/vpn_manager",
binaryMessenger: controller.binaryMessenger);
let manager = VPNManager.shared()
diff --git a/flutter/ios/Runner/Info.plist b/flutter/ios/Runner/Info.plist
index ff632a9..797ec03 100644
--- a/flutter/ios/Runner/Info.plist
+++ b/flutter/ios/Runner/Info.plist
@@ -30,6 +30,7 @@
UIBackgroundModes
+ fetch
remote-notification
UILaunchStoryboardName
diff --git a/flutter/ios/Runner/Runner-Bridging-Header.h b/flutter/ios/Runner/Runner-Bridging-Header.h
index 308a2a5..2a22d07 100644
--- a/flutter/ios/Runner/Runner-Bridging-Header.h
+++ b/flutter/ios/Runner/Runner-Bridging-Header.h
@@ -1 +1,12 @@
+//
+// Runner-Bridging-Header.h
+// Runner
+//
+// Created by Zeus on 2024/7/10.
+//
+
+#ifndef Runner_Bridging_Header_h
+#define Runner_Bridging_Header_h
+
#import "GeneratedPluginRegistrant.h"
+#endif /* Runner_Bridging_Header_h */
diff --git a/flutter/ios/Runner/Runner.entitlements b/flutter/ios/Runner/Runner.entitlements
index bb09ac9..093c34d 100644
--- a/flutter/ios/Runner/Runner.entitlements
+++ b/flutter/ios/Runner/Runner.entitlements
@@ -10,7 +10,7 @@
com.apple.security.application-groups
- group.com.sail-tunnel.vpnzeus
+ group.com.vpntunnel.vpnzeus
diff --git a/flutter/ios/Shared/Helpers/FileManager+Helpers.swift b/flutter/ios/Shared/Helpers/FileManager+Helpers.swift
index 013a4a9..80eb263 100644
--- a/flutter/ios/Shared/Helpers/FileManager+Helpers.swift
+++ b/flutter/ios/Shared/Helpers/FileManager+Helpers.swift
@@ -8,7 +8,7 @@
import Foundation
extension FileManager {
- static var appGroupId = "group.com.sail-tunnel.vpnzeus"
+ static var appGroupId = "group.com.vpntunnel.vpnzeus"
private var sharedFolderURL: URL? {
let appGroupId = FileManager.appGroupId
diff --git a/flutter/ios/leaf.xcframework.zip b/flutter/ios/leaf.xcframework.zip
deleted file mode 100644
index 4a19cb4..0000000
Binary files a/flutter/ios/leaf.xcframework.zip and /dev/null differ
diff --git a/flutter/ios/leaf.xcframework/Info.plist b/flutter/ios/leaf.xcframework/Info.plist
new file mode 100644
index 0000000..063f7f6
--- /dev/null
+++ b/flutter/ios/leaf.xcframework/Info.plist
@@ -0,0 +1,65 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ libleaf.a
+ HeadersPath
+ Headers
+ LibraryIdentifier
+ macos-arm64_x86_64
+ LibraryPath
+ libleaf.a
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ macos
+
+
+ BinaryPath
+ libleaf.a
+ HeadersPath
+ Headers
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ libleaf.a
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ BinaryPath
+ libleaf.a
+ HeadersPath
+ Headers
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ libleaf.a
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/flutter/ios/leaf.xcframework/ios-arm64/Headers/leaf.h b/flutter/ios/leaf.xcframework/ios-arm64/Headers/leaf.h
new file mode 100644
index 0000000..4fb7b00
--- /dev/null
+++ b/flutter/ios/leaf.xcframework/ios-arm64/Headers/leaf.h
@@ -0,0 +1,119 @@
+#include
+#include
+#include
+#include
+
+/**
+ * No error.
+ */
+#define ERR_OK 0
+
+/**
+ * Config path error.
+ */
+#define ERR_CONFIG_PATH 1
+
+/**
+ * Config parsing error.
+ */
+#define ERR_CONFIG 2
+
+/**
+ * IO error.
+ */
+#define ERR_IO 3
+
+/**
+ * Config file watcher error.
+ */
+#define ERR_WATCHER 4
+
+/**
+ * Async channel send error.
+ */
+#define ERR_ASYNC_CHANNEL_SEND 5
+
+/**
+ * Sync channel receive error.
+ */
+#define ERR_SYNC_CHANNEL_RECV 6
+
+/**
+ * Runtime manager error.
+ */
+#define ERR_RUNTIME_MANAGER 7
+
+/**
+ * No associated config file.
+ */
+#define ERR_NO_CONFIG_FILE 8
+
+/**
+ * Starts leaf with options, on a successful start this function blocks the current
+ * thread.
+ *
+ * @note This is not a stable API, parameters will change from time to time.
+ *
+ * @param rt_id A unique ID to associate this leaf instance, this is required when
+ * calling subsequent FFI functions, e.g. reload, shutdown.
+ * @param config_path The path of the config file, must be a file with suffix .conf
+ * or .json, according to the enabled features.
+ * @param auto_reload Enabls auto reloading when config file changes are detected,
+ * takes effect only when the "auto-reload" feature is enabled.
+ * @param multi_thread Whether to use a multi-threaded runtime.
+ * @param auto_threads Sets the number of runtime worker threads automatically,
+ * takes effect only when multi_thread is true.
+ * @param threads Sets the number of runtime worker threads, takes effect when
+ * multi_thread is true, but can be overridden by auto_threads.
+ * @param stack_size Sets stack size of the runtime worker threads, takes effect when
+ * multi_thread is true.
+ * @return ERR_OK on finish running, any other errors means a startup failure.
+ */
+int32_t leaf_run_with_options(uint16_t rt_id,
+ const char *config_path,
+ bool auto_reload,
+ bool multi_thread,
+ bool auto_threads,
+ int32_t threads,
+ int32_t stack_size);
+
+/**
+ * Starts leaf with a single-threaded runtime, on a successful start this function
+ * blocks the current thread.
+ *
+ * @param rt_id A unique ID to associate this leaf instance, this is required when
+ * calling subsequent FFI functions, e.g. reload, shutdown.
+ * @param config_path The path of the config file, must be a file with suffix .conf
+ * or .json, according to the enabled features.
+ * @return ERR_OK on finish running, any other errors means a startup failure.
+ */
+int32_t leaf_run(uint16_t rt_id, const char *config_path);
+
+int32_t leaf_run_with_config_string(uint16_t rt_id, const char *config);
+
+/**
+ * Reloads DNS servers, outbounds and routing rules from the config file.
+ *
+ * @param rt_id The ID of the leaf instance to reload.
+ *
+ * @return Returns ERR_OK on success.
+ */
+int32_t leaf_reload(uint16_t rt_id);
+
+/**
+ * Shuts down leaf.
+ *
+ * @param rt_id The ID of the leaf instance to reload.
+ *
+ * @return Returns true on success, false otherwise.
+ */
+bool leaf_shutdown(uint16_t rt_id);
+
+/**
+ * Tests the configuration.
+ *
+ * @param config_path The path of the config file, must be a file with suffix .conf
+ * or .json, according to the enabled features.
+ * @return Returns ERR_OK on success, i.e no syntax error.
+ */
+int32_t leaf_test_config(const char *config_path);
diff --git a/flutter/ios/leaf.xcframework/ios-arm64/Headers/module.modulemap b/flutter/ios/leaf.xcframework/ios-arm64/Headers/module.modulemap
new file mode 100644
index 0000000..138d37a
--- /dev/null
+++ b/flutter/ios/leaf.xcframework/ios-arm64/Headers/module.modulemap
@@ -0,0 +1,4 @@
+module leaf {
+ header "leaf.h"
+ export *
+}
diff --git a/flutter/ios/leaf.xcframework/ios-arm64/libleaf.a b/flutter/ios/leaf.xcframework/ios-arm64/libleaf.a
new file mode 100644
index 0000000..cb000a6
--- /dev/null
+++ b/flutter/ios/leaf.xcframework/ios-arm64/libleaf.a
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dbcc15712911277195419d6de4edfbeecb9cc6d61a2608aa506cf0392b3714f
+size 121253696
diff --git a/flutter/lib/channels/vpn_manager.dart b/flutter/lib/channels/vpn_manager.dart
index ccc558c..8591939 100644
--- a/flutter/lib/channels/vpn_manager.dart
+++ b/flutter/lib/channels/vpn_manager.dart
@@ -18,7 +18,7 @@ enum VpnStatus {
class VpnManager {
Future getStatus() async {
// Native channel
- const platform = MethodChannel("com.sail_tunnel.sail/vpn_manager");
+ const platform = MethodChannel("com.vpntunnel.vpnzeus/vpn_manager");
if (Platform.isAndroid || Platform.isMacOS) {
bool? result = await platform.invokeMethod("getStatus");
// print("${result}");
@@ -40,7 +40,7 @@ class VpnManager {
Future getConnectedDate() async {
// Native channel
- const platform = MethodChannel("com.sail_tunnel.sail/vpn_manager");
+ const platform = MethodChannel("com.vpntunnel.vpnzeus/vpn_manager");
double result;
try {
if (Platform.isAndroid || Platform.isMacOS) {
@@ -58,7 +58,7 @@ class VpnManager {
Future toggle() async {
// Native channel
- const platform = MethodChannel("com.sail_tunnel.sail/vpn_manager");
+ const platform = MethodChannel("com.vpntunnel.vpnzeus/vpn_manager");
bool result = false;
try {
result = await platform.invokeMethod("toggle");
@@ -72,7 +72,7 @@ class VpnManager {
Future getTunnelLog() async {
// Native channel
- const platform = MethodChannel("com.sail_tunnel.sail/vpn_manager");
+ const platform = MethodChannel("com.vpntunnel.vpnzeus/vpn_manager");
String result;
try {
result = await platform.invokeMethod("getTunnelLog");
@@ -86,7 +86,7 @@ class VpnManager {
Future getTunnelConfiguration() async {
// Native channel
- const platform = MethodChannel("com.sail_tunnel.sail/vpn_manager");
+ const platform = MethodChannel("com.vpntunnel.vpnzeus/vpn_manager");
String result;
try {
result = await platform.invokeMethod("getTunnelConfiguration");
@@ -100,7 +100,7 @@ class VpnManager {
Future setTunnelConfiguration(String conf) async {
// Native channel
- const platform = MethodChannel("com.sail_tunnel.sail/vpn_manager");
+ const platform = MethodChannel("com.vpntunnel.vpnzeus/vpn_manager");
String result;
try {
result = await platform.invokeMethod("setTunnelConfiguration", conf);