Commit Graph

1099 Commits

Author SHA1 Message Date
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