diff --git a/apps/rebreak-native/CHANGELOG.md b/apps/rebreak-native/CHANGELOG.md index 8d8b436..04fcf31 100644 --- a/apps/rebreak-native/CHANGELOG.md +++ b/apps/rebreak-native/CHANGELOG.md @@ -10,9 +10,14 @@ Versioning: `version` follows SemVer, `versionCode` is monotonically increasing. --- -## [0.3.5] — buildNumber 14 — 2026-05-22 +## [0.3.5] — buildNumber 14 / versionCode 11 — 2026-05-22 ### Fixed +- **Android VPN-Blocklist-Self-Heal** (`9a22bcd`) — Nach der ersten Schutz-Aktivierung + lud `RebreakVpnService` die Blocklist nicht, wenn sie zur Startzeit noch nicht bereit + war (0 Domains aktiv). Neuer Self-Heal-Mechanismus: der Service prüft nach Tunnel-Start, + ob die Blocklist leer ist, und lädt sie mit exponentiellem Backoff nach + (1 s → 2 s → 4 s, max 3 Versuche). Kein Geräte-Neustart mehr nötig. - **iOS Layer-1 VPN: File-Protection-Fix** — `blocklist.bin` wird jetzt mit `FileProtectionType.completeUntilFirstUserAuthentication` geschrieben statt dem strengeren `.complete`. Damit ist die Datei nach dem ersten Entsperren seit Boot diff --git a/apps/rebreak-native/app.config.ts b/apps/rebreak-native/app.config.ts index 8bb7fd5..3487c8a 100644 --- a/apps/rebreak-native/app.config.ts +++ b/apps/rebreak-native/app.config.ts @@ -43,7 +43,7 @@ export default ({ config }: ConfigContext): ExpoConfig => ({ android: { package: "org.rebreak.app", - versionCode: 10, + versionCode: 11, adaptiveIcon: { // Foreground muss in der ~66%-Safe-Zone bleiben (Launcher-Mask clippt den // Außenring) → adaptive-foreground.png ist das Logo auf transparentem @@ -132,20 +132,6 @@ export default ({ config }: ConfigContext): ExpoConfig => ({ ], }, }, - { - // Layer 1-alt — NEURLFilter (iOS 26). INAKTIV, behalten als - // optionaler Upgrade-Pfad. EAS muss das Target trotzdem kennen. - targetName: "RebreakURLFilterExtension", - bundleIdentifier: "org.rebreak.app.URLFilterExtension", - entitlements: { - "com.apple.developer.networking.networkextension": [ - "url-filter-provider", - ], - "com.apple.security.application-groups": [ - "group.org.rebreak.app", - ], - }, - }, ], }, }, diff --git a/apps/rebreak-native/plugins/with-rebreak-protection-ios.js b/apps/rebreak-native/plugins/with-rebreak-protection-ios.js index 2a1a619..0a2de7a 100644 --- a/apps/rebreak-native/plugins/with-rebreak-protection-ios.js +++ b/apps/rebreak-native/plugins/with-rebreak-protection-ios.js @@ -77,15 +77,12 @@ const PT_SWIFT_SOURCES = [ function withMainAppEntitlements(config) { return withEntitlementsPlist(config, (cfg) => { - // NetworkExtension-Entitlement. Das Array darf mehrere Provider-Typen - // halten — beide gleichzeitig ist technisch erlaubt: - // - `packet-tunnel-provider`: der NEU aktive Layer-1-Filter (DNS-Sinkhole, - // MDM-frei, kein Apple-Capability-Request nötig — direkt in Xcode/Portal). - // - `url-filter-provider`: NEURLFilter, behalten als iOS-26-Upgrade-Pfad - // (inaktiv; User-Entscheidung NICHT zu löschen). + // NetworkExtension-Entitlement. Nur `packet-tunnel-provider` — der aktive + // Layer-1-Filter (DNS-Sinkhole, MDM-frei). Der NEURLFilter-Pfad + // (`url-filter-provider`) wurde entfernt; `url-filter-provider` ist zudem + // kein von EAS/Apple anerkannter Entitlement-Wert (Capability-Sync-Fehler). cfg.modResults['com.apple.developer.networking.networkextension'] = [ 'packet-tunnel-provider', - 'url-filter-provider', ]; // Family Controls = Kern-Funktion, Apple-Distribution-Entitlement freigegeben // (v0.3.4) → DEFAULT AN. Nur ein explizites REBREAK_ENABLE_FAMILY_CONTROLS=0 @@ -108,9 +105,8 @@ function withCopyExtensionSources(config) { return withDangerousMod(config, [ 'ios', async (cfg) => { - // Beide Extension-Verzeichnisse nach ios/ kopieren. + // Extension-Verzeichnis(se) nach ios/ kopieren. for (const [target, srcDir] of [ - [TARGET_NAME, MODULE_DIR], [PT_TARGET_NAME, PT_MODULE_DIR], ]) { const dest = path.join(cfg.modRequest.platformProjectRoot, target); @@ -439,7 +435,8 @@ function withPacketTunnelTarget(config) { module.exports = function withRebreakProtectionIos(config) { config = withMainAppEntitlements(config); config = withCopyExtensionSources(config); - config = withExtensionTarget(config); + // withExtensionTarget (NEURLFilter) entfernt — URLFilter wird nicht mehr + // gebraucht; `url-filter-provider` ist auch kein gültiger EAS-Entitlement-Wert. config = withPacketTunnelTarget(config); return config; };