Davide De Rosa
0fee726951
Make profile "Connect" item a connection toggle
...
Requires adding multiple delegates to LightVPNManager.
2022-08-19 17:43:56 +02:00
Davide De Rosa
4d56ed6fca
Only hide app by closing it
...
Keep constant "Show" action in menu:
- Bring app to foreground if in background
- Activate app if already in foreground
2022-08-19 17:43:52 +02:00
Davide De Rosa
d10edc69fe
Restore truncated VPN footer workaround
2022-08-19 08:34:55 +02:00
Davide De Rosa
f465108a0a
Attempt beta release
2022-08-16 12:43:20 +02:00
Davide De Rosa
03cc5c07ae
Update bundle and Ruby version
2022-08-16 12:27:40 +02:00
Davide De Rosa
0f790a9401
Fix leaks when reconnecting from menu
...
LightVPNManager implementation was still disabling/enabling VPN
manually instead of using reconnect() atomically, which led to an
IP leak in between the two steps.
2022-08-13 16:48:00 +02:00
Davide De Rosa
7a700408a8
Improve a few things about provider profile menus
...
- Add "Connect" item to connect to current server
- Sort provider categories ("Default" should also come first)
Reuse bundle from constants.
2022-08-13 16:47:01 +02:00
Davide De Rosa
80f71507e3
Do not navigate to active profile on launch
2022-08-05 12:50:12 +02:00
Davide De Rosa
984b460b59
Update bundle
2022-08-05 07:57:35 +02:00
Davide De Rosa
92ffc382cb
Reconnect VPN without disabling it
...
Retain on-demand flag to avoid leaks during reconnection.
2022-08-05 07:40:43 +02:00
Davide De Rosa
1c64253a1f
Fix inverted profile lastUpdate logic
...
- Least recent was set last in the headers dictionary, thus
overwriting most recent (ascending = false)
- Mapping full profiles directly to array was generating
duplicates, use a dictionary to keep ID unicity
2022-08-04 23:36:09 +02:00
Davide De Rosa
0464cd0476
Fix property in launch on login bindings
2022-08-04 23:35:42 +02:00
Davide De Rosa
b183dece8c
Fix logic to activate first created profile
...
Broken in dec7fb9030
VPN was lost when app was sent to background. Current (and active)
profile was persisted with nil isActive and instead of ignoring
profile activation, isActive was falling back to
allHeaders.isEmpty (false), erroneously deactivating the profile
and disconnecting the VPN.
2022-08-04 23:33:17 +02:00
Davide De Rosa
9195d426e4
Attempt beta release
2022-07-18 08:03:24 +02:00
Davide De Rosa
f8c6b6580d
Encapsulate launchesOnLogin AppPreference from Mac
2022-07-18 08:03:24 +02:00
Davide De Rosa
b26e334881
Get Mac strings from main bundle
...
Alter bundle in SwiftGen configuration file.
2022-07-18 07:55:56 +02:00
Davide De Rosa
04faf57d4c
Send app to background if started hidden
...
Sandbox had to be enabled in order to submit binary to App Store
Connect, therefore command line arguments cannot be used to tell
if the app was started by the launcher.
However, given that launcher starts app in hidden state, we can
safely assert that if the app is hidden on start, it was started
by the launcher.
See f33380b4e2
Also drop automatic signing on Mac bundle and unused utils.
2022-07-18 07:55:56 +02:00
Davide De Rosa
32e548421f
Attempt beta release
2022-07-17 14:50:05 +02:00
Davide De Rosa
c581042b10
Enable macOS public beta workflow
2022-07-17 14:48:14 +02:00
Davide De Rosa
2c5f3d0bf0
Send app to background in OrganizerView handler
...
Keep handler in a single place.
2022-07-17 14:47:15 +02:00
Davide De Rosa
781291940f
Enforce window appearance on 'Show' after closure
2022-07-16 21:24:53 +02:00
Davide De Rosa
9458c4f3a3
Fix server description and sorting
...
- Name (countries, area)
- Index
- Tags
Also use short description in menu (without country prefix).
2022-07-16 17:39:42 +02:00
Davide De Rosa
ce280c0826
Fix old entity naming
2022-07-16 17:39:42 +02:00
Davide De Rosa
48d8173871
Drop return in single line functions
2022-07-16 17:39:42 +02:00
Davide De Rosa
8d5f147194
Add SurfShark to README
2022-07-16 17:39:42 +02:00
Davide De Rosa
dec7fb9030
Activate first created profile
2022-07-16 17:39:42 +02:00
Davide De Rosa
58e375ec41
Attach @MainActor where needed
...
Some methods were updating UI from non-main thread.
2022-07-16 17:39:42 +02:00
Davide De Rosa
f33380b4e2
Launch application in background from launcher
...
Requires disabling sandbox for launcher to receive arguments.
https://developer.apple.com/documentation/appkit/nsworkspace/openconfiguration/3172708-arguments
Refine some minor things about launcher:
- Pass invoker to NSApp.terminate() calls
- Use legacy version of .openApplication() to drop Concurrency
2022-07-16 17:39:42 +02:00
Davide De Rosa
3f4b55a003
Implement Mac bundle with system menu
...
Use bundle as a means to provide Mac APIs to Catalyst app.
In order to cross the @objc wall set by the Mac Bundle mechanism,
Swift structures cannot be used directly and must be bridged
through ObjC facades.
Create NSMenu in MVVM style and install it on app launch. Make
sure to do it in AppDelegate.applicationDidFinishLaunching(),
because doing it as early as in PassepartoutApp.init() would
crash Mac code.
Use .representedObject to own view models.
With menu in place, app can be sent to background when main window
is closed. Requires multiple documents support for app not to die
instantly.
2022-07-16 17:39:42 +02:00
Davide De Rosa
7d5f3e63c8
Add 'didUpdate' subjects in managers
...
objectWillChange may not work outside SwiftUI.
- ProfileManager.didUpdateProfiles
- ProviderManager.didUpdateProviders
2022-07-15 08:59:29 +02:00
Davide De Rosa
7771b50b56
Add ProfileManager methods to return full profiles
2022-07-14 17:07:30 +02:00
Davide De Rosa
9d9dc2b2f6
Rename activeProfileId publisher for consistency
2022-07-14 17:07:30 +02:00
Davide De Rosa
cbf00cef73
Fix Core Data fault due to missing headers lastUpdate
2022-07-14 17:07:30 +02:00
Davide De Rosa
0a2d1e9d37
Mitigate fatalError() in properties, fail gracefully
...
Do not trigger fatalError() on properties too much because
SwiftUI may read them at any unpredictable time.
2022-07-08 20:01:53 +02:00
Davide De Rosa
a442603696
Polish bundleConfig with strong type checking
2022-07-05 08:11:31 +02:00
Davide De Rosa
3e8a49c970
Remove store value when set value is nil
...
Fixes crash on removing active profile when current, due to setting
nil activeProfileId in UserDefaults.
2022-07-05 08:04:58 +02:00
Davide De Rosa
ebe8ae3d29
Retain profiles order, no active on top
2022-07-04 00:32:06 +02:00
Davide De Rosa
e8f65e9db0
Also show active profile as "Disabled"
2022-07-04 00:31:54 +02:00
Davide De Rosa
15dec59692
Comment on app path inferral from launcher
2022-06-26 08:53:10 +02:00
Davide De Rosa
0ff831f021
Fix target in test workflow
2022-06-25 20:27:24 +02:00
Davide De Rosa
1543eef3c1
Add convenient appId constant
2022-06-25 20:27:24 +02:00
Davide De Rosa
b966826f19
Use main container path as launcher argument
...
Rather than "Contents/MacOS/Passepartout", raising a permission
error.
Also add .hides to prevent window from showing on launch.
2022-06-25 20:16:06 +02:00
Davide De Rosa
df0d40c556
Add launcher target
...
- Launch main app in background then die
- Do not launch app if already running
- Launch app binary relative to launcher location
2022-06-25 16:53:38 +02:00
Davide De Rosa
3cc82cc807
Fix case in Info keys related to launch screen
2022-06-25 16:53:38 +02:00
Davide De Rosa
7ba9879c8c
Revisit constants structure
...
Move some stuff back to App:
- Constants, and split library-dependent
- InApp entities and constants
Flatten global constants hierarchy.
2022-06-25 14:36:28 +02:00
Davide De Rosa
3c9511cd0c
Only support Catalyst where required
...
- App
- Tunnels
2022-06-25 13:28:28 +02:00
Davide De Rosa
9a8477225e
Refactor library into domain + impl
2022-06-23 23:31:01 +02:00
Davide De Rosa
8504998bbb
Reorganize app-specific shared code into AppShared
2022-06-19 14:41:26 +02:00
Davide De Rosa
85129f17af
Prefix store keys with "Passepartout." domain
...
Also remove stale preferences from early betas after migrating
relevant ones.
Extend KeyValueStore with removeValue() for this purpose.
2022-06-19 13:33:49 +02:00
Davide De Rosa
02a9db057f
Update TunnelKit
...
- Set explicit tunnel log path
- OpenSSL 1.1.1o
2022-06-19 13:33:49 +02:00