feat(client/macos): PacketTunnel 转 System Extension(构建通过)
macOS 站外加载隧道必须 sysext(appex 仅 App Store 可加载)。转换: - productType app-extension→system-extension;产物 .appex→.systemextension - 嵌入路径 PlugIns→Contents/Library/SystemExtensions(SYSTEM_EXTENSIONS_FOLDER_PATH) - main.swift 入口(NEProvider.startSystemExtensionMode + dispatchMain;sysext 是 可执行程序,需显式 main 而非 appex 的 NSExtensionMain) - Info.plist 加 NEMachServiceName;entitlement 换回 packet-tunnel-provider-systemextension CFBundlePackageType 自动 SYSX,Build Succeeded(关签名)。运行还需 Developer ID 签名 + systemextensionsctl developer on + OSSystemExtensionRequest 激活。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
GENERATE_INFOPLIST_FILE=YES 自动生成并合并,此处不重复写以免冲突。 -->
|
||||
<key>NetworkExtension</key>
|
||||
<dict>
|
||||
<key>NEMachServiceName</key>
|
||||
<string>$(TeamIdentifierPrefix)group.com.pangolin.pangolin</string>
|
||||
<key>NEProviderClasses</key>
|
||||
<dict>
|
||||
<key>com.apple.networkextension.packet-tunnel</key>
|
||||
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user