diff --git a/client/macos/PacketTunnel/Info.plist b/client/macos/PacketTunnel/Info.plist
index 93bfb1c..c788ed7 100644
--- a/client/macos/PacketTunnel/Info.plist
+++ b/client/macos/PacketTunnel/Info.plist
@@ -6,6 +6,8 @@
GENERATE_INFOPLIST_FILE=YES 自动生成并合并,此处不重复写以免冲突。 -->
NetworkExtension
+ NEMachServiceName
+ $(TeamIdentifierPrefix)group.com.pangolin.pangolin
NEProviderClasses
com.apple.networkextension.packet-tunnel
diff --git a/client/macos/PacketTunnel/main.swift b/client/macos/PacketTunnel/main.swift
new file mode 100644
index 0000000..c1fdc59
--- /dev/null
+++ b/client/macos/PacketTunnel/main.swift
@@ -0,0 +1,13 @@
+// main.swift — System Extension 入口
+//
+// System Extension 是可执行程序(非 appex 的 NSExtensionMain 插件),需显式 main。
+// NEProvider.startSystemExtensionMode() 读 Info.plist 的 NEProviderClasses,
+// 按系统请求实例化并运行 PacketTunnelProvider。dispatchMain() 保持进程常驻。
+
+import Foundation
+import NetworkExtension
+
+autoreleasepool {
+ NEProvider.startSystemExtensionMode()
+}
+dispatchMain()
diff --git a/client/macos/Runner.xcodeproj/project.pbxproj b/client/macos/Runner.xcodeproj/project.pbxproj
index f53522e..b794ab9 100644
--- a/client/macos/Runner.xcodeproj/project.pbxproj
+++ b/client/macos/Runner.xcodeproj/project.pbxproj
@@ -30,7 +30,7 @@
47B528978FADECB811049EA7 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 291B2ED6A5127D183A4E505B /* Pods_RunnerTests.framework */; };
5C06858DBFCE524FEBB9B432 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCC145126CAA131EED5B5A0E /* Pods_Runner.framework */; };
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
- A17B79E92FE50746001ABF28 /* PacketTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = A17B79DF2FE50745001ABF28 /* PacketTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ A17B79E92FE50746001ABF28 /* PacketTunnel.systemextension in Copy System Extensions */ = {isa = PBXBuildFile; fileRef = A17B79DF2FE50745001ABF28 /* PacketTunnel.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
A17B79F62FE52309001ABF28 /* Libbox.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A17B79F52FE52309001ABF28 /* Libbox.xcframework */; };
A17B79F72FE52309001ABF28 /* Libbox.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A17B79F52FE52309001ABF28 /* Libbox.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A17B79F92FE52315001ABF28 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A17B79E02FE50745001ABF28 /* NetworkExtension.framework */; };
@@ -75,15 +75,15 @@
name = "Bundle Framework";
runOnlyForDeploymentPostprocessing = 0;
};
- A17B79EA2FE50746001ABF28 /* Embed Foundation Extensions */ = {
+ A17B79EA2FE50746001ABF28 /* Copy System Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 13;
+ dstPath = "$(SYSTEM_EXTENSIONS_FOLDER_PATH)";
+ dstSubfolderSpec = 16;
files = (
- A17B79E92FE50746001ABF28 /* PacketTunnel.appex in Embed Foundation Extensions */,
+ A17B79E92FE50746001ABF28 /* PacketTunnel.systemextension in Copy System Extensions */,
);
- name = "Embed Foundation Extensions";
+ name = "Copy System Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
A17B79F82FE52309001ABF28 /* Embed Frameworks */ = {
@@ -122,7 +122,7 @@
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
95E1B7FE7B353A1FC1673682 /* 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 = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
- A17B79DF2FE50745001ABF28 /* PacketTunnel.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = PacketTunnel.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ A17B79DF2FE50745001ABF28 /* PacketTunnel.systemextension */ = {isa = PBXFileReference; explicitFileType = "wrapper.system-extension"; includeInIndex = 0; path = PacketTunnel.systemextension; sourceTree = BUILT_PRODUCTS_DIR; };
A17B79E02FE50745001ABF28 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
A17B79F52FE52309001ABF28 /* Libbox.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Libbox.xcframework; path = Frameworks/Libbox.xcframework; sourceTree = ""; };
A17B79FB2FE526F5001ABF28 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
@@ -220,7 +220,7 @@
children = (
33CC10ED2044A3C60003C045 /* pangolin_vpn.app */,
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
- A17B79DF2FE50745001ABF28 /* PacketTunnel.appex */,
+ A17B79DF2FE50745001ABF28 /* PacketTunnel.systemextension */,
);
name = Products;
sourceTree = "";
@@ -322,7 +322,7 @@
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
D3610C37E667F89FD1D27249 /* [CP] Embed Pods Frameworks */,
- A17B79EA2FE50746001ABF28 /* Embed Foundation Extensions */,
+ A17B79EA2FE50746001ABF28 /* Copy System Extensions */,
);
buildRules = (
);
@@ -358,8 +358,8 @@
packageProductDependencies = (
);
productName = PacketTunnel;
- productReference = A17B79DF2FE50745001ABF28 /* PacketTunnel.appex */;
- productType = "com.apple.product-type.app-extension";
+ productReference = A17B79DF2FE50745001ABF28 /* PacketTunnel.systemextension */;
+ productType = "com.apple.product-type.system-extension";
};
/* End PBXNativeTarget section */