Commit Graph

1404 Commits

Author SHA1 Message Date
Davide
4b1f6e547b
Fix some on-demand behavior (#646)
Fixes #644 
Fixes #645
2024-09-30 19:35:41 +02:00
Davide De Rosa
3f60dee9a2
Add missing Info.plist document key 2024-09-30 19:00:09 +02:00
Davide De Rosa
cf3fe7449e
Fix missing CFBundleTypeName 2024-09-30 18:08:29 +02:00
Davide
0e4dd086ef
Import profiles with on-demand disabled (#641)
Make it friendly to Shortcuts automation by default.
2024-09-30 17:40:24 +02:00
Davide
aead866275
Open app with multiple files (#640)
onOpenURL cannot handle multiple URLs on macOS, whereas
NSApplicationDelegate can.

Fixes #637
2024-09-30 17:22:16 +02:00
Davide
4877c2bd20
Restrict paywall to on-demand rules (#639)
Rather than whole module.

Closes #638
2024-09-30 15:56:32 +02:00
Davide
a9fa6a2f62
Maintain one configuration per profile (#636)
Helps with automation. Install the VPN configuration before persisting a
profile, so that the 1:1 reference with OS settings is maintained.
Likewise, uninstall the VPN configuration after removing a profile.

This before-save hook also resolves a problem with multiple imports,
where multiple VPN permission alerts coalesce if no VPN configuration is
installed. Now the first import waits for the permission synchronously.

Fixes #618
2024-09-30 14:56:20 +02:00
Davide
a29495a69c
Decouple Constants from BundleConfiguration (#635)
Fixes #619
2024-09-28 19:05:47 +02:00
Davide
28a2017da2
Confirm quit on macOS (#634)
To do so, must prevent window from closing.

Fixes #223
2024-09-28 17:58:48 +02:00
Davide
5deb8ec763
Prepare for macOS settings (#629) 2024-09-28 12:47:33 +02:00
Davide De Rosa
c0234b07a8
Fix missing Window on iOS
Broken by 9e6e59276b
2024-09-28 11:56:35 +02:00
Davide
9e6e59276b
Associate and handle imported files (#628) 2024-09-28 11:43:57 +02:00
Davide
95c09f4353
Prefix group ID with team ID on macOS (#626)
Fixes #624
2024-09-28 11:13:32 +02:00
Davide
989886c434
Fix description of parsing errors on import (#623)
Fixes #607
2024-09-28 00:01:01 +02:00
Davide
fbc6ece59d
Reorganize library into AppUI (#621)
Closes #611
2024-09-26 23:13:55 +02:00
Davide
4124ff5cae
Lock app with FaceID (#609)
Restore feature as-is from v2.

Closes #606
2024-09-25 19:32:07 +02:00
Davide
752dc6229f
Associate with ovpn/conf/zip files (#605)
Closes #604
2024-09-25 18:14:26 +02:00
Davide
a665670cf7
Add job for public beta deployment (#600)
Closes #599
2024-09-24 11:17:52 +02:00
Davide
6cc86e8668
Import v3 code (#597)
Closes #565
2024-09-23 15:02:26 +02:00
Davide De Rosa
6bfda3487b
Attempt release 2024-09-22 16:29:08 +02:00
Davide De Rosa
ea4028d33c
Attempt release 2024-09-22 16:20:20 +02:00
Davide De Rosa
d1d66dcbb3
Attempt release 2024-09-22 16:16:26 +02:00
Davide De Rosa
a98cedfd7d
Attempt release 2024-09-22 16:02:40 +02:00
Davide De Rosa
1a6c5fd303
Attempt release 2024-09-22 15:58:52 +02:00
Davide De Rosa
10cfc8e54a
Attempt release 2024-09-22 15:55:50 +02:00
Davide De Rosa
9e2b757ec5
Attempt release 2024-09-22 15:43:34 +02:00
Davide De Rosa
5587b9902a
Allow deletion of TV profiles
Fixes #480
2024-09-22 15:41:53 +02:00
Davide De Rosa
18b933d36e
Respect global macOS accent (#490) 2024-02-03 11:52:29 +01:00
Davide De Rosa
7f5b84c72b
Override profile list selection color (#486)
Both List and Toggle use accent color for their tint. Instead:

- Set grayish .tint on List to customize selection color
- Retain global accent in VPNToggle

Fixes #458
2024-01-27 15:59:40 +01:00
Davide De Rosa
7b30d48ea4
Bump version 2024-01-20 00:21:14 +01:00
Davide De Rosa
24b08c4b50
Update restricted profile except expiration (#481)
TV profiles were not updated until expiration.
2024-01-19 08:39:38 +01:00
Davide De Rosa
e3f4443cc0
Attempt release 2024-01-19 00:07:12 +01:00
Davide De Rosa
5fe9d7405f
Attempt release 2024-01-14 15:14:42 +01:00
Davide De Rosa
64d1131fdd
Update copyright
Closes #473
2024-01-14 14:36:55 +01:00
Davide De Rosa
cdd33c881d
Attempt release 2024-01-14 14:04:39 +01:00
Davide De Rosa
0299466a8f
Unintended sensitive data in issue reports (#471) 2024-01-14 14:01:54 +01:00
Davide De Rosa
ea0fd51362
Attempt release 2024-01-11 18:18:23 +01:00
Davide De Rosa
4b909ebf8a
Attempt release 2024-01-11 17:52:31 +01:00
Davide De Rosa
3fb521a584
Split Apple TV purchase (#467)
Full version features were listed when purchasing the Apple TV feature,
and this was very misleading.
2024-01-11 17:52:05 +01:00
Davide De Rosa
917e712510
Attempt release 2024-01-11 16:47:40 +01:00
Davide De Rosa
e21e11b022
Rework how purchasable products are presented (#465)
Fixes #464
2024-01-11 16:46:52 +01:00
Davide De Rosa
63cbf39a8a
Attempt release 2024-01-11 00:16:47 +01:00
Davide De Rosa
328e2bafd6
Attempt release 2024-01-11 00:15:49 +01:00
Davide De Rosa
92d5008d1c
Drop trailing dot in some strings 2024-01-10 20:14:20 +01:00
Davide De Rosa
e8d8f27750
Attempt release 2024-01-10 18:51:03 +01:00
Davide De Rosa
2e989fd127
Rewrite wrong refund logic (#462)
So, if both a purchase and a refund of feature `.foobar` existed,
whatever the dates, the purchase was incorrectly discarded.

Fixes #459, fixes #461
2024-01-10 18:48:38 +01:00
Davide De Rosa
821d4c79f4
Attempt release 2024-01-09 18:18:53 +01:00
Davide De Rosa
bf4dc6c920
Add tvOS build to beta/review CI jobs (#453)
_Should_ work out of the box.

Closes #450
2024-01-07 12:17:46 +01:00
Davide De Rosa
dde2d22eed
Revisit submission of OpenVPN diagnostic report (#452)
Some improvements:

- Suggest replacing the template with the description of the issue
- Attach app log
- Append purchased features

Also reuse the same body for `mailto:` reports, as metadata were not
being attached in that case.

Closes #377
2024-01-07 12:11:16 +01:00
Davide De Rosa
60ed10e45e
Attempt release 2024-01-06 00:10:22 +01:00
Davide De Rosa
87804e89d8
Attempt release 2024-01-06 00:07:26 +01:00
Davide De Rosa
978c74ad6e
Attempt release 2024-01-05 23:55:19 +01:00
Davide De Rosa
4836bbac18
Restore proper OpenVPN connectivity (#447) 2024-01-05 23:54:16 +01:00
Dmytro Chyrkin
0b7b82129b
fix: added missing uk translation (#445)
Co-authored-by: Davide De Rosa <keeshux@gmail.com>
2024-01-05 16:38:16 +01:00
Davide De Rosa
7295249cb8
Attempt release 2023-12-31 01:24:28 +01:00
Davide De Rosa
5c5697762b
Add minimal TV app
Closes #315
2023-12-31 01:21:38 +01:00
Davide De Rosa
47c6b02c4d
Use FeatureModel in paywall (#442)
Rather than anonymous tuples.
2023-12-23 12:38:00 +01:00
Davide De Rosa
7d7aaa8b0c
Update paywall (#441)
Group features and drop platform purchases.
2023-12-23 12:10:34 +01:00
Davide De Rosa
239d3e6853
Fix in-app eligibility in VPN (#440) 2023-12-23 07:59:23 +01:00
Davide De Rosa
4c4876c5f7
Incorrect handling of receipt purchases (#439) 2023-12-21 08:54:00 +01:00
Davide De Rosa
1551b59f21
Use async in ProductManager (#438)
Drop legacy completion handlers. Push `Task` to the views.

Also:

- Group library tests in a test plan
- Fix a broken library dependency
2023-12-21 08:09:52 +01:00
Davide De Rosa
a0da930d98
Refactor and test ProductManager (#437)
Carefully drop the StoreKit and Kvitto dependencies for ProductManager
to be testable.

Rebuild test target completely to start writing meaningful tests in
general.
2023-12-20 20:43:39 +01:00
Davide De Rosa
2d57c4ad8a
Sendable warning in credits view (#433)
Extension of a View apparently does not run on MainActor.
2023-12-17 07:47:45 +01:00
Davide De Rosa
5cfa32dbb7
Add data count to WireGuard connections (#430)
Closes #312
2023-12-14 22:18:20 +01:00
Davide De Rosa
4a92acbeb9 Attempt release 2023-10-14 19:50:24 +02:00
Davide De Rosa
7ceec3f322 Bump event count for review 2023-10-14 19:48:52 +02:00
Davide De Rosa
cc6c8a90d7 Bump version
Drop stale version in project.
2023-10-14 16:06:17 +02:00
Davide De Rosa
2596622a43 Attempt release 2023-10-10 23:01:19 +02:00
Davide De Rosa
12c08c132c
Update metadata and translations (#365) 2023-10-10 23:00:19 +02:00
Davide De Rosa
7de000148f
Level up to strict Concurrency (#361)
Trigger and resolve some additional Concurrency issues.
2023-09-10 20:36:52 +02:00
Davide De Rosa
c5cf0ca1d2
Shift async responsibility to ProductManager (#360)
SandboxChecker should not care about what actor is running on.

Better than #356
2023-09-10 19:08:31 +02:00
Davide De Rosa
27266a6d47 Fix stupid compile error 2023-09-10 18:40:24 +02:00
Davide De Rosa
d02da0bad8
Fill missing descriptions for some errors (#359)
Fixes #358
2023-09-10 17:15:40 +02:00
Davide De Rosa
9d72dc43a2 Attempt release 2023-09-10 11:21:59 +02:00
Davide De Rosa
f32c6f8fde
Retain persistence objects in manager (#357)
Relying on Core Data for context retention is fragile, better to keep a
reference of the *Persistence objects ourselves.

Also, remove any CloudKit reference from CoreContext.
2023-09-10 11:20:56 +02:00
Davide De Rosa
0b755c1c77 Attempt release 2023-09-10 10:35:22 +02:00
Davide De Rosa
0872c27fce
Move CloudKit logic to PersistenceManager (#355)
Observe updates rather than execute operations imperatively. Also refine
responsibilities of AppContext and CoreContext.
2023-09-10 10:34:42 +02:00
Davide De Rosa
c645f39254
Fix SandboxChecker actor (#356)
Mac function was still running on main actor. Only constrain to main
actor on public API.
2023-09-10 10:27:11 +02:00
Davide De Rosa
3891723356 Attempt release 2023-09-10 08:09:05 +02:00
Davide De Rosa
6b0a08a189 Attempt release
Fix sed syntax on Mac.
2023-09-10 01:08:07 +02:00
Davide De Rosa
a38e3fed7a
Look up TestFlight flag asynchronously (#352)
Xcode has been quite obnoxious recently with this issue. Start the app
with the most restrictive type (.undefined), relax restrictions after
looking up sandbox and app receipt.
2023-09-10 00:52:39 +02:00
Davide De Rosa
33d9e05907
Drop < 2.2.0 key after migration (#353)
Otherwise, iCloud is being constantly reinforced to true.
2023-09-10 00:50:12 +02:00
Davide De Rosa
791b6be7d5
Allow erasing remote iCloud store (#351)
Convenient for those with privacy concerns.
2023-09-09 21:52:32 +02:00
Davide De Rosa
a4ca8cc996
Support iCloud sync as an option (#350)
Sync will be enabled on upgrade for consistency with current behavior,
and disabled for new installs.

Fixes #227
2023-09-09 20:29:04 +02:00
Davide De Rosa
2d046181b0
Only migrate if current version is higher (#349) 2023-09-08 22:45:04 +02:00
Davide De Rosa
a3cfde1950
Drop v2 migrations (#348) 2023-09-08 22:18:41 +02:00
Davide De Rosa
0f84859354
Do some housekeeping (#347)
- Be consistent with on-demand rules
- Use shortcut reduce(into:)
2023-09-08 16:20:42 +02:00
Davide De Rosa
c80d17ceb4
Fix .locksInBackground AppStorage key (#346) 2023-09-08 16:20:24 +02:00
Davide De Rosa
b4b2db176c
Fix .sink retain cycles (#345) 2023-09-08 16:20:01 +02:00
Davide De Rosa
f159252e24
Replicate Diagnostics in Settings (#342)
As the only link to "Diagnostics" appears in the profile screen, when
there are no profiles the screen is unreachable. Replicate the same
entry in Settings.
2023-08-06 20:27:16 +02:00
Davide De Rosa
04e090e26f
Suppress SceneConfiguration warning (#341) 2023-08-06 09:43:24 +02:00
Davide De Rosa
7a74525149 Fix b608d59d8f 2023-07-31 08:25:30 +02:00
Davide De Rosa
19e52bfd59 Attempt release 2023-07-30 18:01:44 +02:00
Davide De Rosa
b608d59d8f
Omit footer when on-demand is disabled (#339)
Preserve footer in that case, just empty. Adding/removing footer seems
to result in a worse animation.
2023-07-30 17:59:29 +02:00
Davide De Rosa
388af4a73c Attempt release 2023-07-30 17:47:41 +02:00
Davide De Rosa
db4c6094ea Attempt release 2023-07-24 23:32:51 +02:00
Davide De Rosa
bae843363c
Fall back sandbox receipt to release receipt (#337)
Could be a way to enable paid features in TestFlight builds for those
who originally bought them from the App Store.
2023-07-24 23:32:05 +02:00
Davide De Rosa
65d6e30469
Consider text length in endpoint rows (#336) 2023-07-23 15:17:28 +02:00
Davide De Rosa
38cca79683 Attempt release 2023-07-23 13:59:56 +02:00
Davide De Rosa
34f6738b69
Focus some text fields on appearance (#334)
Feature from iOS 15, use it on:

- New profile name
- New profile passphrase
- Renamed profile name
- Account username
2023-07-23 13:28:47 +02:00
Davide De Rosa
6ede6f052a
Allow editing of OpenVPN endpoints (#335)
Hosts only:

- Add new
- Edit/delete existing
- Reorder

Closes #206
2023-07-23 12:45:47 +02:00
Davide De Rosa
e0dbca224f
Rework "Trusted networks" to be a generic "On-demand" (#333)
Extend the feature by also providing a complementary "include" policy,
i.e. activate the VPN _only_ on the specified networks. "Trusted
networks" was only providing the "exclude" counterpart, i.e. _except_
the specified networks.

Closes #119
2023-07-23 08:44:46 +02:00
Davide De Rosa
1c3cbe02e5
Improve OpenVPN Endpoint UX (#332)
- Make selection linear by address
- Do not hide endpoints when automatic, show disabled
- Suggest manual endpoint required
- Pre-expand selected endpoint address
- Do not dismiss on selection, because selected value is not visible in
ProfileView
2023-07-22 17:10:16 +02:00
Davide De Rosa
0734816c05 Bump version 2023-07-17 21:48:25 +02:00
Davide De Rosa
2357324a74
Update some metadata (#331)
A bit of everything.

- Use GitHub handles in CHANGELOG
- Mention XOR patch in README and keywords
- Update gems
- Add GitHub issue template
- Fix missing script in release workflow
2023-07-17 21:46:32 +02:00
Davide De Rosa
4173c7aa6c
Externalize complex bindings (#329)
Some bindings are too convoluted, move them out of initializers.
2023-07-17 21:44:18 +02:00
Davide De Rosa
0804c6b38e Attempt release 2023-07-06 18:47:35 +01:00
Davide De Rosa
a7ea010d4e
Extend error handler to modals (#327) 2023-07-06 19:29:10 +02:00
Davide De Rosa
1935d9e92c Attempt release 2023-07-06 11:10:10 +01:00
Davide De Rosa
cf43e1cd7b Attempt release 2023-07-06 11:05:27 +01:00
Davide De Rosa
b5d230f0b9 Attempt release
Use TunnelKit 6.1.0
2023-07-05 17:16:09 +01:00
Davide De Rosa
f0e3b2fa9c
Improve release workflow (#326) 2023-07-05 18:07:47 +02:00
Davide De Rosa
98e5e4cdde
Share common protocols across localized strings (#324) 2023-07-05 17:18:33 +02:00
Davide De Rosa
bf70c7c59a
Reorganize app folders (#323) 2023-07-04 22:29:43 +02:00
Davide De Rosa
bd6340ce77
Split reusable views into extensions (#322)
Like in #321
2023-07-03 17:37:16 +02:00
Davide De Rosa
d7ebcb23ba
Split views into extensions (#321)
Nothing but moving code around to reorganize views into the following
sections (MARK):

- Properties/Body
- Subviews
- Actions
2023-07-03 16:54:43 +02:00
Davide De Rosa
7198150f00
Refactor alerts to use latest API (#320) 2023-07-03 16:41:49 +02:00
Davide De Rosa
278efaf347
Refactor domain errors (#310) 2023-07-02 12:51:50 +02:00
Davide De Rosa
3a06d6c984 Do not use spaces in filenames 2023-06-18 10:05:10 +02:00
Davide De Rosa
7030ad40c2 Do not observe shared entities if uninterested (#313)
`@ObservedObject` is unnecessary in cases where manager operation is
unidirectional.
2023-06-18 10:05:10 +02:00
Davide De Rosa
ddab76326d
Replace deprecated .windows with .connectedScenes (#316) 2023-06-17 21:40:09 +02:00
Davide De Rosa
fb47def4ed
Avoid inline format for non-descriptive strings (#302) 2023-05-28 11:57:35 +02:00
Davide De Rosa
b89328b5c3
Only show 'Reconnect' on active profile (#311)
It doesn't make sense anywhere else.
2023-05-28 11:23:07 +02:00
Davide De Rosa
36cad41529
Fix IPv4/6 address validation (#308) 2023-05-27 21:34:31 +02:00
Davide De Rosa
d05cf7140c
Fail gracefully when refreshing infrastructure (#307) 2023-05-27 13:52:57 +02:00
Davide De Rosa
a78a7b18b5
Encapsulate *Persistence responsibilities (#305)
Do not leave the choice of a repository context up to the library
consumer. Instead, provide a specific factory (*Persistence) for each
module.
2023-05-27 12:32:53 +02:00
Davide De Rosa
7ccb10febc
Rethink library architecture (#301) 2023-05-24 18:19:47 +02:00
Davide De Rosa
b4ad8dea0d Do some code clean up
- Use guard in validators

- Rename URL.openURL() to URL.open()

- Sort imports (SwiftLint)

- Drop unused VPNProtocolType.allTypes

- Drop unused imports
2023-05-21 11:48:03 +02:00
Davide De Rosa
1051a8dc52
Revisit domain name validators (#297)
- Allow TLDs longer than 6 characters

- Allow wildcards in proxy bypass domains
2023-05-01 11:44:41 +02:00
Davide De Rosa
40330cc87a Attempt beta release 2023-04-18 18:15:39 +02:00
Davide De Rosa
1fd38790e4 Attempt beta release 2023-04-18 17:24:47 +02:00
Dmytro Chyrkin
1cb5821f9d
Small fixes for Ukrainian translation (#288) 2023-04-12 09:05:39 +02:00
Davide De Rosa
574f9a05b5
Show app version in Mac menu (#286) 2023-04-08 11:57:42 +02:00
Davide De Rosa
50b4806275
Remove nonsense Mac menus (#285) 2023-04-08 11:56:17 +02:00
Davide De Rosa
7a7a815979 Attempt beta release 2023-04-06 12:51:01 +02:00
Davide De Rosa
aec7f8eefe Attempt beta release 2023-04-05 16:32:50 +02:00
Davide De Rosa
e3cfdadf97
Cover screen on .inactive (#282)
* Make unlock block actor-safe

* Cover views on .inactive, lock on .background
2023-04-05 16:31:17 +02:00
Davide De Rosa
0591363b15 Refine platform-specific release notes
Symlink metadata to iOS, except "What's New".
2023-04-05 07:59:50 +02:00
Davide De Rosa
34e41ba93f Attempt beta release 2023-04-04 18:59:44 +02:00
Davide De Rosa
07bd126131
Recognize IAPs other than full version on Mac (#281) 2023-04-04 18:59:05 +02:00
Davide De Rosa
d4d3d97081 Attempt beta release 2023-04-04 17:11:44 +02:00
Davide De Rosa
ad90a5908b Fix truncation in provider footer 2023-04-04 17:10:54 +02:00
Davide De Rosa
7e2e4d6caa
Import missing translations (#280) 2023-04-04 17:07:41 +02:00
Davide De Rosa
e050c0c8df
Catch WireGuard parsing errors properly (#279)
They could be reported as OpenVPN errors.
2023-04-03 08:48:18 +02:00
Davide De Rosa
7f9ae7c3bc
Always show "Reconnect" button (#278)
Will do nothing if VPN is disabled. Suboptimal, but consistent
with Mac menu.
2023-04-01 22:46:12 +02:00
Davide De Rosa
33e0ceec04
Lock in background (#275)
There are plenty of situations where the app kind of stays in the
foreground, but goes to .inactive state. Lock screen could be
annoying in those cases.
2023-03-31 23:47:29 +02:00
Davide De Rosa
e9f11d1dbe Attempt beta release 2023-03-25 17:07:58 +01:00
Davide De Rosa
1e0d522010
Drop #available condition on iOS 15 (#274) 2023-03-25 17:05:53 +01:00
Davide De Rosa
6af4bb7e0f
Resolve issues with lock screen (#273)
* Make lock screen a View extension

- Reuse in global theme (apply to all modals)

- Use a ZStack rather than replace (retain content/navigation)

- Share lock state across all LockableView
2023-03-25 16:47:08 +01:00
Davide De Rosa
76084dbd30 Attempt beta release 2023-03-20 15:07:26 +01:00
Davide De Rosa
4eb2ac5e0e
Revert interactive login (#272)
Implementation is buggy/incomplete.

See #259
2023-03-20 15:06:56 +01:00
Davide De Rosa
2d00a05c4c Attempt beta release 2023-03-20 14:14:20 +01:00
Davide De Rosa
5f991d9cc2
Unlock app with biometrics (#271)
* Prevent app lock completely in macOS

* Add missing Face ID metadata for biometrics auth

* Ensure MainActor

* Reword option

* Fix lock logic on launch
2023-03-20 14:12:42 +01:00
Davide De Rosa
325e10845d
Option to lock app when entering background (#270) 2023-03-20 11:00:01 +01:00
Davide De Rosa
7346bfc65c
Add 3D Touch items (#267)
- Enable/Disable VPN

- Reconnect (if enabled)

Move lifecycle operations to SceneDelegate.
2023-03-19 20:04:31 +01:00
Davide De Rosa
4a2dec9c6a Attempt beta release 2023-03-19 16:11:09 +01:00
Davide De Rosa
513b38584d
Upgrade SwiftLint to CI version (#266) 2023-03-19 16:10:40 +01:00
Davide De Rosa
4faeb85295 Attempt beta release
Update bundle in beta script.
2023-03-19 14:42:56 +01:00
Davide De Rosa
fbd32d8b26
Fine-tune SwiftLint (#265) 2023-03-19 14:41:53 +01:00
Davide De Rosa
1dda8dce98 Attempt beta release 2023-03-19 08:45:34 +01:00
Davide De Rosa
17ae9793df
Randomize provider server (#263)
* Pick random server within location

* Add toggle to provider section in profile
2023-03-19 08:19:32 +01:00
Davide De Rosa
c85f3d894e
Restore DNS "Domain" setting (#260) 2023-03-17 22:16:04 +01:00
Davide De Rosa
f06f097f27
Add SwiftLint phase (#262) 2023-03-17 21:55:47 +01:00
Davide De Rosa
cecf64d871
Move Diagnostics view to Profile bottom (#261) 2023-03-17 21:46:53 +01:00
Davide De Rosa
26c34638cb Make category optional in server long description 2023-03-17 18:09:21 +01:00
Davide De Rosa
8f999a462e Do not open long content when XOR is disabled 2023-03-17 17:52:57 +01:00
Davide De Rosa
37354d1b87 Update copyright 2023-03-17 16:56:19 +01:00
Davide De Rosa
2e10aab039
Extend authentication methods (#259)
* Add profile authentication method

- Persistent (default, fallback)

- Interactive (may expire through reconnections)

- TOTP (seed-based) - currently disabled

* Disable on-demand if login is interactive

* Present interactive prompt on VPN toggle
2023-03-17 16:49:35 +01:00
Davide De Rosa
44ccd21536
Fetch full profiles from Core Data (#258)
* Fetch full profiles

* Manage full profiles in organizer
2023-03-16 16:49:09 +01:00
Davide De Rosa
17b01a4dbc Clean up some code
- Drop stale generic

- Improve readability
2023-03-16 15:12:23 +01:00
Davide De Rosa
1b704d7d4a
Decouple VPNManager from TunnelKit (#248)
* Drop VPNManager dependency on TunnelKit

* Hook .masksPrivateData to preferences updates
2022-11-10 07:42:08 +01:00
Davide De Rosa
7ed27558fc
Move refund detection inside ProductManager (#246)
* Detect refunds inside ProductManager

Compare former value and report refund event via subject.

* Hook VPN uninstallation on refund event
2022-11-06 18:51:13 +01:00
Davide De Rosa
ba09dcffa7
Full OpenVPN XOR patch (#245) 2022-11-06 18:08:41 +01:00
Davide De Rosa
c48e35887c Bump version 2022-11-02 22:33:26 +01:00
Dmitry Chirkin
07eaa54f1b
Ukrainian transaltion (#243)
Co-authored-by: Davide De Rosa <keeshux@gmail.com>
2022-11-01 14:20:09 +01:00
Davide De Rosa
e2c976e58d Attempt beta release 2022-10-31 14:18:07 +01:00
Davide De Rosa
baac1f59a8 Bump version 2022-10-31 08:57:05 +01:00
Davide De Rosa
22c28de641
Retain original filename as imported profile name (#240) 2022-10-30 10:22:44 +01:00
Davide De Rosa
e4ec1e642d Attempt beta release 2022-10-29 13:40:50 +02:00
Davide De Rosa
b2bdf23c54 Revisit pull section in OpenVPN Endpoint
- Hide from server diagnostics

- Use a better section title
2022-10-29 13:40:30 +02:00
Davide De Rosa
b2ec7f0422 Attempt beta release 2022-10-29 13:01:18 +02:00
Davide De Rosa
cdc05f0c10 Update TunnelKit
Split IP settings and routes. Now properly handling local routes.
2022-10-29 12:28:27 +02:00
Davide De Rosa
0f04bdcce3 Attempt beta release 2022-10-28 15:42:10 +02:00
Davide De Rosa
b431ce4f05 Attempt beta release 2022-10-27 00:43:41 +02:00
Davide De Rosa
a96fff2add Import new translations 2022-10-26 17:03:54 +02:00
Davide De Rosa
e28bb3db9a Ack new refunds only if refunds list was altered
Fixes #238
2022-10-25 12:48:45 +02:00
Davide De Rosa
e1d8ec6066 Attempt beta release 2022-10-25 09:07:39 +02:00
Davide De Rosa
c0cc10ab94
Restore reconnect action (#232)
* Add "Reconnect" in profile view

* Add "Reconnect" in profile context menu

* Update CHANGELOG

* Restrict "Reconnect" in context menu to iOS 16

SwiftUI does not react properly to state updates.
2022-10-17 17:36:32 +02:00
Davide De Rosa
c7a0a3e4b8 Drop 'non-official' from strings 2022-10-17 13:35:30 +02:00
Davide De Rosa
f6e0caaa73 Implement --remote-random-hostname
- Update TunnelKit

- Show in UI
2022-10-17 09:06:52 +02:00
Davide De Rosa
6c6904255d Bump version 2022-10-17 09:05:27 +02:00
Davide De Rosa
54dc2307e9 Attempt beta release 2022-10-16 10:09:35 +02:00
Davide De Rosa
6a228d29c7 Use specific rounded Mac icon 2022-10-16 10:09:19 +02:00
Davide De Rosa
c345265451 Attempt beta release 2022-10-16 08:36:17 +02:00
Davide De Rosa
54c53707e0
Add app log in Diagnostics screen (#234) 2022-10-16 08:33:32 +02:00
Davide De Rosa
fbc17877b1 Suppress buggy Xcode warnings
@discardableResult annotations became suddenly ineffective.
2022-10-15 22:30:21 +02:00
Davide De Rosa
7f748e6d1e Reuse "Download" for pulled OpenVPN settings 2022-10-15 16:52:58 +02:00
Davide De Rosa
c4ca510b72 Fix app icon inconsistencies
- iOS: Single size

- macOS: Add missing
2022-10-15 16:41:13 +02:00
Davide De Rosa
592b0801e2 Prefix server description with category 2022-10-13 23:07:31 +02:00
Davide De Rosa
6031d0119a Drop assertion on legit intents scenario 2022-10-13 19:10:45 +02:00
Davide De Rosa
f95e4f228d
Implement --route-nopull via TunnelKit (#230)
Use it internally to override server-pushed settings.
2022-10-13 19:09:51 +02:00
Davide De Rosa
5627e6c4a9
Address UI race conditions (#229)
* Make some managers concurrency-safe

- IntentsManager: @MainActor, non-shared, continuation

- SSIDReader: @MainActor, continuation

- Reviewer: main queue, non-shared

* Review wrong use of Concurrency framework

There were background thread calls e.g. in VPNToggle, because
ProfileManager was used inside a VPNManager async call.

Annotate @MainActor wherever a Task involves UI.

* Make main managers MainActor

* Apply MainActor to Mac menus

* [ci skip] Update CHANGELOG

* Set MainActor consistently on Mac menu view models
2022-10-13 08:53:50 +02:00
Davide De Rosa
54dc8a2556 Use MockVPN from TunnelKit
Rather than ad hoc strategy.
2022-10-12 22:37:40 +02:00
Davide De Rosa
f21d05aa53 Add IVPN metadata 2022-10-08 11:33:03 +02:00
Davide De Rosa
07328982d6 Restore PIA provider 2022-10-05 08:18:46 +02:00
Davide De Rosa
63c3ac80b4 Attempt beta release 2022-10-04 22:37:53 +02:00
Davide De Rosa
e2c1a4c686 Fix Oeck eligibility regression 2022-10-04 22:37:53 +02:00
Davide De Rosa
6183433c13 Drop unused libraries 2022-09-30 22:26:56 +02:00
Davide De Rosa
ecb3138817 Attempt beta release 2022-09-25 08:55:15 +02:00
Davide De Rosa
025421aa08 Refactor some alert translations 2022-09-25 08:35:52 +02:00
Davide De Rosa
496d993e3d Attempt beta release 2022-09-23 23:07:40 +02:00
Davide De Rosa
1364d5153e Attempt beta release 2022-09-23 22:57:36 +02:00
Davide De Rosa
a3fd5c40d4 Fix access to hidden OpenVPN.Configuration.Fallback 2022-09-23 22:56:27 +02:00
Davide De Rosa
be6726fbd8 Attempt beta release 2022-09-23 21:56:37 +02:00
Davide De Rosa
f755550974 Increase debug log view size 2022-09-23 09:04:27 +02:00
Davide De Rosa
c2aef310f3 Fix again server ordering 2022-09-21 22:32:33 +02:00
Davide De Rosa
db6f7bdf28 Revisit app metadata and screenshots
- Add script to import localized metadata

- Update app name, subtitle, keywords

- Update App Store description

    - Replace "OpenVPN" with "VPN"

    - Add .conf file extension (WireGuard)

    - Drop PIA (404)

    - Drop trailing notices

- Update README snapshots (Mac versions unused)

- Update App Store screenshots

- Revert to legacy launch screen (SwiftUI method stretches)
2022-09-15 17:41:22 +02:00
Davide De Rosa
38bdbc3697 Move diagnostics to settings 2022-09-12 22:58:37 +02:00
Davide De Rosa
940e0cf8c9 Attempt beta release 2022-09-05 22:35:22 +02:00
Davide De Rosa
5c681d6c3f Import new localizations 2022-09-05 22:34:51 +02:00
Davide De Rosa
3b146b3e0f Fix var syntax 2022-09-05 07:58:20 +02:00
Davide De Rosa
092d4f5de2 Drop return in one-line functions 2022-09-04 20:30:55 +02:00
Davide De Rosa
1005a12a66 Add extended provider location description
- Profile: Below location row

- Menu: On top of server list
2022-09-04 19:23:40 +02:00
Davide De Rosa
7975ddd194 Fix provider header in profile view 2022-09-04 19:23:27 +02:00
Davide De Rosa
b322bde137 Refactor string ids after adding SettingsView 2022-09-03 14:59:17 +02:00
Davide De Rosa
4c4b3ee0c9 Revert to concrete-only managers
Abstraction was overcomplicated. Strategy pattern is enough.
2022-09-03 12:47:40 +02:00
Davide De Rosa
28f7c6bbe8 Restore longer localizations in Settings/About 2022-08-28 09:24:02 +02:00
Davide De Rosa
f36d7596d0 Integrate settings with about screen
Move everything to SettingsView and remove invite actions.
2022-08-27 23:15:51 +02:00
Davide De Rosa
10270b02ee On Mac, copy debug log to pasteboard, do not share
UIActivityViewController is lame.
2022-08-27 22:21:34 +02:00
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
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
0464cd0476 Fix property in launch on login bindings 2022-08-04 23:35:42 +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
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
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
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
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
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
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
Davide De Rosa
bb1a35acea Set full log path relative to App Group container
Also rename from Debug.log to App.log
2022-06-19 13:33:49 +02:00
Davide De Rosa
10b4c321c8 Separate context responsibilities
- Split Core and App context

- Move .shared instantiation to extension

Context may differ by target.
2022-06-16 13:42:53 +02:00
Davide De Rosa
14b42fbea5 Persist managers state to generic key-value store
Move all persisted state out of AppManager to where it really
belongs. To do that, inject a shared KeyValueStore object into
managers that need to persist part of their state in a strongly
typed manner.

Below are persisted states:

- PersistenceManager
    - persistenceAuthor

- ProfileManager
    - activeProfileId

- UpgradeManager (formerly AppManager)
    - didMigrateToV2 (migrate former value)

- VPNManager
    - tunnelLogFormat
    - masksPrivateData

A similar approach is used for app-specific preferences, by using
a strongly typed enum (AppPreference) together with SwiftUI
@AppStorage property wrapper.

Worth moving logging logic into a specific LogManager.

Finally, drop any former view dependency on AppManager, as states
are now accessed through specific managers.
2022-06-16 13:42:37 +02:00
Davide De Rosa
77ff910adc Update and extend copyright notices 2022-06-16 13:42:21 +02:00
Davide De Rosa
b873e5e279 Strip VPNManager initialization 2022-06-02 20:52:51 +02:00
Davide De Rosa
1fd4fd4689 Fix required capabilities 2022-06-01 21:14:21 +02:00
Davide De Rosa
b768284197 Enforce .sidebar on Mac
Drops annoying side inset.
2022-05-24 09:15:27 +02:00
Davide De Rosa
f752594d3c Refactor no autocorrection into raw text style 2022-05-24 08:25:34 +02:00
Davide De Rosa
02213a7c50 Drop truncation hack 2022-05-23 10:10:02 +02:00
Davide De Rosa
83cdd460e4 Attempt beta release 2022-05-21 19:15:48 +02:00
Davide De Rosa
a2d4ed370e Revisit sidebar with per-profile VPN toggles 2022-05-21 19:15:37 +02:00
Davide De Rosa
f700993a52 Refactor global theme consistently
- Return values rather than apply modifiers

- Use .insetGrouped by default

- Reuse .insetGrouped in StyledPicker

- Enforce .sidebar on iPad
2022-05-21 19:04:35 +02:00
Davide De Rosa
f0c5ecd84f Handle configuration errors out of VPN status
On configuration error, retain information about the profile that
triggered the error. For now, present an alert, but with this
information the UI can be easily changed later.
2022-05-21 19:01:49 +02:00
Davide De Rosa
ae748dd1b3 Fix logo name 2022-05-21 18:55:40 +02:00
Davide De Rosa
46a8fb8a74 Delay presentation of imported file modal
Fixes navigation bug on iOS 14 preventing modal from dismissing
via close button.
2022-05-20 16:35:45 +02:00
Davide De Rosa
d6866e8e95 Fix iPad multitasking condition 2022-05-20 11:58:25 +02:00
Davide De Rosa
9735b9ab14 Use consistent case in assets 2022-05-19 10:33:36 +02:00
Davide De Rosa
c88dfc28c4 Simplify a few things of CopySavingButton
- Make saving handler more readable

- Drop unnecessary protocol
2022-05-18 14:10:11 +02:00
Davide De Rosa
ddce671c62 Move theme extensions to non-reusable 2022-05-18 11:33:29 +02:00
Davide De Rosa
b1d77cccbc Attempt beta release 2022-05-18 11:18:57 +02:00
Davide De Rosa
4455f66d10 Detect TestFlight on macOS
Move function to Utils.
2022-05-18 11:16:31 +02:00
Davide De Rosa
160338e62a Add credits in Mac about 2022-05-17 19:57:19 +02:00
Davide De Rosa
4c2a471b9f Attempt beta release 2022-05-17 19:34:13 +02:00
Davide De Rosa
4edecf123b Fix missing accent color in CI
Finally? Basically Xcode build settings were referring to new
color name "AccentColor", while color set in repository was
still "accentColor".

Went unnoticed because Mac filesystem is case-insensitive, which
is why Git never committed the name change in the first place.
2022-05-17 19:34:00 +02:00
Davide De Rosa
6c798c8b19 Bump build 2022-05-17 16:43:14 +02:00
Davide De Rosa
7196aeab0d Trust Ethernet on Mac 2022-05-16 11:19:33 +02:00
Davide De Rosa
f5e01f9768 Wrap/refine a few OS conditionals 2022-05-16 11:19:18 +02:00
Davide De Rosa
16d618df0e Show info menu in ProfileView on iPad/Mac
Use .navigationBarTrailing to avoid artifact on Catalyst (item
relocates when first clicked).

Rename menu files too.
2022-05-16 11:18:58 +02:00
Davide De Rosa
6fddbb8bfc Decouple menus from OrganizerView
Could move .sheet() from parent View to Menu, but no luck with
.fileImporter()
2022-05-16 11:18:58 +02:00
Davide De Rosa
d89130bc3a Reorganize profile menu into computed properties 2022-05-16 11:18:58 +02:00
Davide De Rosa
e87ad06c5d Drop old observables from profiles list
List was being reloaded e.g. on ProductManager receipt updates,
but profile in-app eligibility is not a thing anymore.
2022-05-16 10:59:12 +02:00
Davide De Rosa
137bacb542 Add contextual profile delete
Without confirmation alert though.
2022-05-15 22:24:36 +02:00
Davide De Rosa
35ec73570e Use NEHotspotNetwork to fetch current SSID
Old method did not work on Catalyst.
2022-05-15 22:24:36 +02:00
Davide De Rosa
743facca6b Improve Catalyst appearance
- Revert to more "stable" iPad idiom

- Set accent color the proper way

- Use .tint when available

- Unify navigation style by idiom

- Retain navigation bars in sidebar/detail

- Lighten sidebar appearance

- Fix Menu style (dropdown -> button)

- Use native Picker (dropdown)

- Use switch toggles rather than checkboxes

- Replace .actionSheet with .alert

- Increase minimum row height

CAVEAT: on Mac with iPad idiom, having a Section in .sidebar
produces artifacts. Header keeps changing height for no reason.
Retain Section on iPad multitasking only to not break navigation.
2022-05-15 22:24:36 +02:00
Davide De Rosa
eaaa1fe260 Move device checks to Theme
Drop unused code along the way.
2022-05-15 22:24:36 +02:00
Davide De Rosa
d558edf665 Assume test build if appType == .beta 2022-05-15 21:03:32 +02:00
Davide De Rosa
6c87e0a15b Use gray for profile subtitle 2022-05-15 21:03:32 +02:00
Davide De Rosa
683a8e7d82 Attempt beta release 2022-05-05 11:07:49 +02:00
Davide De Rosa
9984c56084 Drop unnecessary async from migration code
Providers are not fetched at migration time, they only are after
opening a profile (marked non-ready until then).

Still retain Task for migration to be executed asynchronously.
2022-05-05 11:04:12 +02:00
Davide De Rosa
15a4cc8f75 Change some icons in extra menu
- Main icon

- Review icon
2022-05-05 09:58:53 +02:00
Davide De Rosa
b7cccbdd0a Reorg images 2022-05-05 09:51:26 +02:00
Davide De Rosa
cca2dca047 Export providers database in beta 2022-05-05 09:46:12 +02:00
Davide De Rosa
abb23e8234 Fix missing animation loading non-ready profile
When there is no initial active profile.
2022-05-05 08:57:02 +02:00
Davide De Rosa
092233b546 Attempt beta release 2022-05-04 23:16:01 +02:00
Davide De Rosa
bafac12be4 Retain in beta profiles created in production
Drop filter, ability to create profiles in the first place implies
eligibility.
2022-05-04 23:15:12 +02:00
Davide De Rosa
c2676cbdf6 Attempt beta release 2022-05-04 19:03:22 +02:00
Davide De Rosa
40a3c67b1c Observe updates AFTER setting active profile
App disconnects VPN on launch otherwise, because active
profile is still nil. Where was the regression introduced?

Also .dropFirst() to skip initial values, but keep in mind that
if VPN is connected and active profile was not properly persisted,
the app will show the VPN as disabled.
2022-05-04 10:34:28 +02:00
Davide De Rosa
9e9cd018eb Revert "Enable "DNS Settings" capability"
This reverts commit 75650b1f0a.
2022-05-04 09:01:27 +02:00
Davide De Rosa
92caf67876 Replace dimming with different icon 2022-05-03 19:24:46 +02:00
Davide De Rosa
4cb18965c9 Set duplicate as current inside ProfileManager
When setting duplicate as current, batch save original profile and
duplicate in a single call via profilesToSave. This is to avoid a
double call to willUpdateProfiles() when saving Core Data context.

In order to set current profile to one that has not been persisted
yet (the duplicate), we need to resort to a pendingProfiles map
where to look the duplicate up when setting currentProfileId.

Either way, iOS 14 cannot handle updating a "hot" change in a
presented NavigationLink. Changing currentProfileId binding while
in ProfileView messes up navigation completely (multiple push and
pop events). Avoid.
2022-05-03 18:35:19 +02:00
Davide De Rosa
943bce5515 Bind navigation to ProfileManager directly
- Do the profile loading inside the model

- Allow setting current profile to a transient profile

- Check .placeholder before saving current profile

XXX: avoid loading active profile on iPad portrait.
2022-05-03 18:35:17 +02:00
Davide De Rosa
7036ca5f41 Fix handling of non-ready profiles
- Omit title while isLoading, to not show former profile name

- Animate on isLoading
2022-05-03 15:54:19 +02:00
Davide De Rosa
b9248cbb89 Animate profile removal
Fade into WelcomeView.
2022-05-03 15:44:47 +02:00
Davide De Rosa
ca49d8bfc6 Increase vertical padding in profile rows 2022-05-03 15:43:55 +02:00
Davide De Rosa
8230666ab2 Only use wrapping Section to fix iPad multitasking 2022-05-03 15:43:15 +02:00
Davide De Rosa
3c0e511e84 Split again OrganizerView and ProfilesList
On iOS 14, Organizer scrolls abruptly on profile selection. It
looks like this was introduced by merging ProfilesList into
OrganizerView.

Try to revert merge to split observation responsibilities.

Drop unused AppManager in +Scene along the way.
2022-05-03 14:40:41 +02:00
Davide De Rosa
93abaf538b Simplify redundant parts of ProfileManager
- Drop overthought activeHeader

- Drop willUpdateCurrentProfile, use observable

- Drop willUpdateActiveId, observe value publisher
2022-05-03 14:36:55 +02:00
Davide De Rosa
e0e3e03781 Fix missing image on iOS 14 2022-05-03 12:46:55 +02:00
Davide De Rosa
d3bd41b251 Do not blink circle while connected 2022-05-02 10:56:40 +02:00
Davide De Rosa
cc681dfeab Refine profile icons and animate if connected
Assume 3 different profile states:

- Active and connected
- Active
- Inactive
2022-05-02 10:48:12 +02:00
Davide De Rosa
576eb1512a Fix slow active profile selection on launch
Regression due to missing .stack navigation style basically.

Restore .onAppear() on NavigationLink.
2022-05-02 09:53:18 +02:00
Davide De Rosa
75650b1f0a Enable "DNS Settings" capability
Maybe fixes #182
2022-05-02 00:04:56 +02:00
Davide De Rosa
63c2ab6bbf Fix missing server permissions for WireGuard
Prevented working on Catalyst.
2022-05-02 00:03:55 +02:00
Davide De Rosa
87f2ebfd9e Attempt beta release 2022-05-01 20:44:17 +02:00
Davide De Rosa
acbc1980f9 Ignore non-existing active profile 2022-05-01 20:40:20 +02:00
Davide De Rosa
472b5e4b41 Fix active profile flickering on first launch
Move .onAppear() handler to main view.
2022-05-01 20:16:05 +02:00
Davide De Rosa
3571c7db35 Reduce vertical padding in profile rows 2022-05-01 20:06:03 +02:00
Davide De Rosa
14dd920ef1 Drop unused animate on appear delay 2022-05-01 19:52:33 +02:00
Davide De Rosa
48d499569b Use block versions of Section header/footer 2022-05-01 19:48:24 +02:00
Davide De Rosa
d8b19b952a Add missing translations 2022-05-01 19:34:43 +02:00
Davide De Rosa
171c1e1dd4 Omit wrapping Section on Mac 2022-05-01 19:30:56 +02:00
Davide De Rosa
cfc0d4f572 Restore active profile on top
Flashing on activation was caused by VPNManager.disable() in
ProfileView+VPN, because by setting lastError to nil it would
notify a change to ProfileRow (via VPNStateView) during the
profile row activation animation. That caused the flicker.

Instead, disable VPN first, then start the animation.

Anyway, avoid clearing a nil lastError.
2022-05-01 19:19:43 +02:00
Davide De Rosa
edc7cdf045 Merge List into OrganizerView
- Restore wrapping Section as it seems to fix multitasking

- Hide profiles section if empty
2022-05-01 19:19:31 +02:00
Davide De Rosa
8003b4a92d Observe currentProfile in ProfileView
ProfileView is not interested in changes in other profiles
notified by ProfileManager. Set isLoading inside
ObservableObject for observable to be self-contained.

Loses observation of profile deletion, but dismiss on removal is
actually handled by OrganizerView, not ProfileView.

Also drop unused presentationMode.
2022-05-01 19:14:34 +02:00
Davide De Rosa
9af67e12ce Drop profiles Section wrapper 2022-04-29 19:51:18 +02:00
Davide De Rosa
0047d095fb Adjust navigation style to all devices
- Mac
    - Drop all styles
    - Tweak hide title bar
    - Hide navigation bar

- Restore single section for all profiles
    - Allows using NavigationLink safely
    - Indirectly fixes multitasking
    - Retains selection on profile activation
    - Clean up presentActiveProfile

- Leave active profile in its position
    - Fixes Mac flashing row selection on profile activation

- Unify profile row appearance
    - Use fixed .headline font
    - Add subtitles to inactive profiles
    - Use padding rather than fixed row height

CAVEATS:

- Do not preselect active profile on iPad launch, as doing so
seems to present two ProfileView on top of each other, one from
MainView and one from the NavigationLink.

- Do not touch .listStyle() of master view, as it seems to break
navigation esp. in iPad multitasking.
2022-04-29 19:29:47 +02:00
Davide De Rosa
4d13d8bf6b Do not observe AppManager, just use for migrations 2022-04-29 18:58:07 +02:00
Davide De Rosa
fc784ffeb1 Import new translations
3 phrases still missing.
2022-04-28 22:47:07 +02:00
Davide De Rosa
2c2e794b00 Revert async loadCurrentProfile()
Make action sync, but internally async (makeProfileReady). If not
doing so, UI on launch will not be able to show active profile
immediately. WelcomeView would appear for a moment.

Observe isReloadingCurrentProfile.

See 2b1efb8fec
2022-04-28 19:00:36 +02:00
Davide De Rosa
1ef2b8c7a7 Set activeProfileId immediately
Otherwise on app launch, active profile is rendered in 2 steps.
2022-04-28 17:56:28 +02:00
Davide De Rosa
03cb05da7e Do not disable providers while updating index 2022-04-27 23:08:46 +02:00
Davide De Rosa
2aa4008a08 Animate profile removal
Could only notice difference on iPad.
2022-04-27 18:32:44 +02:00
Davide De Rosa
d4484f3307 Simplify layout of in-app products 2022-04-27 18:32:44 +02:00
Davide De Rosa
2b1efb8fec Make load*Profile() async
- Handle Task in consumers

- Drop makeReady, always make loaded profile ready

- Rename misleading loadProfile() to profileEx()
2022-04-27 17:13:03 +02:00
Davide De Rosa
02b2e3194e Add duplicate to profile menu
Contextually switch current profile to duplicate.
2022-04-27 16:59:33 +02:00
Davide De Rosa
496abc6c89 Move Siri on top of menu 2022-04-27 16:54:07 +02:00