Davide
0221aea6b6
Move some profile integrity checks to library ( #739 )
...
They really belong to Profile.Builder
2024-10-16 09:50:26 +02:00
Davide
3de75e476b
Prevent iPad dismiss when tapping outside ( #737 )
...
The user may tap outside accidentally while editing a profile, thus
losing all the edits. Avoid that.
Fixes #734
2024-10-16 08:56:58 +02:00
Davide
acf066571a
Fix some key things about providers UI ( #736 )
...
Fixes #703
2024-10-16 08:53:16 +02:00
Davide
9656e5ed29
Filter servers with category/country of selected server ( #735 )
...
And use Task for blocking actions in filters.
2024-10-15 23:48:27 +02:00
Davide
aeaf0a6eed
Some fixes
...
- Import remote profiles off the main thread
- Drop meaningless Published
- Add a FIXME to move Profile build logic to library
2024-10-15 23:37:50 +02:00
Davide
8cdd20dfb4
Fix animation in OpenVPNView
2024-10-15 21:39:47 +02:00
Davide
ed28126cf7
Rework OpenVPN view with provider modifiers ( #733 )
...
Improve rendering and work around some SwiftUI bugs, e.g. with .menu
Picker on iOS (use .navigationLink instead).
Here goes the hierarchy bottom-up:
- ProviderPicker: a Picker wrapper built around ProviderManager
- ProviderContentModifier: adds a ProviderPicker on top and replaces the
content with a set of provider selectors when a provider is selected
- VPNProviderContentModifier: wrapper for ProviderContentModifier that
adds a VPN server selector
- OpenVPNView: provides a view of specific OpenVPN settings, and adds a
credentials selector to the provider/server selectors provided by
VPNProviderContentModifier
2024-10-15 21:34:02 +02:00
Davide
87c7d63678
Redo provider managers lifecycle ( #732 )
...
Update library with more efficient choices for interacting with the
providers API.
Fixes #731
2024-10-13 11:36:34 +02:00
Davide
a5d4f6aee5
Unify library iOS target to 15
2024-10-12 15:51:00 +02:00
Davide
9769a151db
Provider configuration is persisted into module ( #730 )
...
When e.g. a OpenVPNModule is created without a configuration and a
provider/server is then selected, the ProfileProcessor class serializes
the profile with the provider configuration injected. When the module is
re-edited, we can see the provider server configuration in the module
after selecting "None" as provider.
Instead, validate the provider modules in ProfileProcessor, but generate the provider configuration on the fly in the tunnel.
2024-10-12 13:19:46 +02:00
Davide
8c76f33d48
Fix copy UUID in correct format
2024-10-11 19:45:58 +02:00
Davide
208198c3f8
Create OpenVPN module without a configuration ( #729 )
...
Update library to allow optional VPN configurations. This in turn allows
a module to be used with a provider, where the configuration is
generated on the fly.
2024-10-11 19:11:42 +02:00
Davide
c96e7e9d6e
Define NE configuration title format in Constants
2024-10-11 17:57:31 +02:00
Davide
619ff807fd
Drop unused code in AppContext
2024-10-11 17:53:41 +02:00
Davide
f2a141a189
Purge stale NetworkExtension/keychain data ( #728 )
...
- [x] NE managers were not deleted when unable to be decoded to a
profile
- [x] Keychain items were not deleted on profile removal
- [x] Perform clean-up on app launch
- [x] Perform clean-up on app active
Prematurely merged as #727 then reverted, this is the complete PR.
2024-10-11 17:48:37 +02:00
Davide
1aa393ee02
Move feature mapping to a single file ( #726 )
...
Do not scatter sensitive data.
2024-10-11 04:17:17 +02:00
Davide
8f6192c2b6
Fix extra team prefix in keychain group ( #721 )
...
Team ID already included in .xcconfig
Fixes #720
2024-10-11 03:45:20 +02:00
Davide
9449a02b77
Add meaningful prefix to keychain entries ( #724 )
...
Hard to find in keychain, add "Passepartout: " prefix to profile name.
2024-10-11 00:31:32 +02:00
Davide
a0b9529870
Delete keychain entry on profile deletion
2024-10-11 00:25:26 +02:00
Davide
da87ca698a
Add initial support for providers ( #723 )
...
Initial integration of providers via API:
- Generic views and modifiers for provider/server selection
- Add in OpenVPNView
- Prepare in WireGuardView
Also:
- Introduce ProfileProcessor, move IAP processing there
- Move .asModuleView() to ModuleViewModifier for proper animation
- Use .themeModal() rather than .sheet()
2024-10-11 00:24:06 +02:00
Davide
5c91eb4bf1
Review Constants
...
- Move container names out of Bundle
- Add API web services timeout
2024-10-10 19:29:38 +02:00
Davide De Rosa
6d6eef43c9
Rename
2024-10-10 16:24:09 +02:00
Davide
d589f1162d
Reorganize shared objects ( #716 )
...
Mainly:
- Aggregate shared/mock entities in less scattered files
- Review package dependencies
Also:
- Decouple ProfileRepository from Core Data Repository in UtilsLibrary
(filters done by ProfileManager)
2024-10-10 16:20:36 +02:00
Davide
0aac8cd9f3
In-place NetworkExtension profiles ( #715 )
...
Profiles are being maintained in two places:
- Core Data
- NetworkExtension
Core Data is redundant for local profiles, so make NetworkExtension the
only source of truth.
2024-10-10 16:03:02 +02:00
Davide
6d479a7059
Render multiple translators in Credits ( #701 )
2024-10-09 21:42:42 +02:00
Davide
df2fc54044
Render profile UUID as quartets ( #700 )
...
Easier to read.
2024-10-09 21:40:56 +02:00
Davide De Rosa
635700c195
Revisit OpenVPN view
...
- Move pull section below
- Add IPv6 to preview
2024-10-06 19:22:45 +02:00
Davide De Rosa
7078e5c435
Unrestrict previews
2024-10-06 19:22:44 +02:00
Davide
504bcbdbd2
Refactor and move entities around ( #698 )
...
Do some housekeeping in AppLibrary/AppUI.
2024-10-06 19:19:16 +02:00
Davide
f4505d0efd
Refactor ProfileEditor to leverage ProfileType ( #689 )
...
Closes #688
2024-10-06 13:41:02 +02:00
Davide De Rosa
8b5096ab69
Make copiable text multiline by default
2024-10-05 00:17:08 +02:00
Davide De Rosa
d2f44d3ee2
Fix new profiles not being saved
...
Broken in #685
2024-10-04 21:28:56 +02:00
Davide De Rosa
38aa83760f
Reword on-demand
2024-10-04 21:06:03 +02:00
Davide
f66193cf78
Several fixes in ProfileManager ( #685 )
...
- [x] Search not accounted for when reloading profiles
- [x] Remote profile being saved twice
- [x] Add some logging
2024-10-04 20:58:11 +02:00
Davide
d14f22d4a1
Use gear icon for iOS About ( #684 )
...
Resolve a discrepancy between iPhone and iPad. Leave the info icon on
macOS, where Settings are separate.
2024-10-04 18:27:09 +02:00
Davide De Rosa
671dc7f77c
Do not import remote profiles on first load
2024-10-04 15:50:45 +02:00
Davide De Rosa
eea5486563
Fix crash on "Report issue"
2024-10-04 15:48:13 +02:00
Davide De Rosa
1b5e123fa6
Use .compact style in list based on size class
2024-10-04 11:39:50 +02:00
Davide De Rosa
e75c264258
Go multiline rather than truncate copiable
...
Fixes #682
2024-10-04 10:40:18 +02:00
Davide De Rosa
71149e87d3
TODO -> FIXME
2024-10-04 10:30:14 +02:00
Davide
5fb6f4f4d2
Refactor static functions/entities in Library ( #679 )
...
Reduce the impact of hidden dependencies on BundleConfiguration and
Constants.shared
Fixes #656
2024-10-04 09:58:42 +02:00
Davide De Rosa
4b0bc7f064
Reword confirm quit
2024-10-04 02:59:03 +02:00
Davide De Rosa
00bf415056
Move modules tip to +/-
2024-10-04 02:57:09 +02:00
Davide De Rosa
7070661c3b
Group row components and make icons bigger
...
Fixes #678
2024-10-04 02:52:02 +02:00
Davide De Rosa
fe8fa93230
Fix SwiftGen warning
2024-10-04 02:44:19 +02:00
Davide De Rosa
2d32e099b7
Rename repositories
2024-10-04 02:43:18 +02:00
Davide
edb4d127e9
Delete remote profiles on local removal ( #677 )
...
Remote profiles were never deleted. Now, when removing a profile:
- The profile is deleted from the local store
- The profile is deleted from the remote store
- Other synced devices receive the update and delete the profile from
their remote store
- However, they retain a local copy of the profile
- The copy doesn't appear as "Shared on iCloud" anymore
2024-10-04 01:26:52 +02:00
Davide De Rosa
27b7e62376
Add hint about iCloud sharing
2024-10-04 00:52:25 +02:00
Davide De Rosa
b660c499af
Use static 'Profile' in editor title
2024-10-04 00:47:28 +02:00
Davide De Rosa
07703fda9c
Fix some things about IP module
...
- Reword module description to "Routing"
- Make route modal title .inline
2024-10-04 00:44:31 +02:00
Davide De Rosa
ca03d057fc
Fix iCloud icon and move to the right
2024-10-04 00:39:41 +02:00
Davide De Rosa
fc834ab367
Replace Section with .themeSection
...
Closes #676
2024-10-03 23:32:31 +02:00
Davide
211b3b83d3
Erase iCloud store from Settings ( #675 )
...
Also, fix SwiftUI not refreshing when remote profiles are updated. There
was no objectWillChange nor Published around
ProfileManager.allRemoteProfiles, and ProfileRowView was not treating it
as ObservedObject.
Closes #673
2024-10-03 23:25:51 +02:00
Davide
372e30cf68
Import remote profiles serially ( #674 )
...
Follow the same approach as #636 , because if no profiles are formerly
installed the first import will trigger a VPN permission alert. Weird
things may happen in that case if profiles are imported in parallel.
2024-10-03 22:25:59 +02:00
Davide De Rosa
bf4ec4982a
Refactor phrases
2024-10-03 19:42:52 +02:00
Davide De Rosa
73665c5436
Use extended layout in profile list
2024-10-03 18:42:37 +02:00
Davide
1491766102
Per-profile iCloud syncing ( #668 )
...
Keep two separate stores to accomplish per-profile sharing:
- Local store, where to push updates manually (save/remove/search)
- Remote iCloud store, where to pull updates from
A profile can be added/removed to/from the iCloud store so that other
devices can push/pull updates to it.
Consequently, updates to the iCloud store will NEVER cause a profile
deletion. Once removed, the profile will stay locally.
Fixes #586
Fixes #555
2024-10-03 18:41:27 +02:00
Davide De Rosa
1227df60ff
Present popover from button
2024-10-03 17:53:19 +02:00
Davide
8ad144239e
Present modules tip as popover on macOS ( #672 )
2024-10-03 17:50:19 +02:00
Davide De Rosa
429e79cd3a
Refactor theme section and some phrases
2024-10-03 17:35:57 +02:00
Davide
0917e47ea3
Granularize app features ( #671 )
...
Split .networkSettings and add .sharing for #668
2024-10-03 12:13:03 +02:00
Davide
63b0199a39
Merge Settings into About on iOS ( #670 )
...
Closes #669
2024-10-03 11:25:39 +02:00
Davide
e8d5f2477b
Prepare interactive login for paywall ( #663 )
...
See #662
2024-10-02 16:05:40 +02:00
Davide
3ab80cd076
Fix incorrect VPN status in some cases ( #661 )
...
Regression following #636
2024-10-02 13:40:44 +02:00
Davide
3fbf803518
Ignore unmappable Core Data entities ( #660 )
...
But implement .discard for testing.
2024-10-02 13:35:49 +02:00
Davide De Rosa
f602655568
Link TODOs to issues
2024-10-01 15:50:12 +02:00
Davide De Rosa
bef1d36aa4
Fix annoying singleton warning
2024-10-01 15:45:53 +02:00
Davide
51dbc3f246
Add App Intents extension stub ( #655 )
...
Just the Xcode metadata, no actual content.
2024-10-01 10:17:20 +02:00
Davide De Rosa
087f177bd7
Omit storage section in release
2024-10-01 09:57:45 +02:00
Davide De Rosa
2191d2c946
Update library
2024-10-01 08:04:42 +02:00
Davide De Rosa
635708695e
Retain last used profile beyond disconnection
...
Fixes #650
Fixes #651
2024-10-01 00:08:36 +02:00
Davide De Rosa
51cb1d2d38
Fix library about previous commit
2024-09-30 21:08:45 +02:00
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