Commit Graph

31 Commits

Author SHA1 Message Date
Davide
f7013a98a9
Separate App/Tunnel responsibilities ()
Sort out the increasing mess coming from:

- AppContext*
- Dependencies
- Shared*

by doing the following:

- Keep in the "Shared" folder only the entities actually shared by
App/Tunnel
  - Create TunnelContext
  - Move AppContext and related to the App/Context folder
  - Move TunnelContext and related to the Tunnel/Context folder
- Delete Shared+* extensions, use AppContext/TunnelContext singletons
from the app
- Create a Dependencies factory singleton to create entities in a single
place
  - Split extensions by domain
- Make it clear with `func` vs `var` when a dependency method returns a
new instance
2024-12-08 18:56:39 +01:00
Davide
6cc86e8668
Import v3 code ()
Closes 
2024-09-23 15:02:26 +02:00
Davide De Rosa
24b08c4b50
Update restricted profile except expiration ()
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
64d1131fdd
Update copyright
Closes 
2024-01-14 14:36:55 +01:00
Davide De Rosa
2e989fd127
Rewrite wrong refund logic ()
So, if both a purchase and a refund of feature `.foobar` existed,
whatever the dates, the purchase was incorrectly discarded.

Fixes , fixes 
2024-01-10 18:48:38 +01:00
Davide De Rosa
5c5697762b
Add minimal TV app
Closes 
2023-12-31 01:21:38 +01:00
Davide De Rosa
239d3e6853
Fix in-app eligibility in VPN () 2023-12-23 07:59:23 +01:00
Davide De Rosa
a0da930d98
Refactor and test ProductManager ()
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
12c08c132c
Update metadata and translations () 2023-10-10 23:00:19 +02:00
Davide De Rosa
7de000148f
Level up to strict Concurrency ()
Trigger and resolve some additional Concurrency issues.
2023-09-10 20:36:52 +02:00
Davide De Rosa
f32c6f8fde
Retain persistence objects in manager ()
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
0872c27fce
Move CloudKit logic to PersistenceManager ()
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
a38e3fed7a
Look up TestFlight flag asynchronously ()
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
791b6be7d5
Allow erasing remote iCloud store ()
Convenient for those with privacy concerns.
2023-09-09 21:52:32 +02:00
Davide De Rosa
a4ca8cc996
Support iCloud sync as an option ()
Sync will be enabled on upgrade for consistency with current behavior,
and disabled for new installs.

Fixes 
2023-09-09 20:29:04 +02:00
Davide De Rosa
b4b2db176c
Fix .sink retain cycles () 2023-09-08 16:20:01 +02:00
Davide De Rosa
bf70c7c59a
Reorganize app folders () 2023-07-04 22:29:43 +02:00
Davide De Rosa
278efaf347
Refactor domain errors () 2023-07-02 12:51:50 +02:00
Davide De Rosa
7ccb10febc
Rethink library architecture () 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
325e10845d
Option to lock app when entering background () 2023-03-20 11:00:01 +01:00
Davide De Rosa
f06f097f27
Add SwiftLint phase () 2023-03-17 21:55:47 +01:00
Davide De Rosa
37354d1b87 Update copyright 2023-03-17 16:56:19 +01:00
Davide De Rosa
7ed27558fc
Move refund detection inside ProductManager ()
* 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
54c53707e0
Add app log in Diagnostics screen () 2022-10-16 08:33:32 +02:00
Davide De Rosa
5627e6c4a9
Address UI race conditions ()
* 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
f8c6b6580d Encapsulate launchesOnLogin AppPreference from Mac 2022-07-18 08:03:24 +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
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