Commit Graph

122 Commits

Author SHA1 Message Date
Davide
e88da17ad8
Fix help captions of attribute icons 2025-02-11 23:08:05 +01:00
Davide
c2a8db1cdb
Optionally resort to CloudFlare when no DNS settings are provided (#1165)
Fixes #1152
2025-02-11 18:50:02 +01:00
Davide
cc8a500dab
Prevent save profile without active modules (#1164)
A further improvement over #1163 with the same purpose. That is: if a
profile won't connect, don't let the user create/save it in the first
place.
2025-02-11 17:45:00 +01:00
Davide
c189668f3b
Ignore cancellation on "Restore purchase" 2025-02-11 17:21:53 +01:00
Davide
48c4bf4192
Add tip to suggest how to build profiles (#1163)
Close to the "Modules" +/- area.
2025-02-11 12:22:36 +01:00
Davide
23e8c56b1b
Revert erroneous submodule commit 2025-02-11 12:12:40 +01:00
Davide
c303e948ae
Fix compile error on iOS
Caused by 36d9ac59b8
2025-02-11 11:39:10 +01:00
Davide
6384d435dd
Group connection and settings modules in "Add module" (#1162)
Useful to introduce the concept of "Connection" modules.
2025-02-11 11:09:51 +01:00
Davide
36d9ac59b8
macOS: Fix empty space in "Delete profile"
Show nothing when profile is new.
2025-02-11 10:45:03 +01:00
Davide
40bafcfbb7
Fix compile errors on TV 2025-02-11 00:28:58 +01:00
Davide
21c23199a9
Use always "OK" in paywall confirmation 2025-02-11 00:22:54 +01:00
Davide
84791c4502
OpenVPN: Fix random crashes during negotiation (#1161)
Tie OpenVPN internals to the same global actor OpenVPNActor.

Regression in #1094
Fixes #1137
2025-02-11 00:21:59 +01:00
Davide
58be1cf8d8
Add "Delete profile" in profile editor (#1160)
With confirmation dialog.
2025-02-10 23:59:03 +01:00
Davide
3698b19f26
Unpin active profile from preferences (#1159)
Also with trailing swipe in List (iOS).
2025-02-10 22:17:41 +01:00
Davide
f7ac420bfe
Use "OK" rather than "Cancel" in beta alert 2025-02-10 21:21:31 +01:00
Davide
4a23ddc53e
Reword "Select a provider" to "No provider"
The picker choice is not just a placeholder but allows to
import a file.
2025-02-10 20:37:48 +01:00
Davide
9d90002294
macOS: Add "Reconnect" and "Disconnect" from menu (#1154)
Fixes #1069
2025-02-10 20:35:04 +01:00
Davide
b355a3a098
Rework the app colors for upgrade icons (#1158)
- Restore the default accent, but extend it to toggles on iOS
- Keep the "gold" color for the upgrade icon
- Replace the upgrade icon with the universally understandable lock icon
2025-02-10 20:34:41 +01:00
Davide
914520009a
Show the list of features included in each product (#1157)
List product features inline in the paywall. Inside the list, highlight
the required features that originated the paywall.
2025-02-10 20:18:56 +01:00
Davide
954475e117
macOS: Perform provider server action on click country (#1155)
Similar to #1117
2025-02-10 00:29:14 +01:00
Davide
4d970b6ac7
Rework in-app purchases and paywalls (#1156)
Fixes #1153
2025-02-10 00:27:42 +01:00
Davide
4619a0760b
Only show 'Verifying...' message in beta 2025-02-08 18:19:43 +01:00
Davide
1c8f758ff3
Fix German translations 2025-02-08 12:28:17 +01:00
Davide
b018e670ac
Fix behavior of "Including" on-demand policy (#1151)
Activate the VPN on the specified networks, and do nothing on the other
networks. This will NOT disconnect the VPN if it's been activated on a
non-included network.

NetworkExtension seems incapable of doing that, the bug came from a
wrong code expectation.

Originally reported here:

-
https://www.reddit.com/r/passepartout/comments/1idruci/ondemand_not_working_as_expected/
-
https://www.reddit.com/r/passepartout/comments/1bjgwy9/issues_with_ondemand_include_vs_exclude/
2025-02-08 12:18:22 +01:00
Davide
18c2b85096
Wrap rather than truncate long profile names (#1150)
Better trade-off than the fixed list/grid height now that the animations
are off.


https://www.reddit.com/r/passepartout/comments/1ik8tm2/comment/mbn1o1h/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
2025-02-08 12:02:26 +01:00
Davide
ce77b4fc6a
Improve the UX of profile editing and management (#1149)
Restart from the v2 flow most users are familiar with.

- Restore the global v2 accent
- Restore the per-profile toggles
- Single tap to edit a profile
- Reuse the same chevron for profile and module navigation
- Improve the iCloud/TV section and rename it to "Synchronization"
- Drop the misleading moon icon from the "Keep alive on sleep" toggle
- Drop the marginal "Enable"/"Disable" action from context menus
- Drop the grid cell highlighting, now marginal with toggles
- Drop the complexity of `nextProfileId`

Ultimately, rework `TunnelToggleButton` into `TunnelToggle` for better
reuse across all platforms.

Things left to improve:

- The duplication of the active profile on top has not changed, but the
toggles may make it more visually apparent
- The "Inactive" subtitle in disabled profiles is there for balance as
it keeps rows and cells of the same height, but it serves no real
purpose
- Access to secondary actions (e.g. provider server, credentials)
- Use of TipKit for less intuitive flows (e.g. context menus, building a
profile from scratch)

Fixes #1111
2025-02-08 11:57:14 +01:00
Davide
b379d5c61c
Import profiles with on-demand enabled for stability (#1148)
Retain v2 behavior.
2025-02-08 10:52:29 +01:00
Davide
d51c60c5c8
Fix "No profiles" message flashing on launch (#1147)
Due to a regression in #1135
2025-02-07 17:58:23 +01:00
Davide
eb32aed2a4
Follow tunnel status from current profile (#1146)
In preparation for #218, when there will be "multiple current profiles",
i.e. the enabled profiles in the OS settings.
2025-02-07 16:42:00 +01:00
Davide
bb21f5be05
Fix unused variable warning 2025-02-07 14:44:44 +01:00
Davide
470585b4c6
OpenVPN: Fix issue with empty DNS servers 2025-02-07 01:19:03 +01:00
Davide
98160c24c2
OpenVPN: Fix regression in default routes (#1145)
Similarly to #1136, inject IPModule into OpenVPN .routingPolicies
because NetworkSettingsBuilder relies on it.
2025-02-07 01:15:21 +01:00
Davide
e8ffca9d50
Fix migration of DNS settings (#1144)
In some cases, the migration process may insert a DNS module without
servers. Do not add it at all.
2025-02-07 01:15:03 +01:00
Davide
f34dcd99f8
Bump version 2025-02-06 15:20:28 +01:00
Davide
6b2ba28728
Restore "Keep alive on sleep" feature (#1143)
Closes #1112
2025-02-06 14:57:53 +01:00
Davide
9e98f4c7ec
Drop unused Kvitto dependency (#1142) 2025-02-05 20:26:19 +01:00
Davide
9d9c738b23
Improve the text density of purchase alerts 2025-02-05 16:49:26 +01:00
Davide
dfdf338c3a
Fix typo in 'Verifying...' 2025-02-05 16:39:28 +01:00
Davide
bc5d08aed7
tvOS: Inform that all apps must run version 3.0.0+ 2025-02-05 16:07:13 +01:00
Davide
91823f1572
Review upgrade icons (#1141)
- Add to "General" module on macOS
- Restore in profiles list/grid, removed in #1139
2025-02-05 15:38:25 +01:00
Davide
6ba8b32bef
Inform if beta build in Diagnostics 2025-02-05 15:16:52 +01:00
Davide
965c39ab51
iOS: Suggest that profile modules are editable (#1140)
Fixes #1080
2025-02-05 13:39:28 +01:00
Davide
d6c2a7f58c
Allow graceful period to work around slow receipt validation (#1139)
#1070 is very tricky. When the device boots, StoreKit operations seem to
be severely affected by on-demand VPN profiles. Slowdowns are huge and
unpredictable, as per my [report on the Apple
forums](https://developer.apple.com/forums/thread/773723). I found no
easy way to work around the chicken-and-egg situation where the VPN
requires StoreKit validation to start, but StoreKit requires network
access.

On the other hand, without StoreKit validations, the on-demand tunnel
starts on boot just fine, and so does the app. No eternal activity
indicators. StoreKit is clearly the culprit here.

Therefore, below is the strategy that this PR implements for a decent
trade-off:

- Configure a graceful period for the VPN to start without limitations.
This is initially set to 2 minutes in production, and 10 minutes in
TestFlight. Postpone StoreKit validation until then.
- After the graceful period, StoreKit validation is more likely to
complete fast
- At this point, paying users have their receipts validated and the
connection will silently keep going
- Non-paying users, instead, will see their connection hit the "Purchase
required" message

On the UI side, adjust the app accordingly:

- Drop the "Purchase required" icon from the list/grid of profiles
- The paywall informs that the connection will start, but it will
disconnect after the graceful period if the receipt is not valid
- Add a note that receipt validation may take a while if the device has
just started

This PR also introduces changes in TestFlight behavior:

- Profiles can be saved without limitations
- Profiles using free features work as usual
- Profiles using paid features work for 10 minutes
- Eligibility based on local receipt is ignored (deprecated in iOS 18)

Beta users may therefore test all paid features on iOS/macOS/tvOS for 10
minutes. Until now, paid features were only available to paying iOS
users and unavailable on macOS/tvOS. The tvOS beta was, in fact,
completely useless.

The downside is that paying iOS users will see beta builds restricted
like anybody else. I'll see if I can find a better solution later.
2025-02-05 13:00:42 +01:00
Davide
f58a469e0b
Update credits 2025-02-03 10:49:34 +01:00
Davide
3503f86eee
Fix more German translations 2025-02-03 10:29:27 +01:00
Davide
59ac302eb3
Mention in paywall that all purchases support "Family Sharing" (#1138)
Fixes #1130
2025-02-03 10:27:18 +01:00
Davide
e799ae9ae3
Update library 2025-02-03 10:01:14 +01:00
Davide
4b4e26b69e
Fix logic of migrated "Routing" modules (#1136)
OpenVPN is fine, but WireGuard requires included routes to also be
injected into AllowedIPs.

Fixes #1128
2025-02-03 10:00:22 +01:00
Davide
24d7e51344
Update library and bump 2025-02-03 08:56:33 +01:00
Davide
185fec8749
Reword for consistency 2025-02-03 08:43:48 +01:00