WKWebView-Huelle fuer Hybrid-Apps (Web-Lese-Surfaces + native Submit/Widget/ShareExt). Extrahiert aus den fast-byte-identischen `WebShell/`-Ordnern in seepuls-native und zitare-native (~900 LOC, davon ~700 LOC Duplikat). Audit 2026-05-17 V2. Neu (public API): - `WebShellView` — WKWebView-Wrapper mit Progress-Bar, Pull-to- Refresh (iOS), Fehler-Snackbar, External-Link-Delegation. Universal (iOS + macOS) - `WebShellConfig` — Host-Whitelist mit Wildcard-Support (`"*.mana.how"`), User-Agent, Theme-Hints, User-Scripts - `WebTarget` — URL + monoton wachsender reloadToken - `WebNavState` — @Observable, @MainActor, reaktiver Nav-State - `WebShellCoordinator` — WKNavigationDelegate + WKUIDelegate - `WebShellScripts` — Helfer fuer `preferDarkScheme`, `syncDarkMode(localStorageKey:)`, `hideElements(selectors:tagName:)` Logging unter Subsystem `ev.mana.webshell` (App-OSLog bleibt eigen). Tests: 6 neue Tests gegen `WebShellConfig.isAllowed` (Wildcards, Negativ-Cases). 50/50 grün insgesamt (6 ManaWebShell + 44 ManaAuthUI). Doku: `mana/docs/playbooks/HYBRID_NATIVE_APP.md` (Schwester-Repo). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
1.5 KiB
Swift
51 lines
1.5 KiB
Swift
// swift-tools-version: 6.0
|
|
import PackageDescription
|
|
|
|
let package = Package(
|
|
name: "mana-swift-ui",
|
|
defaultLocalization: "de",
|
|
platforms: [
|
|
.iOS(.v18),
|
|
.macOS(.v15),
|
|
],
|
|
products: [
|
|
.library(name: "ManaAuthUI", targets: ["ManaAuthUI"]),
|
|
.library(name: "ManaWebShell", targets: ["ManaWebShell"]),
|
|
],
|
|
dependencies: [
|
|
// Lokaler Dev-Pfad. Apps konsumieren beide Pakete parallel über
|
|
// `path: ../mana-swift-core` bzw. `path: ../mana-swift-ui`.
|
|
// Release-Wechsel auf `from: "1.1.0"` kommt mit Phase 4.
|
|
.package(path: "../mana-swift-core"),
|
|
],
|
|
targets: [
|
|
.target(
|
|
name: "ManaAuthUI",
|
|
dependencies: [
|
|
.product(name: "ManaCore", package: "mana-swift-core"),
|
|
.product(name: "ManaTokens", package: "mana-swift-core"),
|
|
],
|
|
path: "Sources/ManaAuthUI",
|
|
swiftSettings: [
|
|
.enableExperimentalFeature("StrictConcurrency"),
|
|
]
|
|
),
|
|
.target(
|
|
name: "ManaWebShell",
|
|
path: "Sources/ManaWebShell",
|
|
swiftSettings: [
|
|
.enableExperimentalFeature("StrictConcurrency"),
|
|
]
|
|
),
|
|
.testTarget(
|
|
name: "ManaAuthUITests",
|
|
dependencies: ["ManaAuthUI"],
|
|
path: "Tests/ManaAuthUITests"
|
|
),
|
|
.testTarget(
|
|
name: "ManaWebShellTests",
|
|
dependencies: ["ManaWebShell"],
|
|
path: "Tests/ManaWebShellTests"
|
|
),
|
|
]
|
|
)
|