build(config): prepare ReVoltVPN 3.3.5 release #20
No files matched your search
@@ -5,6 +5,47 @@ Versions follow [semver](https://semver.org/): MAJOR.MINOR.PATCH
|
||||
|
||||
---
|
||||
|
||||
## [3.3.5] — 2026-09-03
|
||||
|
||||
### Added
|
||||
- **OS-level session-expiry enforcement.** The native VPN service now enforces the
|
||||
server deadline with both a monotonic in-process handler and `AlarmManager`, so
|
||||
expiry does not depend on the Flutter UI process staying alive.
|
||||
- Only the non-secret runtime generation token and absolute expiry timestamp are
|
||||
persisted app-private for the OS alarm. Per-session VLESS UUID/SOCKS credentials
|
||||
remain memory-only; if Android cannot redeliver the original start intent, the
|
||||
runtime fails closed instead of reconstructing a tunnel from secrets on disk.
|
||||
- A successful support reward now requests an immediate control-plane refresh so the
|
||||
extended deadline is pushed to the native service without waiting for the next poll.
|
||||
|
||||
### Fixed
|
||||
- **Session clock reattach race.** `SessionTimer` is eager and evaluates the current
|
||||
VPN state once after construction, so a UI process attaching to an already-live
|
||||
tunnel no longer leaves the countdown at `00:00:00`.
|
||||
- Forced support sync no longer disappears behind an already-running periodic sync;
|
||||
it waits for the active request and then performs a fresh control-plane refresh.
|
||||
- VPN permission requests now fail with `NO_ACTIVITY` during Android activity detach
|
||||
instead of dereferencing a null Activity.
|
||||
- Receiver cleanup logs lifecycle races instead of silently swallowing them.
|
||||
- An early/stale session-expiry alarm no longer leaves an otherwise unused service
|
||||
process running.
|
||||
|
||||
### Changed
|
||||
- Unknown/obsolete persisted connection-mode labels, including the old `ass`/`auto`
|
||||
values, now fail closed to TUN. Only the explicit current `proxy` value restores
|
||||
SOCKS5 mode.
|
||||
- App version is `3.3.5+31`.
|
||||
|
||||
### Security
|
||||
- Existing AdMob bypass/callback behavior is intentionally unchanged.
|
||||
- Build-time mutation of the global Flutter pub cache remains removed; the hardened
|
||||
`flutter_vless_android` 1.1.5 source remains vendored and immutable during builds.
|
||||
- Full IPv4/IPv6 TUN routing, fail-closed DNS/TUN setup, authenticated ephemeral
|
||||
loopback SOCKS5, generation-scoped STOP/state handling, production config pinning,
|
||||
dependency verification, R8 gates and updater host allowlists remain in force.
|
||||
|
||||
---
|
||||
|
||||
## [3.3.4] — 2026-09-02
|
||||
|
||||
### Added
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||
# Read more about iOS versioning at
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
version: 3.3.4+30
|
||||
version: 3.3.5+31
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
|
||||
Reference in new issue
Block a user