Commit Graph

1295 Commits

Author SHA1 Message Date
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
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
Davide De Rosa 4a2dec9c6a Attempt beta release 2023-03-19 16:11:09 +01:00
Davide De Rosa 513b38584d
Upgrade SwiftLint to CI version (#266) 2023-03-19 16:10:40 +01:00
Davide De Rosa 4faeb85295 Attempt beta release
Update bundle in beta script.
2023-03-19 14:42:56 +01:00
Davide De Rosa fbd32d8b26
Fine-tune SwiftLint (#265) 2023-03-19 14:41:53 +01:00
Davide De Rosa 1dda8dce98 Attempt beta release 2023-03-19 08:45:34 +01:00
Davide De Rosa 17ae9793df
Randomize provider server (#263)
* Pick random server within location

* Add toggle to provider section in profile
2023-03-19 08:19:32 +01:00
Davide De Rosa c85f3d894e
Restore DNS "Domain" setting (#260) 2023-03-17 22:16:04 +01:00
Davide De Rosa f06f097f27
Add SwiftLint phase (#262) 2023-03-17 21:55:47 +01:00
Davide De Rosa cecf64d871
Move Diagnostics view to Profile bottom (#261) 2023-03-17 21:46:53 +01:00
Davide De Rosa 26c34638cb Make category optional in server long description 2023-03-17 18:09:21 +01:00
Davide De Rosa 8f999a462e Do not open long content when XOR is disabled 2023-03-17 17:52:57 +01:00
Davide De Rosa 37354d1b87 Update copyright 2023-03-17 16:56:19 +01:00
Davide De Rosa 2e10aab039
Extend authentication methods (#259)
* Add profile authentication method

- Persistent (default, fallback)

- Interactive (may expire through reconnections)

- TOTP (seed-based) - currently disabled

* Disable on-demand if login is interactive

* Present interactive prompt on VPN toggle
2023-03-17 16:49:35 +01:00
Davide De Rosa 44ccd21536
Fetch full profiles from Core Data (#258)
* Fetch full profiles

* Manage full profiles in organizer
2023-03-16 16:49:09 +01:00
Davide De Rosa 17b01a4dbc Clean up some code
- Drop stale generic

- Improve readability
2023-03-16 15:12:23 +01:00
Davide De Rosa 1b704d7d4a
Decouple VPNManager from TunnelKit (#248)
* Drop VPNManager dependency on TunnelKit

* Hook .masksPrivateData to preferences updates
2022-11-10 07:42:08 +01:00
Davide De Rosa 7ed27558fc
Move refund detection inside ProductManager (#246)
* 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 ba09dcffa7
Full OpenVPN XOR patch (#245) 2022-11-06 18:08:41 +01:00
Davide De Rosa c48e35887c Bump version 2022-11-02 22:33:26 +01:00
Dmitry Chirkin 07eaa54f1b
Ukrainian transaltion (#243)
Co-authored-by: Davide De Rosa <keeshux@gmail.com>
2022-11-01 14:20:09 +01:00
Davide De Rosa e2c976e58d Attempt beta release 2022-10-31 14:18:07 +01:00
Davide De Rosa baac1f59a8 Bump version 2022-10-31 08:57:05 +01:00
Davide De Rosa 22c28de641
Retain original filename as imported profile name (#240) 2022-10-30 10:22:44 +01:00
Davide De Rosa e4ec1e642d Attempt beta release 2022-10-29 13:40:50 +02:00
Davide De Rosa b2bdf23c54 Revisit pull section in OpenVPN Endpoint
- Hide from server diagnostics

- Use a better section title
2022-10-29 13:40:30 +02:00
Davide De Rosa b2ec7f0422 Attempt beta release 2022-10-29 13:01:18 +02:00
Davide De Rosa cdc05f0c10 Update TunnelKit
Split IP settings and routes. Now properly handling local routes.
2022-10-29 12:28:27 +02:00
Davide De Rosa 0f04bdcce3 Attempt beta release 2022-10-28 15:42:10 +02:00
Davide De Rosa b431ce4f05 Attempt beta release 2022-10-27 00:43:41 +02:00
Davide De Rosa a96fff2add Import new translations 2022-10-26 17:03:54 +02:00
Davide De Rosa e28bb3db9a Ack new refunds only if refunds list was altered
Fixes #238
2022-10-25 12:48:45 +02:00
Davide De Rosa e1d8ec6066 Attempt beta release 2022-10-25 09:07:39 +02:00
Davide De Rosa c0cc10ab94
Restore reconnect action (#232)
* Add "Reconnect" in profile view

* Add "Reconnect" in profile context menu

* Update CHANGELOG

* Restrict "Reconnect" in context menu to iOS 16

SwiftUI does not react properly to state updates.
2022-10-17 17:36:32 +02:00
Davide De Rosa c7a0a3e4b8 Drop 'non-official' from strings 2022-10-17 13:35:30 +02:00
Davide De Rosa f6e0caaa73 Implement --remote-random-hostname
- Update TunnelKit

- Show in UI
2022-10-17 09:06:52 +02:00
Davide De Rosa 6c6904255d Bump version 2022-10-17 09:05:27 +02:00
Davide De Rosa 54dc2307e9 Attempt beta release 2022-10-16 10:09:35 +02:00
Davide De Rosa 6a228d29c7 Use specific rounded Mac icon 2022-10-16 10:09:19 +02:00
Davide De Rosa c345265451 Attempt beta release 2022-10-16 08:36:17 +02:00
Davide De Rosa 54c53707e0
Add app log in Diagnostics screen (#234) 2022-10-16 08:33:32 +02:00
Davide De Rosa fbc17877b1 Suppress buggy Xcode warnings
@discardableResult annotations became suddenly ineffective.
2022-10-15 22:30:21 +02:00
Davide De Rosa 7f748e6d1e Reuse "Download" for pulled OpenVPN settings 2022-10-15 16:52:58 +02:00
Davide De Rosa c4ca510b72 Fix app icon inconsistencies
- iOS: Single size

- macOS: Add missing
2022-10-15 16:41:13 +02:00
Davide De Rosa 592b0801e2 Prefix server description with category 2022-10-13 23:07:31 +02:00
Davide De Rosa 6031d0119a Drop assertion on legit intents scenario 2022-10-13 19:10:45 +02:00
Davide De Rosa f95e4f228d
Implement --route-nopull via TunnelKit (#230)
Use it internally to override server-pushed settings.
2022-10-13 19:09:51 +02:00
Davide De Rosa 5627e6c4a9
Address UI race conditions (#229)
* 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 54dc8a2556 Use MockVPN from TunnelKit
Rather than ad hoc strategy.
2022-10-12 22:37:40 +02:00
Davide De Rosa f21d05aa53 Add IVPN metadata 2022-10-08 11:33:03 +02:00
Davide De Rosa 07328982d6 Restore PIA provider 2022-10-05 08:18:46 +02:00
Davide De Rosa 63c3ac80b4 Attempt beta release 2022-10-04 22:37:53 +02:00
Davide De Rosa e2c1a4c686 Fix Oeck eligibility regression 2022-10-04 22:37:53 +02:00
Davide De Rosa 6183433c13 Drop unused libraries 2022-09-30 22:26:56 +02:00
Davide De Rosa ecb3138817 Attempt beta release 2022-09-25 08:55:15 +02:00
Davide De Rosa 025421aa08 Refactor some alert translations 2022-09-25 08:35:52 +02:00
Davide De Rosa 496d993e3d Attempt beta release 2022-09-23 23:07:40 +02:00
Davide De Rosa 1364d5153e Attempt beta release 2022-09-23 22:57:36 +02:00
Davide De Rosa a3fd5c40d4 Fix access to hidden OpenVPN.Configuration.Fallback 2022-09-23 22:56:27 +02:00
Davide De Rosa be6726fbd8 Attempt beta release 2022-09-23 21:56:37 +02:00
Davide De Rosa f755550974 Increase debug log view size 2022-09-23 09:04:27 +02:00
Davide De Rosa c2aef310f3 Fix again server ordering 2022-09-21 22:32:33 +02:00
Davide De Rosa db6f7bdf28 Revisit app metadata and screenshots
- Add script to import localized metadata

- Update app name, subtitle, keywords

- Update App Store description

    - Replace "OpenVPN" with "VPN"

    - Add .conf file extension (WireGuard)

    - Drop PIA (404)

    - Drop trailing notices

- Update README snapshots (Mac versions unused)

- Update App Store screenshots

- Revert to legacy launch screen (SwiftUI method stretches)
2022-09-15 17:41:22 +02:00
Davide De Rosa 38bdbc3697 Move diagnostics to settings 2022-09-12 22:58:37 +02:00
Davide De Rosa 940e0cf8c9 Attempt beta release 2022-09-05 22:35:22 +02:00
Davide De Rosa 5c681d6c3f Import new localizations 2022-09-05 22:34:51 +02:00
Davide De Rosa 3b146b3e0f Fix var syntax 2022-09-05 07:58:20 +02:00
Davide De Rosa 092d4f5de2 Drop return in one-line functions 2022-09-04 20:30:55 +02:00
Davide De Rosa 1005a12a66 Add extended provider location description
- Profile: Below location row

- Menu: On top of server list
2022-09-04 19:23:40 +02:00
Davide De Rosa 7975ddd194 Fix provider header in profile view 2022-09-04 19:23:27 +02:00
Davide De Rosa b322bde137 Refactor string ids after adding SettingsView 2022-09-03 14:59:17 +02:00
Davide De Rosa 4c4b3ee0c9 Revert to concrete-only managers
Abstraction was overcomplicated. Strategy pattern is enough.
2022-09-03 12:47:40 +02:00
Davide De Rosa 28f7c6bbe8 Restore longer localizations in Settings/About 2022-08-28 09:24:02 +02:00
Davide De Rosa f36d7596d0 Integrate settings with about screen
Move everything to SettingsView and remove invite actions.
2022-08-27 23:15:51 +02:00
Davide De Rosa 10270b02ee On Mac, copy debug log to pasteboard, do not share
UIActivityViewController is lame.
2022-08-27 22:21:34 +02:00
Davide De Rosa 0fee726951 Make profile "Connect" item a connection toggle
Requires adding multiple delegates to LightVPNManager.
2022-08-19 17:43:56 +02:00
Davide De Rosa 4d56ed6fca Only hide app by closing it
Keep constant "Show" action in menu:

- Bring app to foreground if in background
- Activate app if already in foreground
2022-08-19 17:43:52 +02:00
Davide De Rosa d10edc69fe Restore truncated VPN footer workaround 2022-08-19 08:34:55 +02:00
Davide De Rosa f465108a0a Attempt beta release 2022-08-16 12:43:20 +02:00
Davide De Rosa 0f790a9401 Fix leaks when reconnecting from menu
LightVPNManager implementation was still disabling/enabling VPN
manually instead of using reconnect() atomically, which led to an
IP leak in between the two steps.
2022-08-13 16:48:00 +02:00
Davide De Rosa 7a700408a8 Improve a few things about provider profile menus
- Add "Connect" item to connect to current server

- Sort provider categories ("Default" should also come first)

Reuse bundle from constants.
2022-08-13 16:47:01 +02:00
Davide De Rosa 80f71507e3 Do not navigate to active profile on launch 2022-08-05 12:50:12 +02:00
Davide De Rosa 0464cd0476 Fix property in launch on login bindings 2022-08-04 23:35:42 +02:00
Davide De Rosa 9195d426e4 Attempt beta release 2022-07-18 08:03:24 +02:00
Davide De Rosa f8c6b6580d Encapsulate launchesOnLogin AppPreference from Mac 2022-07-18 08:03:24 +02:00
Davide De Rosa b26e334881 Get Mac strings from main bundle
Alter bundle in SwiftGen configuration file.
2022-07-18 07:55:56 +02:00
Davide De Rosa 04faf57d4c Send app to background if started hidden
Sandbox had to be enabled in order to submit binary to App Store
Connect, therefore command line arguments cannot be used to tell
if the app was started by the launcher.

However, given that launcher starts app in hidden state, we can
safely assert that if the app is hidden on start, it was started
by the launcher.

See f33380b4e2

Also drop automatic signing on Mac bundle and unused utils.
2022-07-18 07:55:56 +02:00
Davide De Rosa 32e548421f Attempt beta release 2022-07-17 14:50:05 +02:00
Davide De Rosa 2c5f3d0bf0 Send app to background in OrganizerView handler
Keep handler in a single place.
2022-07-17 14:47:15 +02:00
Davide De Rosa 781291940f Enforce window appearance on 'Show' after closure 2022-07-16 21:24:53 +02:00
Davide De Rosa 9458c4f3a3 Fix server description and sorting
- Name (countries, area)
- Index
- Tags

Also use short description in menu (without country prefix).
2022-07-16 17:39:42 +02:00
Davide De Rosa ce280c0826 Fix old entity naming 2022-07-16 17:39:42 +02:00
Davide De Rosa 48d8173871 Drop return in single line functions 2022-07-16 17:39:42 +02:00
Davide De Rosa 58e375ec41 Attach @MainActor where needed
Some methods were updating UI from non-main thread.
2022-07-16 17:39:42 +02:00
Davide De Rosa f33380b4e2 Launch application in background from launcher
Requires disabling sandbox for launcher to receive arguments.

https://developer.apple.com/documentation/appkit/nsworkspace/openconfiguration/3172708-arguments

Refine some minor things about launcher:

- Pass invoker to NSApp.terminate() calls

- Use legacy version of .openApplication() to drop Concurrency
2022-07-16 17:39:42 +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 0a2d1e9d37 Mitigate fatalError() in properties, fail gracefully
Do not trigger fatalError() on properties too much because
SwiftUI may read them at any unpredictable time.
2022-07-08 20:01:53 +02:00
Davide De Rosa a442603696 Polish bundleConfig with strong type checking 2022-07-05 08:11:31 +02:00
Davide De Rosa ebe8ae3d29 Retain profiles order, no active on top 2022-07-04 00:32:06 +02:00
Davide De Rosa e8f65e9db0 Also show active profile as "Disabled" 2022-07-04 00:31:54 +02:00
Davide De Rosa 15dec59692 Comment on app path inferral from launcher 2022-06-26 08:53:10 +02:00
Davide De Rosa 1543eef3c1 Add convenient appId constant 2022-06-25 20:27:24 +02:00
Davide De Rosa b966826f19 Use main container path as launcher argument
Rather than "Contents/MacOS/Passepartout", raising a permission
error.

Also add .hides to prevent window from showing on launch.
2022-06-25 20:16:06 +02:00
Davide De Rosa df0d40c556 Add launcher target
- Launch main app in background then die

- Do not launch app if already running

- Launch app binary relative to launcher location
2022-06-25 16:53:38 +02:00
Davide De Rosa 3cc82cc807 Fix case in Info keys related to launch screen 2022-06-25 16:53:38 +02:00