Commit Graph

1513 Commits

Author SHA1 Message Date
Davide
0d411a390f
Fix launch screen background in dark mode 2025-02-15 08:06:30 +01:00
Davide
d8a1053dfd
Bump version 2025-02-13 16:14:28 +01:00
Davide
8e5141f03e
Drop unused and conflicting PrimaryColor 2025-02-13 16:14:06 +01:00
Davide
c5a86505b6
Bump version 2025-02-13 15:58:00 +01:00
Davide
be524aaf68
iOS: Add dark and tinted icons (#1170)
For consistency:

- Restore v2 accent
- Adjust background in launch, lock, and version screens

Fixes #603
2025-02-13 09:17:55 +01:00
Davide
afee4037e2
Fix UI tests for screenshots (#1168)
Outdated after reworking the UI. Some fixes were also needed because:

- [WireGuardModule requires a
configuration](https://github.com/passepartoutvpn/passepartout/pull/1164)
- [OpenVPNModule is interactive when no credentials are
set](https://github.com/passepartoutvpn/passepartout/pull/1104)
- Mock profile had a wrong category ("" → "default")
2025-02-13 08:20:56 +01:00
Davide
205a005f95
Bump version 2025-02-12 14:09:31 +01:00
Davide
28ad7dcd6f
Bump version 2025-02-11 19:02:23 +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
5b6a689afa
Bump version 2025-02-11 00:29:18 +01:00
Davide
c0a83675d2
Bump version 2025-02-11 00:23:45 +01:00
Davide
140d37737f
Bump version 2025-02-11 00:04:13 +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
4d970b6ac7
Rework in-app purchases and paywalls (#1156)
Fixes #1153
2025-02-10 00:27:42 +01:00
Davide
d58a4e8a35
Bump version 2025-02-08 12:29:22 +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
c584f68492
Bump version 2025-02-07 09:39:57 +01:00
Davide
f34dcd99f8
Bump version 2025-02-06 15:20:28 +01:00
Davide
33866031dc
Bump version 2025-02-05 17:07:08 +01:00
Davide
6778f85976
Bump version 2025-02-05 16:13:57 +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
a8e8e6edfb
Bump version 2025-02-03 10:38:00 +01:00
Davide
178dd08d5f
Bump version 2025-02-03 10:32:04 +01:00
Davide
24d7e51344
Update library and bump 2025-02-03 08:56:33 +01:00
Davide
0132aa79cc
Delay profile verifications (#1135)
Fixes #1070
2025-02-03 01:18:39 +01:00
Davide
5bf53ff2b1
Bump version 2025-01-29 16:56:04 +01:00
Davide
c1d7fa1b3c
Update UITests after #1107 2025-01-29 16:52:55 +01:00
Davide
8d269e7113
Reuse provider entities for more than VPN (#1107)
Rename entities/views, and decouple provider templates from built
configurations. Reuse ProviderServerCoordinator.

This is in preparation for #507
2025-01-29 12:53:23 +01:00
Davide
a7e67be3fd
macOS: Prevent main window from being minimized indefinitely
Fixes #1114
2025-01-29 01:44:42 +01:00
Davide
ec2b213b7c
Bump version 2025-01-27 12:33:14 +01:00
Davide
cd76c39102
Bump version 2025-01-22 22:35:37 +01:00
Davide
f76b1e26ba
Bump version/build 2025-01-22 18:18:42 +01:00
Davide
23dc416eb7
Bump version 2025-01-20 21:38:20 +01:00
Davide
a3281042f8
Fix iCloud/TV sync not working with Advanced Data Protection (#1090)
The ubiquity token does not seem to be a reliable source of truth for
the state of CloudKit. Faced with tvOS, now also with Advanced Data
Protection. It is nil, but CloudKit actually works.

Therefore, start a CloudKit container regardless of the ubiquity token.

The only downside is that the iCloud/TV icons of a profile will now only
appear crossed in case of in-app ineligibility, but this is in favor of
better functionality.
2025-01-20 21:37:26 +01:00
Davide
70c4b3ef7d
Bump version 2025-01-20 14:51:36 +01:00
Davide
bb49ccaffb
Bump version 2025-01-20 11:33:30 +01:00
Davide
afd6263460
Bump version 2025-01-19 12:36:37 +01:00
Davide
524243ebaa
Fix error alert when importing files from external apps (#1078)
URL.startAccessingSecurityScopedResource() fails in that case, but
permission is not required at all.

Could reproduce by importing .ovpn file from a Telegram chat.
2025-01-19 11:59:20 +01:00
Davide
0f7530645c
Bump version 2025-01-18 18:15:20 +01:00
Davide
8972d9773e
Resolve several issues in bump script/lane (#1075)
- Simplify build/version updates by moving MARKETING_VERSION and
CURRENT_PROJECT_VERSION to Config.xcconfig
- Provide Ruby (for fastlane) and Bash (for CI) versions of
xconfig-get/set
- Copy release notes atomically inside the lane to guarantee they are
included in the version commit
- Add -nt to skip the build tag
2025-01-18 18:13:54 +01:00
Davide
c387b8ddfd
Fix metadata as per App Review (#1061)
- Add links to EULA and privacy policy in the app description
- Update copyright in metadata
2025-01-15 20:48:47 +01:00
Davide
4e43c14cc6
Update copyright 2025-01-15 20:22:52 +01:00
Davide
e41ac446c6
Rename submodule to PassepartoutKit-Source 2025-01-15 15:22:18 +01:00
Davide
7b8dbfe84a
Minimize dependencies of VPN implementations (#1057)
### OpenVPN

- Make CPassepartoutCryptoOpenSSL agnostic of PassepartoutKit
- Move Allocation/ZeroingData from PassepartoutKit to package for
internal use
  - Rename ZeroingData.count to .length for consistency with NSData
  - Duplicate some Data manipulation code in CryptoOpenSSL
- Retain a simplified version of ZeroingData in PassepartoutKit
(AutoerasingData)

### WireGuard

- Make WireGuardKit imports `internal`
2025-01-15 09:39:58 +01:00
Davide
1942b82ebb
Rework App+Kit as monorepository (#1055)
Simplify development and maintenance immensely by making this a
monorepository:

- Convert PassepartoutKit and VPN bindings to local packages
  - OpenVPN/OpenSSL
  - WireGuard/Go
- Make PassepartoutKit available via
  - Source submodule for production (private)
- [Binary XCFramework for
development](https://github.com/passepartoutvpn/passepartoutkit)
 - Add PassepartoutKit Demo in root
   - Deploy package later
2025-01-13 12:26:53 +01:00
Davide
46206ae76f
Restore server entitlement for WireGuard to work on macOS (#1053)
The entitlement "clean-up" was pushed by the App Review, but this had
horrible consequences apparently.

In fact, the WireGuard Go adapter is unable to bind the UDP socket
without the "server" entitlement, making WireGuard on macOS silently
broken:

```
Unable to update bind: listen udp4 :0: bind: operation not permitted
```

Regression in #1042
2025-01-08 00:52:22 +01:00
Davide
ea8176047d
Read user level in tunnel too 2025-01-06 21:50:38 +01:00
Davide
24ddb270aa
Skip backup repository on simulator (#1048)
ProfileManager is behaving crazy because on simulator local and backup
repository point to the same container.
2025-01-04 10:45:51 +01:00
Davide
fabb4c664c
Verify tunnel profile periodically (#1047)
Eligibility may have changed during connection. Repeat verification
every 10 minutes.
2024-12-31 00:48:54 +01:00
Davide
3706268bf9
Drop broken macOS code to get SSID (#1042)
Related to #497
2024-12-23 22:47:33 +01:00