chahinebrini 6cd3a78aaf feat(protection): iOS Layer-2 webContent-Filter (ManagedSettings) — MVP-Plumbing
WebKit-interner Content-Filter via ManagedSettingsStore().webContent als
stilles Sicherheitsnetz. Blockt eine kuratierte, laenderabhaengige Top-
Gambling-Domain-Liste plus systemseitig Adult-Content (.auto-Variante).
Braucht NUR Family Controls — kein MDM, kein neues Entitlement, keine
Config-Plugin-Aenderung.

- gambling-domains.json: gebuendelte Starter-Liste (DE/GB/FR), je <=50
  Domains (Apple-Hartlimit), klar als STARTER markiert. Via Podspec-
  resource_bundles ins App-Bundle gepackt.
- applyWebContentFilter / clearWebContentFilter: zwei native AsyncFunctions.
  Land via Locale.current.region, iOS 16+ gegated, FC-Auth vorausgesetzt.
- JS-Bridge (Module-Decl, types, web-stub, lib/protection.ts) + Actions im
  useProtectionState-Hook. getDeviceState liefert webContentFilter-Layer mit.

KEINE Auto-Trigger-Logik — Layer 2 ist vorerst nur explizit aufrufbare
Capability. Siehe TODO(layer2-gating) im Swift-Modul und lib/protection.ts.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 16:07:44 +02:00

36 lines
1.5 KiB
Ruby

Pod::Spec.new do |s|
s.name = 'RebreakProtection'
s.version = '0.1.0'
s.summary = 'ReBreak unified protection — NEFilter + Family Controls.'
s.description = 'Single native module that wraps NEFilterDataProvider + AuthorizationCenter + ManagedSettings for the ReBreak gambling-recovery app.'
s.author = 'ReBreak'
s.homepage = 'https://rebreak.org'
s.license = { :type => 'Proprietary' }
s.platforms = { :ios => '15.1', :tvos => '15.1' }
s.swift_version = '5.9'
s.source = { :git => '' }
s.static_framework = true
s.dependency 'ExpoModulesCore'
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES',
'SWIFT_COMPILATION_MODE' => 'wholemodule',
}
# NUR Top-Level-Sources ins Hauptmodul. RebreakURLFilter/ enthält Sources
# für die NetworkExtension — die werden vom Config-Plugin in ein separates
# Xcode-Target gepackt, NICHT in die Hauptmodul-Lib.
s.source_files = '*.{h,m,mm,swift,hpp,cpp}'
s.exclude_files = 'RebreakURLFilter/**/*'
# Layer-2 (webContent-Filter): gebündelte Gambling-Domain-Liste pro Land.
# Wird als eigenständiges Resource-Bundle (RebreakProtectionResources.bundle)
# ins App-Bundle gepackt — RebreakProtectionModule.swift liest es zur Laufzeit
# via Bundle(for:)/url(forResource:). Pfad relativ zur Podspec → zeigt auf die
# von der Aufgabe vorgegebene Quelle apps/rebreak-native/assets/protection/.
s.resource_bundles = {
'RebreakProtectionResources' => ['../../../assets/protection/gambling-domains.json']
}
end