Commit Graph

541 Commits

Author SHA1 Message Date
Davide
b16952a852
Bump version 2025-01-05 18:10:03 +01:00
Davide
edb7c29b26
Bump version 2024-12-31 00:49:23 +01:00
Davide
34495e88f1
Bump version 2024-12-30 10:58:57 +01:00
Davide
dadd721dc2
Bump version 2024-12-27 17:12:08 +01:00
Davide
b300e0b178
Bump version 2024-12-24 09:14:26 +01:00
Davide
4052a41d6b
Bump version 2024-12-24 08:42:03 +01:00
Davide
8d7351d5e2
Bump version 2024-12-23 22:48:35 +01:00
Davide
5a4efa9d15
Bump version 2024-12-22 12:24:48 +01:00
Davide
5acf1982cf
Bump version 2024-12-22 11:47:59 +01:00
Davide
60336ba110
Bump version 2024-12-20 23:28:20 +01:00
Davide
9e18466e2e
Bump version 2024-12-20 21:14:05 +01:00
Davide
d3eea33656
Bump version 2024-12-18 17:29:37 +01:00
Davide
1f81c3dfea
Resolve NEVPNErrorDomain error and profile duplication on first import (#1026)
Fixes #1025
2024-12-18 17:26:35 +01:00
Davide
1be2510e8c
Bump version 2024-12-18 10:30:17 +01:00
Davide
34b20ad73b
Bump version 2024-12-18 10:21:09 +01:00
Davide
47b0b79fd7
Bump version 2024-12-17 20:58:27 +01:00
Davide
09d598e893
Bump version 2024-12-17 18:58:31 +01:00
Davide
a81b615261
Bump version 2024-12-17 18:50:27 +01:00
Davide
ffb8829f4f
Reorganize Core Data containers (#1017)
Before anything, remove any code related to App Group containers from
tvOS target because they are not available. Include the beta receipt
override, it's broken for that reason.

In short:

- Store all Core Data containers locally. Do not use the App Group for
Core Data for consistency across platforms.
- Store logs in the App Group on iOS/macOS, but locally on tvOS (see
`urlForCaches`).

Then, rather than one container per model, merge models into:

- Local: Providers
- Remote: Profiles + Preferences (now in the same CloudKit container)

Reuse the remote model for backups too.

This change is safe because:

- Local profiles are stored via Network Extension in the keychain, not
Core Data
- Remote profiles are re-imported via CloudKit sync
- Providers are re-downloaded on first use
- Preferences are lost, but they are "cheap" data
- Profile backups are lost, but they were hidden anyway
2024-12-15 20:20:33 +01:00
Davide
d6aaa4364c
Bump version 2024-12-15 14:06:34 +01:00
Davide
8ad71b2980
Bump version 2024-12-15 13:52:05 +01:00
Davide
d0f25d6d6e
Add translations for the former 12 languages (#1005)
Closes #588
2024-12-12 23:32:27 +01:00
Davide
e44c520601
Bump version 2024-12-12 18:46:03 +01:00
Davide
f1944d92db
Bump version 2024-12-12 12:49:59 +01:00
Davide
9bf615b0ba
Bump version 2024-12-12 11:40:09 +01:00
Davide
76a570b7b3
Autogenerate framed screenshots from HTML/CSS (#1000)
Add TV screenshots and organize PassepartoutUITests with two test plans
for generating iOS/macOS (Main) and tvOS (TV) screenshots. Revert to the
.attachment destination and use `xcparse` to export the screenshots.
Change iPad screenshots to portrait.

Then autogenerate framed screenshots in two steps:

- Export the UITests screenshots per device (`export.sh`)
- Embed the results in a HTML/CSS template and take snapshots with
Chrome headless (`compose.sh`)
- Repeat for all devices (iPhone, iPad, Mac and Apple TV)
- Save framed screenshots to the `fastlane` screenshots directory
2024-12-11 20:33:58 +01:00
Davide
f441a2eed0
Autogenerate screenshots for all platforms (#998)
Unframed for now.

- Split Main/TV targets
- Extend ProfileManager for screenshot scenarios
- Rename UITesting to UIAccessibility

Active profile looks very big on TV simulator, temporarily commented
`.padding(.top, 50)` in ActiveProfileView.

Closes #974
2024-12-10 18:06:23 +01:00
Davide
ddd45c1855
Bump version 2024-12-10 15:30:45 +01:00
Davide
6f9c78b257
Track module preferences history in Core Data (#994)
Restore CDModulePreferencesV3 to track the history of module prefrences.

This way, excluded endpoints may be saved globally to Core Data as a
starting point. Then in Profile.userInfo we only save the relevant
exclusions for the current configuration.

The .excludedEndpoints relationship is therefore moved out of
CDProviderPreferencesV3.

Further refactoring:

- ModuleViewParameters now includes a ModulePreferences observable that
module views can observe
- Tunnel doesn't need access to PreferencesManager anymore (exclusions
are in Profile.userInfo)
2024-12-10 14:13:10 +01:00
Davide
e133676872
Bump version 2024-12-09 20:02:37 +01:00
Davide
70200b17ea
Bump version 2024-12-09 02:07:36 +01:00
Davide
f7013a98a9
Separate App/Tunnel responsibilities (#984)
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
aac04c4008
Move processor implementations to concrete objects (#983)
Formerly via blocks, now with final classes.

App:

- ProfileProcessor
- AppTunnelProcessor
- Implemented by DefaultAppProcessor in app
- Implemented by MockAppProcessor in UILibrary (for previews)

Tunnel:

- PacketTunnelProcessor
- Implemented by DefaultTunnelProcessor
2024-12-08 16:24:23 +01:00
Davide
365aa50e7a
Bump version 2024-12-06 15:34:01 +01:00
Davide
4ef47dfd77
Bump version 2024-12-04 14:21:29 +01:00
Davide
3540e1cb1a
Redesign confusing paywall (#973)
- Split suggested product and full version
- Hide sections with no products
- Hide full features if no full products
- Fail if no purchasable products
2024-12-02 10:40:25 +01:00
Davide
bcd7dff4d5
Bump version 2024-12-02 00:23:23 +01:00
Davide
c50862ff6f
Bump version 2024-12-02 00:16:16 +01:00
Davide
1a25102ec3
Add guidance for OpenVPN provider credentials (#966)
Some providers require specific credentials for OpenVPN, different from
account credentials. Update the API index with this information to show
an information footer and possibly a link to the OpenVPN credentials.

Also, fix the OTP footer not appearing on macOS.
2024-11-29 15:25:22 +01:00
Davide
3a511b9474
Drop empty folder 2024-11-28 18:50:58 +01:00
Davide
7af703c164
Move app library to the root (#962)
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 (#961)
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 (#960)
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 #681
2024-11-28 15:51:03 +01:00
Davide
42c0d7e932
Customize user level from bundle 2024-11-28 02:19:44 +01:00
Davide
581673c617
Add target for UI tests (#959)
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
20273e651f
Bump version 2024-11-26 20:12:03 +01:00
Davide
b34019e4eb
Add provider profile from toolbar (#946)
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 #899
2024-11-26 19:14:56 +01:00
Davide
aa9da8c9e0
Bump version 2024-11-26 16:52:02 +01:00
Davide
4d84bd1dd6
Bump version 2024-11-26 16:34:35 +01:00
Davide
1a6e566714
Bump version 2024-11-26 15:55:50 +01:00