cards-native/ShareExtension/ShareEditorView.swift
Till JS b5edf5cf2e fix: User-facing Strings Cards → Cardecky komplett, Build 3
User-facing Rebrand:
- LoginView Heading (war schon in v0.8.5)
- NotificationManager.title (war schon in v0.8.5)
- ShareEditorView Footer-Text: "...in der Cards-App" → "...in der Cardecky-App"
- StudyAppIntents Description: "Öffnet Cards" → "Öffnet Cardecky"
- Localizable.xcstrings: "Cards" key → "Cardecky"
- NSPhotoLibraryUsageDescription: "Cards greift..." → "Cardecky greift..."
- Log.app.info("Cards starting") → "Cardecky starting"
- MARKETING_COPY.md: alle "Cards"-Treffer in DE + EN auf Cardecky
- RELEASE_CHECKLIST: App-Name "Cards" → "Cardecky"

Build-Nummer 2 → 3 (Apple lehnt doppelte Build-Nummern ab, Code-
Hash hat sich geändert).

Code-Identifier bleiben: CardsAPI, CardsTheme, CardsNativeApp,
CardsWidgetExtension, CardsShareExtension — interne Symbol-Namen,
nicht user-facing.

Archive verifiziert: CFBundleDisplayName=Cardecky, Build=3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 15:11:11 +02:00

60 lines
1.9 KiB
Swift

import SwiftUI
/// Mini-Editor in der Share-Extension. User kann den Text noch
/// anpassen, dann "Speichern" PendingShare landet in der Haupt-App.
struct ShareEditorView: View {
let initialText: String
let sourceURL: String?
let onSave: (String) -> Void
let onCancel: () -> Void
@State private var text: String
init(
text: String,
sourceURL: String?,
onSave: @escaping (String) -> Void,
onCancel: @escaping () -> Void
) {
initialText = text
self.sourceURL = sourceURL
self.onSave = onSave
self.onCancel = onCancel
_text = State(initialValue: text)
}
var body: some View {
NavigationStack {
Form {
Section("Vorderseite") {
TextField("Text", text: $text, axis: .vertical)
.lineLimit(4 ... 10)
}
if let sourceURL {
Section("Quelle") {
Text(sourceURL)
.font(.caption)
.foregroundStyle(.secondary)
.lineLimit(1)
}
}
Section {
Text("Wähle das Ziel-Deck in der Cardecky-App.")
.font(.caption)
.foregroundStyle(.secondary)
}
}
.navigationTitle("Als Karte speichern")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Abbrechen", action: onCancel)
}
ToolbarItem(placement: .confirmationAction) {
Button("Speichern") { onSave(text) }
.disabled(text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty)
}
}
}
}
}