zitare-native/ShareExtension/ShareViewController.swift
Till JS a4ea32b637 feat: app.zitare.com + api.zitare.com URLs für Cutover 2026-05-20
Native-Konstanten ziehen mit dem Web-Cutover zu .zitare.com-
Subdomains nach. Universal-Link-AASA-Liste enthält jetzt zitare.com
+ app.zitare.com (zitare.mana.how raus). webBaseURL ist jetzt das
echte publicWebURL (zitare.com), wie ursprünglich geplant.

CookieBridge bleibt Skeleton — die `.mana.how`-Cookie-Domain-
Strategie greift nicht für `.zitare.com`. Hinweis im Kommentar
gesetzt, Update vor ζ-3 nötig.

Code-Only. Erst nach nächstem Native-Build/TestFlight-Upload live.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:34:03 +02:00

58 lines
2.1 KiB
Swift

import SwiftUI
import UIKit
import UniformTypeIdentifiers
/// Phase ζ-4 Placeholder Share-Extension An Zitare schicken".
///
/// Aufgaben in ζ-4:
///
/// - Empfängt `NSExtensionActivationSupportsText` + `WebURL`.
/// - SwiftUI-Sheet mit Quote-Preview, Source-URL, Als Draft
/// speichern"-Button.
/// - POST an `https://api.zitare.com/api/v1/share/receive`
/// mit Envelope-Type `mana/text` (siehe `zitare/app-manifest.json`).
/// - Bei Network-Failure: in `PendingShareStore` unter App-Group
/// persistieren, die App synct beim nächsten Launch.
///
/// Erfordert ManaCore-Auth-Sharing über Keychain-Access-Group +
/// App-Group. Auth-Bridge-Pattern aus cards-native (ShareExtension/)
/// übernehmen, wenn ζ-4 startet.
class ShareViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let hosting = UIHostingController(
rootView: ShareRootView(onDone: { [weak self] in
self?.extensionContext?.completeRequest(returningItems: nil)
})
)
addChild(hosting)
view.addSubview(hosting.view)
hosting.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
hosting.view.topAnchor.constraint(equalTo: view.topAnchor),
hosting.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
hosting.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
hosting.view.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
hosting.didMove(toParent: self)
}
}
struct ShareRootView: View {
let onDone: () -> Void
var body: some View {
VStack(spacing: 16) {
Image(systemName: "quote.opening")
.font(.system(size: 48))
Text("An Zitare schicken")
.font(.headline)
Text("ζ-4 — TODO: POST /api/v1/share/receive")
.font(.caption)
.foregroundStyle(.secondary)
Button("Schließen", action: onDone)
.buttonStyle(.borderedProminent)
}
.padding()
}
}