From 9924a7f0d2dcd1ada8ab244d3b29453ce67f1881 Mon Sep 17 00:00:00 2001
From: x <5vnetwork@proton.me>
Date: Sat, 20 Dec 2025 01:54:16 +0800
Subject: [PATCH 1/2] dmg
---
lib/app/settings/general/general.dart | 35 ++++-----
macos/Flutter/GeneratedPluginRegistrant.swift | 2 +
macos/Podfile.lock | 10 +++
macos/Runner.xcodeproj/project.pbxproj | 76 ++++++-------------
macos/Runner/Info.plist | 4 +-
pubspec.lock | 9 +++
pubspec.yaml | 3 +
7 files changed, 69 insertions(+), 70 deletions(-)
diff --git a/lib/app/settings/general/general.dart b/lib/app/settings/general/general.dart
index 045fc0d..c01e8d7 100644
--- a/lib/app/settings/general/general.dart
+++ b/lib/app/settings/general/general.dart
@@ -31,9 +31,10 @@ import 'package:vx/pref_helper.dart';
import 'package:vx/main.dart';
import 'package:vx/utils/node_test_service.dart';
import 'package:vx/utils/geodata.dart';
-import 'package:vx/widgets/circular_progress_indicator.dart';
import 'package:flutter_common/services/auto_update.dart';
-// import 'package:flutter_sparkle/flutter_sparkle.dart';
+import 'package:vx/utils/logger.dart';
+import 'package:vx/widgets/circular_progress_indicator.dart';
+import 'package:flutter_sparkle/flutter_sparkle.dart';
class GeneralSettingPage extends StatelessWidget {
const GeneralSettingPage({super.key, this.showAppBar = true});
@@ -138,21 +139,21 @@ class GeneralSettingPage extends StatelessWidget {
child: AlwaysOnSetting(),
),
]),
- // if (isPkg)
- // Column(children: [
- // Divider(),
- // Padding(
- // padding: EdgeInsets.only(
- // top: 10, bottom: 10, left: 16, right: 16),
- // child: TextButton(
- // onPressed: () async {
- // FlutterSparkle.checkMacUpdate(isProduction()
- // ? 'https://download.5vnetwork.com/appcast.xml'
- // : 'https://pub-f52ca93bef2c463eabe42dfcf7d05b21.r2.dev/appcast.xml');
- // },
- // child: Text(AppLocalizations.of(context)!.checkUpdate),
- // ))
- // ])
+ if (isPkg)
+ Column(children: [
+ Divider(),
+ Padding(
+ padding: EdgeInsets.only(
+ top: 10, bottom: 10, left: 16, right: 16),
+ child: TextButton(
+ onPressed: () async {
+ FlutterSparkle.checkMacUpdate(isProduction()
+ ? 'https://download.5vnetwork.com/appcast.xml'
+ : 'https://pub-f52ca93bef2c463eabe42dfcf7d05b21.r2.dev/appcast.xml');
+ },
+ child: Text(AppLocalizations.of(context)!.checkUpdate),
+ ))
+ ])
],
),
),
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index c69200a..4732587 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -14,6 +14,7 @@ import firebase_core
import firebase_messaging
import flutter_local_notifications
import flutter_secure_storage_macos
+import flutter_sparkle
import google_sign_in_macos
import in_app_purchase_storekit
import in_app_review
@@ -41,6 +42,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
+ FlutterSparklePlugin.register(with: registry.registrar(forPlugin: "FlutterSparklePlugin"))
GoogleSignInMacosPlugin.register(with: registry.registrar(forPlugin: "GoogleSignInMacosPlugin"))
InAppPurchasePlugin.register(with: registry.registrar(forPlugin: "InAppPurchasePlugin"))
InAppReviewPlugin.register(with: registry.registrar(forPlugin: "InAppReviewPlugin"))
diff --git a/macos/Podfile.lock b/macos/Podfile.lock
index 766541f..020ef26 100644
--- a/macos/Podfile.lock
+++ b/macos/Podfile.lock
@@ -46,6 +46,9 @@ PODS:
- FlutterMacOS
- flutter_secure_storage_macos (6.1.3):
- FlutterMacOS
+ - flutter_sparkle (0.0.2):
+ - FlutterMacOS
+ - Sparkle
- FlutterMacOS (1.0.0)
- google_sign_in_macos (0.0.1):
- FlutterMacOS
@@ -106,6 +109,7 @@ PODS:
- FlutterMacOS
- sign_in_with_apple (0.0.1):
- FlutterMacOS
+ - Sparkle (2.8.1)
- sqlite3 (3.50.4):
- sqlite3/common (= 3.50.4)
- sqlite3/common (3.50.4)
@@ -150,6 +154,7 @@ DEPENDENCIES:
- firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`)
- flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`)
- flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
+ - flutter_sparkle (from `Flutter/ephemeral/.symlinks/plugins/flutter_sparkle/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- google_sign_in_macos (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_macos/macos`)
- in_app_purchase_storekit (from `Flutter/ephemeral/.symlinks/plugins/in_app_purchase_storekit/darwin`)
@@ -179,6 +184,7 @@ SPEC REPOS:
- GoogleUtilities
- nanopb
- PromisesObjC
+ - Sparkle
- sqlite3
EXTERNAL SOURCES:
@@ -200,6 +206,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos
flutter_secure_storage_macos:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos
+ flutter_sparkle:
+ :path: Flutter/ephemeral/.symlinks/plugins/flutter_sparkle/macos
FlutterMacOS:
:path: Flutter/ephemeral
google_sign_in_macos:
@@ -250,6 +258,7 @@ SPEC CHECKSUMS:
FirebaseMessaging: d33971b7bb252745ea6cd31ab190d1a1df4b8ed5
flutter_local_notifications: 4bf37a31afde695b56091b4ae3e4d9c7a7e6cda0
flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54
+ flutter_sparkle: 550cfddada5e1f60e85406c27525f763872ec9b7
FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
google_sign_in_macos: c8612ccbd6fe87ca383a977edcf18437c9cacb70
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
@@ -266,6 +275,7 @@ SPEC CHECKSUMS:
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sign_in_with_apple: 6673c03c9e3643f6c8d33601943fbfa9ae99f94e
+ Sparkle: a346a4341537c625955751ed3ae4b340b68551fa
sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
tm_macos: fca0f08e7b9492c23ecc74c11da166bf56714a24
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index ea16303..8d93c77 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -21,11 +21,11 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
- 156EB8982E8AED3000DCC6A4 /* PacketTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 15EEE81F2D6319C100642457 /* PacketTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
15715F4D2D290435007C66D9 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F0A1EB2D1EFA2700E9C182 /* libresolv.tbd */; };
1572EE492EC32553008DEDEC /* tm.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1572EE482EC32553008DEDEC /* tm.xcframework */; };
1572EE4A2EC32553008DEDEC /* tm.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1572EE482EC32553008DEDEC /* tm.xcframework */; };
1572EE4B2EC32553008DEDEC /* tm.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1572EE482EC32553008DEDEC /* tm.xcframework */; };
+ 1572EFEC2EC33041008DEDEC /* com.5vnetwork.x.system.se.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 15A130F12E71D3C4003E5632 /* com.5vnetwork.x.system.se.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
15A130F22E71D3C4003E5632 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F0A1DB2D1EF8E100E9C182 /* NetworkExtension.framework */; };
15A1310E2E71D492003E5632 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F0A1EB2D1EFA2700E9C182 /* libresolv.tbd */; };
15EEE7902D63071800642457 /* MacosHostApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EEE78E2D63071800642457 /* MacosHostApi.swift */; };
@@ -44,26 +44,12 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 156EB8992E8AED3000DCC6A4 /* PBXContainerItemProxy */ = {
+ 1572EFED2EC33041008DEDEC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 15EEE81E2D6319C100642457;
- remoteInfo = PacketTunnel;
- };
- 156F23E62E85A4B70093AA39 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 15EEE81E2D6319C100642457;
- remoteInfo = PacketTunnel;
- };
- 156F248B2E85B5AF0093AA39 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 15EEE81E2D6319C100642457;
- remoteInfo = PacketTunnel;
+ remoteGlobalIDString = 15A130F02E71D3C4003E5632;
+ remoteInfo = SystemExtension;
};
331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
@@ -82,15 +68,15 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
- 156EB89B2E8AED3000DCC6A4 /* Embed Foundation Extensions */ = {
+ 1572EFEF2EC33041008DEDEC /* Embed System Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 13;
+ dstPath = "$(SYSTEM_EXTENSIONS_FOLDER_PATH)";
+ dstSubfolderSpec = 16;
files = (
- 156EB8982E8AED3000DCC6A4 /* PacketTunnel.appex in Embed Foundation Extensions */,
+ 1572EFEC2EC33041008DEDEC /* com.5vnetwork.x.system.se.systemextension in Embed System Extensions */,
);
- name = "Embed Foundation Extensions";
+ name = "Embed System Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
15A130EC2E71D135003E5632 /* Embed Frameworks */ = {
@@ -506,15 +492,13 @@
837C294434FC697072AC9A70 /* [CP] Copy Pods Resources */,
15A1F10C2E71A36C00AF435D /* Embed ExtensionKit Extensions */,
15A130EC2E71D135003E5632 /* Embed Frameworks */,
- 156EB89B2E8AED3000DCC6A4 /* Embed Foundation Extensions */,
+ 1572EFEF2EC33041008DEDEC /* Embed System Extensions */,
);
buildRules = (
);
dependencies = (
33CC11202044C79F0003C045 /* PBXTargetDependency */,
- 156F23E72E85A4B70093AA39 /* PBXTargetDependency */,
- 156F248C2E85B5AF0093AA39 /* PBXTargetDependency */,
- 156EB89A2E8AED3000DCC6A4 /* PBXTargetDependency */,
+ 1572EFEE2EC33041008DEDEC /* PBXTargetDependency */,
);
name = Runner;
productName = Runner;
@@ -771,20 +755,10 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
- 156EB89A2E8AED3000DCC6A4 /* PBXTargetDependency */ = {
+ 1572EFEE2EC33041008DEDEC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 15EEE81E2D6319C100642457 /* PacketTunnel */;
- targetProxy = 156EB8992E8AED3000DCC6A4 /* PBXContainerItemProxy */;
- };
- 156F23E72E85A4B70093AA39 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 15EEE81E2D6319C100642457 /* PacketTunnel */;
- targetProxy = 156F23E62E85A4B70093AA39 /* PBXContainerItemProxy */;
- };
- 156F248C2E85B5AF0093AA39 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 15EEE81E2D6319C100642457 /* PacketTunnel */;
- targetProxy = 156F248B2E85B5AF0093AA39 /* PBXContainerItemProxy */;
+ target = 15A130F02E71D3C4003E5632 /* SystemExtension */;
+ targetProxy = 1572EFED2EC33041008DEDEC /* PBXContainerItemProxy */;
};
331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
@@ -2457,7 +2431,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2507,7 +2481,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2558,7 +2532,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2611,7 +2585,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
@@ -2663,7 +2637,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
@@ -2712,7 +2686,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
@@ -2762,7 +2736,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
@@ -2811,7 +2785,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
@@ -2861,7 +2835,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
@@ -2908,7 +2882,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
@@ -2955,7 +2929,7 @@
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
- MARKETING_VERSION = 2.3.2;
+ MARKETING_VERSION = 2.5.5;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = (
"-ObjC",
diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist
index 0feab72..a98b66a 100644
--- a/macos/Runner/Info.plist
+++ b/macos/Runner/Info.plist
@@ -48,11 +48,11 @@
MainMenu
NSPrincipalClass
NSApplication
-
+ https://download.5vnetwork.com/appcast.xml
diff --git a/pubspec.lock b/pubspec.lock
index ef7f8be..3c05985 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -681,6 +681,15 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.2"
+ flutter_sparkle:
+ dependency: "direct main"
+ description:
+ path: "."
+ ref: HEAD
+ resolved-ref: edd0da233da8df058e46d7d1ea1fa572e28ba170
+ url: "https://github.com/5vnetwork/flutter_sparkle.git"
+ source: git
+ version: "0.0.2"
flutter_staggered_grid_view:
dependency: "direct main"
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 6077999..28f9b06 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -116,6 +116,9 @@ dependencies:
git:
url: https://github.com/5vnetwork/flutter_common.git
ref: main
+ flutter_sparkle:
+ git:
+ url: https://github.com/5vnetwork/flutter_sparkle.git
dev_dependencies:
flutter_launcher_icons: ^0.14.3
From 30e6b7822a7b55f6e303451dfb07f7e973079f55 Mon Sep 17 00:00:00 2001
From: Vien <202563433+vien97@users.noreply.github.com>
Date: Fri, 27 Feb 2026 08:42:00 +0700
Subject: [PATCH 2/2] Refactor geo file handling in iOS workflow
Removed caching step for geo files and adjusted download condition.
---
.github/workflows/ios.yml | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml
index ed4b8a1..2c51e06 100644
--- a/.github/workflows/ios.yml
+++ b/.github/workflows/ios.yml
@@ -30,19 +30,7 @@ jobs:
touch ../tm-plugin/tm_linux/assets/x
mkdir -p assets/google_fonts
- - name: Cache geo files
- id: cache-geo
- uses: actions/cache@v4
- with:
- path: |
- assets/geo/simplified_geoip.dat
- assets/geo/simplified_geosite.dat
- key: geo-files-${{ runner.os }}
- restore-keys: |
- geo-files-
-
- name: Download geo
- if: steps.cache-geo.outputs.cache-hit != 'true'
run: |
mkdir -p assets/geo
curl -O "https://github.com/5VNetwork/process-geo/releases/download/latest/simplified_geoip.dat"