Commit Graph

1427 Commits

Author SHA1 Message Date
Davide
63496725c8
Transparent logo in version screen ()
Looks better on macOS and allows gradient on tvOS.
2024-11-28 22:59:37 +01:00
Davide
ed413a748e
Update SwiftLint/SwiftGen YAML 2024-11-28 19:54:50 +01:00
Davide
7af703c164
Move app library to the root ()
Makes it easier to search among app files and library files.
2024-11-28 17:45:18 +01:00
Davide
2a467e0c7e
Separate AppContext for previews and UI testing ()
Clarify the use of contexts:

- **Production** (.shared)
- **Previews** (.mock → .forPreviews)
  - ONLY use it in UILibrary for, well, previews
  - This context has dumb profiles with UUIDs as names
  - Registry is fake
- **UI Tests** (.forUITesting)
  - Add new context for UI testing
  - Selected based on command line arguments
  - This context has mock data tuned for decent screenshots
  - Registry is real

Share the same InAppProcessor in .shared and .forTesting contexts
because the app behavior was inconsistent regarding e.g. in-app
purchases.
2024-11-28 17:31:17 +01:00
Davide
962361cb9f
Automate screenshots via UI tests ()
Ready for screenshots generation, except for the tests themselves and
the TV target.

- More customizations while UI testing
  - Act as full version user in IAPManager
  - Override layout with default to .grid if isBigDevice
  - Show module names in profile list/grid
- Improve mock Profile/ProfileManager
  - Meaningful profile names
  - iCloud/TV icons
  - Initial modules
- Improve XCTest extensions
  - Screenshot destination (attachment/temporary)
  - Screenshot target (window/sheet)
  - Print saved temporary URL at the end (may help with CI)
  - Append device name to screenshot filename
- Tests
- Refactor actions with the [Page Object
pattern](https://swiftwithmajid.com/2021/03/24/ui-testing-using-page-object-pattern-in-swift/)
  - Perform iPad screenshots in landscape
  - Split simple flow tests and screenshots
  - Add "Connect to" test

Closes 
2024-11-28 15:51:03 +01:00
Davide
f6c93fc2f7
Use provider description as profile name 2024-11-28 11:14:23 +01:00
Davide
42c0d7e932
Customize user level from bundle 2024-11-28 02:19:44 +01:00
Davide
581673c617
Add target for UI tests ()
Create UITesting target with:

- AppCommandLine/AppEnvironment: strongly typed refactoring of PP_*
environment values
- AccessibilityInfo: identifies and locates elements for UI testing

Make the app behave differently when launched with `.uiTesting`, and
expose the flag to SwiftUI via `.environment(\.isUITesting)` to:

- Use the mock AppContext
- Skip onboarding

Add PassepartoutUITests target with two screenshot tests:

- Connected screen
- Profile modal
2024-11-28 01:30:26 +01:00
Davide
8f778faa5d
Inform about use of profile name in Shortcuts ()
Now that Siri is superseded by the more general Shortcuts automations,
add an informational footer below the "Name" field of the profile
editor.
2024-11-27 15:30:15 +01:00
Davide
b4caa26a47
Improve layout of installed profile ()
When none, fill the whitespace with an informational placeholder.
2024-11-27 14:49:23 +01:00
Davide
eac1e028b2
Add version view in About/Settings ()
Restored from v2. Refactor LogoView for reuse.
2024-11-27 13:24:44 +01:00
Davide
14aae4e02a
Define common PreferenceProtocol 2024-11-27 09:40:32 +01:00
Davide
b3c90b6802
Drop animations on reload servers on iOS 2024-11-27 01:22:54 +01:00
Davide
4fcac3c95a
Fix modals not re-appearing in iOS 16
- Paywall
- Error handler

Expose setLater/enableLater.
2024-11-27 01:22:53 +01:00
Davide
a92c2c2c64
Fix profile menus
- Omit duplicate/delete from current profile
- Replace .infoButton with .installedProfile if current
- Drop dots from direct actions
- Disable trailing dots on iOS/tvOS
- Disable "Connect to" if ineligible (decouple to own view)
2024-11-27 01:20:42 +01:00
Davide
91f4e510c4
Split app and UI domains ()
CommonLibrary had some undesired knowledge of UI. Split AppPreference
and UIPreference. Then move some more stuff from AppUI* to UILibrary.

WARNING: this forgets existing UI preferences (e.g. favorite servers).
2024-11-26 21:21:49 +01:00
Davide
d8753f21da
Different styles for profile menu based on context ()
Hide "Duplicate" and "Delete" from the info button menu because they are
disruptive actions, misclick is likely.
2024-11-26 20:10:03 +01:00
Davide
e0f16cbb3e
Mitigate overlap of sheet/alert during onboarding 2024-11-26 19:19:15 +01:00
Davide
b34019e4eb
Add provider profile from toolbar ()
Create profile with a provider module and an on-demand module (disabled)
to speed up initial provider selection and configuration. Supports
OpenVPN for now.

Fixes 
2024-11-26 19:14:56 +01:00
Davide
2dad04f241
Do not present server selector if ineligible ()
Verification was only performed for interactive login, not for provider
server selection. Do that before a connection attempt, so that the
paywall always appears first.
2024-11-26 18:44:23 +01:00
Davide
7d8055f044
Do not dismiss abruptly on "Donate" error 2024-11-26 17:28:49 +01:00
Davide
b455701daa
Improve appearance of "Purchased"
- Animate load
- Handle load errors
2024-11-26 17:28:19 +01:00
Davide
b9f3500f31
Fix regressions in L&F ()
- Text appearance on iOS/macOS (broken by )
- Visual ambiguity in "Purchased" when no feature is eligible
- "Purchased" must be a form on macOS
2024-11-26 16:50:37 +01:00
Davide
40741ebf2b
Receive tests on ImmediateScheduler 2024-11-26 16:20:16 +01:00
Davide
80d40c3161
Improve TV settings screen ()
- Show detail side by side rather than navigate
- Fix scrolling in purchased view
2024-11-26 15:55:04 +01:00
Davide
e49e8881b3
Share tests timeout and set to .infinity 2024-11-26 12:33:28 +01:00
Davide
829bde865e
Retain on-demand flag on save profile ()
Regressed recently in library. When a profile was "Inactive
(on-demand)", saving it would revert to "Inactive" because the
underlying manager was being disabled.
2024-11-26 11:05:02 +01:00
Davide
55dbd5cb84
Try to fix wait() in ProfileManager tests
In case condition is immediately met.
2024-11-26 10:33:30 +01:00
Davide
8ec6f90077
Connect on provider server selection ()
Unless profile is current and active, in which case AppContext does it
under the hood.
2024-11-26 10:30:30 +01:00
Davide
1c1d2502c3
Show quick profile menu rather than just edit ()
"Edit" is a less frequent action than "Select provider server". Offer a
common place for quick actions.

One step towards 
2024-11-26 09:42:47 +01:00
Davide
19da40d3f8
Simplify VPNProviderServerView components ()
Merge former ContainerView into main view and define platform-specific
subviews:

- ContainerView (composition of content + filters)
- ContentView
- FiltersView
2024-11-26 09:20:00 +01:00
Davide
b357d985ed
Add "Refresh infrastructure" in server lists ()
Refactoring:

- Split Providers and VPN views
- Rename VPNProviderServerView subviews
- Reuse RefreshInfrastructureButton

Closes 
2024-11-26 01:04:58 +01:00
Davide
8b043d8a4f
Refactor provider server views
- Rename ServersView to ContainerView
- Rename ServersSubview to ContentView
- Split parent extensions and content
- Move container handlers to methods suggesting logic
- Drop dup previews
2024-11-26 00:18:08 +01:00
Davide
ca54d8f41a
Perform onboarding steps on upgrade ()
Store the current step in a linear list of onboarding steps that can
increase with each app upgrade.

Fixes  
Fixes  
Fixes 
2024-11-25 21:55:31 +01:00
Davide
7f7e591616
Add view in "About" about purchased products ()
Closes 
2024-11-25 19:17:18 +01:00
Davide
07b4e786c3
Localize WireGuard errors ()
Fixes 
2024-11-25 11:34:31 +01:00
Davide
7e49493d75
Improve provider servers responsiveness on iOS ()
Pre-compute servers by country code.

Fixes 
2024-11-25 10:18:10 +01:00
Davide
fa293656f4
Fix missing beta check on tvOS ()
Reuse the same receipt trick from iOS.

Also, fix a regression in IAPManager.fetchLevelIfNeeded() from ,
where a guard after an await was dropped leading to reentrancy issues.
2024-11-24 21:19:43 +01:00
Davide
16f0047046
Raise other test timeouts 2024-11-24 20:31:17 +01:00
Davide
6615b69d44
Bump timeout in ProfileManagerTests 2024-11-24 20:21:39 +01:00
Davide
1431cc167c
Parallelize all tests 2024-11-24 20:15:10 +01:00
Davide
2aa91eedb0
Simplify paywall entities ()
- PaywallView is the paywall content
- PaywallModifier attaches paywall with optional confirmation
- PurchaseRequiredButton presents paywall explicitly
- PaywallReason is the compound input

Refactoring:

- PurchaseRequiredButton takes a custom view
- PurchaseAlertModifier was merged into PaywallModifier
- PurchaseButtonModifier was merged into PurchaseRequiredButton
- Modal options were packed into a single struct

Confirmation alert presented on:

- Connect to ineligible profile (AppCoordinator)
- Save ineligible profile (ProfileCoordinator)
2024-11-24 20:01:30 +01:00
Davide
cb530d8a65
Handle TV requirements on connection ()
Fixes 
2024-11-24 01:01:04 +01:00
Davide
bad9e8b58e
Add TV settings tab ()
Includes:

- Credits
- Donations
- Diagnostics
- Version

Had to:

- Wrap tab view into a NavigationStack for full-screen navigation
- Take out navigation titles of about subviews
- Customize donations view layout with modifier
- Fix credits and debug log to support scrolling

Closes 
2024-11-23 23:01:11 +01:00
Davide
f13a292b4b
Refactor String identifiers ()
- Group all views under "views.*"
- Split global strings into actions and nouns
- Use underscores
- Clean up unused

Fixes 
2024-11-23 20:31:22 +01:00
Davide
3e2823c2e0
Suppress module name
Uneditable with , must hide potentially existing name.
2024-11-23 20:11:10 +01:00
Davide
2a46173169
Move more views to UILibrary ()
- Move about subviews to UILibrary
- Refactor about to single coordinator + platform views
- Refactor debug log to single view + content views
- Take out debug log routes from about routes
- Rename Settings* to Preferences*
- Reuse empty modifier in debug log
- Fix a visual bug in .themeTrailingValue() (extra Spacer)

Preparation for 
2024-11-23 19:26:33 +01:00
Davide
a301806ac7
Share migrated TV profiles ()
Fixes 
2024-11-23 13:33:02 +01:00
Davide
3d092d6802
Revert marker width from 2024-11-23 13:30:29 +01:00
Davide
13118a5e2e
Improve profiles layout on small devices ()
- Smaller iCloud/TV icons
- Smaller marker width
- Less spacing before info button
2024-11-22 17:05:46 +01:00