Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
92c9ac6
docs: add macOS TUN support design spec
lkebin Jul 13, 2026
0831e75
docs: add macOS TUN implementation plan (8 tasks)
lkebin Jul 13, 2026
53ccdda
feat: add GetTunnelFileDescriptor for macOS utun fd discovery
lkebin Jul 13, 2026
25b4864
fix: move TestGetTunnelFileDescriptor to darwin-only test file
lkebin Jul 13, 2026
9c6b522
build: add macos-framework target for gomobile bind -target macos
lkebin Jul 13, 2026
5281351
feat: add GostXTunnel PacketTunnelProvider Extension target scaffold
lkebin Jul 13, 2026
5326627
feat: add AppGroupConfig helper for YAML sharing via App Group
lkebin Jul 13, 2026
673a54b
feat: implement PacketTunnelProvider with utun TUN stack
lkebin Jul 13, 2026
bf24145
fix: add try? to stopTunnel calls (gomobile throws)
lkebin Jul 13, 2026
4a83148
feat: add VpnManager for macOS VPN lifecycle control
lkebin Jul 13, 2026
8397776
feat: integrate VPN mode into main app with menu toggle and App Group…
lkebin Jul 13, 2026
b9bbe96
fix: use gomobile C-function calling convention (NSError** not bridge…
lkebin Jul 13, 2026
c482295
fix: Xcode project integration — add files to targets, fix API signat…
lkebin Jul 13, 2026
67e58a9
docs: add macOS file manager design spec
lkebin Jul 13, 2026
34c9fcb
docs: add macOS file manager implementation plan
lkebin Jul 13, 2026
e61c02e
feat: add FileRepository data layer for bypass file management
lkebin Jul 13, 2026
b752162
fix: guard against directory import and validate trimmed names in Fil…
lkebin Jul 13, 2026
de44da1
feat: add FileManageViewModel with import/export/rename/delete/copy-path
lkebin Jul 13, 2026
c5dec5e
feat: add FileManageView with file list, import, export, rename, dele…
lkebin Jul 13, 2026
da782db
fix: deduplicate fileImporter modifier and remove redundant cast
lkebin Jul 13, 2026
02c0455
fix: localize unavailable-state text in FileManageView
lkebin Jul 13, 2026
3983e83
feat: wrap SettingsView in TabView with Profiles and Files tabs
lkebin Jul 13, 2026
89ade61
fix: set work directory to files/ subdirectory for bypass file resolu…
lkebin Jul 13, 2026
0613ec2
fix: add @available annotation to OverwriteSheetModifier
lkebin Jul 14, 2026
e7e131c
fix: add User Selected File read-write sandbox entitlement for file i…
lkebin Jul 14, 2026
dd26608
fix: add security-scoped resource access for sandboxed file import
lkebin Jul 14, 2026
a00f5b8
style: refine file manager UI — plain list style, context menu, compa…
lkebin Jul 14, 2026
97ff6e6
style: fix settings window title to GostX, align sidebar with editor …
lkebin Jul 14, 2026
2aea2b7
style: center window title via toolbar, restore native sidebar style
lkebin Jul 14, 2026
f32020a
fix: revert to clean layout — native sidebar, fixed GostX title, rest…
lkebin Jul 14, 2026
41c317a
style: match sidebar background to editor — unify NavigationSplitView…
lkebin Jul 14, 2026
8dcb213
fix: apply unified background to sidebar VStack, remove detail backgr…
lkebin Jul 14, 2026
79af85b
style: use Apple-recommended .listStyle(.plain) to unify sidebar and …
lkebin Jul 14, 2026
dbee8bc
fix: align editor top edge with sidebar list items via padding
lkebin Jul 14, 2026
47c3851
fix: move Add Profile button to toolbar, remove bottom safe area
lkebin Jul 14, 2026
1001862
fix: restore Add Profile button to sidebar, make editor fill availabl…
lkebin Jul 14, 2026
9e5297d
fix: move navigationTitle to TabView level for consistent title acros…
lkebin Jul 14, 2026
6ad4f79
fix: remove window.title to avoid conflict with SwiftUI navigationTitle
lkebin Jul 14, 2026
88cba33
style: simplify settings window to standard titled window per macOS HIG
lkebin Jul 14, 2026
619c5f8
style: make sidebar fill column height, remove Files list background
lkebin Jul 14, 2026
7e2ffbe
docs: add Makefile macos target design spec
lkebin Jul 14, 2026
ba451a9
docs: add Makefile macos target implementation plan
lkebin Jul 14, 2026
601079a
refactor: rename macos-framework to macos-xcframework, strip copy logic
lkebin Jul 14, 2026
a96cf3d
fix: use rm -rf for Libgost.xcframework directory bundle in clean tar…
lkebin Jul 14, 2026
2626ce5
feat: add macos target to root Makefile
lkebin Jul 14, 2026
60ef70a
feat: add -derivedDataPath build to macos xcodebuild
lkebin Jul 14, 2026
229dfec
feat: replace macOS app icon with Android launcher icon
lkebin Jul 14, 2026
1dd7ea4
feat: use logo.png (1024px RGBA) as macOS app icon source
lkebin Jul 14, 2026
7f9e49a
fix: add ConfigRepository and restore updateListen to MacExtrasConfig…
lkebin Jul 14, 2026
eb73359
Fix tun for macos
lkebin Jul 14, 2026
2fe7723
revert: remove statusListenItem and updateListen from MacExtrasConfig…
lkebin Jul 14, 2026
12c629b
perf: build macOS target as arm64-only, halving binary size
lkebin Jul 14, 2026
ded33f4
fix: set work dir in proxy mode so gost can find imported bypass files
lkebin Jul 14, 2026
5fb82a4
fix: use tunStackType (gvisor on macOS) instead of hardcoded system s…
lkebin Jul 14, 2026
a8b85b9
fix: properly implement gvisor TUN stack for macOS
lkebin Jul 14, 2026
02be582
fix: handle device.Name() returning (string, error)
lkebin Jul 14, 2026
ae4eb5d
fix: restore vpnMode auto-detection and ConfigRepository
lkebin Jul 14, 2026
7e58940
security: extract DEVELOPMENT_TEAM to xcconfig, add to .gitignore
lkebin Jul 14, 2026
3ed4a14
Enhanced settings window
lkebin Jul 15, 2026
bf6ec01
spec: macOS Settings NavigationSplitView design
lkebin Jul 15, 2026
cf11b6f
plan: macOS Settings NavigationSplitView implementation
lkebin Jul 15, 2026
cbe1842
feat: add LogViewModel with polling, copy, and clear
lkebin Jul 15, 2026
6121171
fix: make LogViewModel logFileURL injectable for testability
lkebin Jul 15, 2026
3cb1085
feat: add LogOptionsView (toggle + level picker)
lkebin Jul 15, 2026
f024d83
feat: add LogContentView (scrollable lines + toolbar)
lkebin Jul 15, 2026
92db74b
feat: add ProfileListView extracted from SettingsView
lkebin Jul 15, 2026
16a25b9
feat: add FileListView extracted from FileManageView
lkebin Jul 15, 2026
cca59a7
feat: add FileContentView extracted from FileManageView
lkebin Jul 15, 2026
a5561e7
refactor: rewrite SettingsView as NavigationSplitView
lkebin Jul 15, 2026
9bc2725
chore: extract FileManageViewModel, remove old LogView/FileManageView
lkebin Jul 15, 2026
f691968
fix: sync loggingEnabled state and restore App Group unavailable guard
lkebin Jul 15, 2026
bc8b956
style: Liquid Glass sidebar, log dropdown, content margins
lkebin Jul 15, 2026
d7d102e
fix: use fullSizeContentView for sidebar-titlebar fusion
lkebin Jul 15, 2026
59e753c
fix: add ignoresSafeArea top for sidebar-titlebar extension
lkebin Jul 15, 2026
643fa7f
revert: remove custom titlebar config, rely on macOS 26 auto-adoption
lkebin Jul 15, 2026
a3d6e19
feat: add NSToolbar to Settings window
lkebin Jul 15, 2026
6574035
fix: combine fullSizeContentView + toolbar + ignoresSafeArea for side…
lkebin Jul 15, 2026
cbd9e7c
fix: YamlEditorView ignores top safe area to remove toolbar-height gap
lkebin Jul 15, 2026
66e4139
fix: remove auto-select first profile on appear
lkebin Jul 15, 2026
4ff16ef
Enhanced settings window
lkebin Jul 15, 2026
1f35ecc
refactor: LogOptionsView uses macOS Settings grouped card style
lkebin Jul 15, 2026
ffc3806
fix: LogContentView — toolbar at bottom, hidden when off, ignoresSafe…
lkebin Jul 15, 2026
fba9d3c
fix: auto-scroll uses onChange(of: lines.count) instead of timer call…
lkebin Jul 15, 2026
f47434f
fix: isFollowing defaults to false, timer only starts when logging en…
lkebin Jul 15, 2026
e268873
fix: exclude x86_64 from Release to fix archive with arm64-only Libgost
lkebin Jul 16, 2026
65d6efc
fix: GostX Release — remove hardcoded Apple Development, enable harde…
lkebin Jul 16, 2026
20246f0
feat: add macos-release Makefile target for Developer ID DMG
lkebin Jul 16, 2026
2ec63ad
fix: GostXTunnel entitlement matches automatic profile
lkebin Jul 16, 2026
f05d906
Fix entitlements
lkebin Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@ libgost/*.h
libgost/*.a
libgost/*.aar
libgost/*.jar
libgost/*.xcframework
libgost/build/

# 个人配置(含敏感信息,不提交)
android/config-templates/*.yaml
macos/Configuration/*.xcconfig
!macos/Configuration/*.example.xcconfig
android/app/libs/libgost*.aar
.pi-subagents/
macos/Frameworks/
macos/build/
50 changes: 48 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: all android android-release clean
.PHONY: all android android-release macos macos-release clean

all: android

Expand All @@ -8,10 +8,56 @@ android: libgost/libgost.aar
android-release: libgost/libgost.aar
cd android && ./gradlew assembleRelease bundleRelease

macos: macos/Frameworks/Libgost.xcframework
cd macos && xcodebuild -project GostX.xcodeproj -scheme GostX -configuration Release -derivedDataPath build ONLY_ACTIVE_ARCH=YES build

# Developer ID distribution: signed, notarized DMG for direct sharing
# Prerequisites:
# 1. Developer ID Application certificate in Keychain
# 2. (Optional) APPLE_ID, APPLE_PASSWORD, APPLE_TEAM env vars for notarization
# APPLE_PASSWORD should be an app-specific password from appleid.apple.com
macos-release: macos/Frameworks/Libgost.xcframework
cd macos && \
xcodebuild archive \
-project GostX.xcodeproj \
-scheme GostX \
-configuration Release \
-archivePath build/GostX.xcarchive \
-destination 'platform=macOS' && \
xcodebuild -exportArchive \
-archivePath build/GostX.xcarchive \
-exportOptionsPlist Configuration/ExportOptions.plist \
-exportPath build/Release && \
hdiutil create -volname GostX \
-srcfolder build/Release/GostX.app \
-ov -format UDZO \
build/GostX.dmg
@echo "✅ DMG ready: macos/build/GostX.dmg"
@if [ -n "$$APPLE_ID" ] && [ -n "$$APPLE_PASSWORD" ] && [ -n "$$APPLE_TEAM" ]; then \
echo "📤 Submitting for notarization..."; \
xcrun notarytool submit macos/build/GostX.dmg \
--apple-id "$$APPLE_ID" \
--password "$$APPLE_PASSWORD" \
--team-id "$$APPLE_TEAM" \
--wait && \
xcrun stapler staple macos/build/GostX.dmg && \
echo "✅ Notarized: macos/build/GostX.dmg"; \
else \
echo "⚠️ Skipping notarization (set APPLE_ID, APPLE_PASSWORD, APPLE_TEAM to enable)"; \
fi

libgost/libgost.aar:
cd libgost && $(MAKE) libgost.aar

.PHONY: clean
macos/Frameworks/Libgost.xcframework:
cd libgost && $(MAKE) macos-xcframework
mkdir -p macos/Frameworks
rm -rf macos/Frameworks/Libgost.xcframework
cp -R libgost/Libgost.xcframework macos/Frameworks/Libgost.xcframework
@echo "Libgost.xcframework → macos/Frameworks/"

clean:
cd libgost && $(MAKE) clean
cd android && ./gradlew clean 2>/dev/null || true
rm -rf macos/Frameworks/Libgost.xcframework
rm -rf macos/build
Loading