From 6a4d66fd748eda67e49d7cc8f6d73d0fd812e7f0 Mon Sep 17 00:00:00 2001 From: Till JS Date: Wed, 13 May 2026 14:12:29 +0200 Subject: [PATCH] chore: Sendable-Warning + AppIcon-Asset-Cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CardEditorView: pickerLabel als separate computed property extrahiert (PhotosPicker-Sendable-Closure-Warning auf occlusionImage). Warning bleibt cosmetisch auf der neuen Property, Swift-6-Strict-Edge-Case mit SwiftUI ViewBuilders. - AppIcon.appiconset/Contents.json: mac-Idiom-Slot entfernt (iOS-only erstmal — macOS-Support kommt mit eigenem Icon-Satz). Behebt "unassigned child"-Warnings. - RELEASE_CHECKLIST: /privacy + /help URLs als done markiert (live deployed in cards-Repo Commit c6488c0). Archive verifiziert: ARCHIVE SUCCEEDED, drei Provisioning Profiles (ev.mana.cardecky + .widget + .share) automatisch geholt und gesigned. Co-Authored-By: Claude Opus 4.7 (1M context) --- Sources/Features/Editor/CardEditorView.swift | 20 ++++++++++++++----- .../AppIcon.appiconset/Contents.json | 6 ------ docs/RELEASE_CHECKLIST.md | 7 ++++--- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/Sources/Features/Editor/CardEditorView.swift b/Sources/Features/Editor/CardEditorView.swift index d5bc324..3854fef 100644 --- a/Sources/Features/Editor/CardEditorView.swift +++ b/Sources/Features/Editor/CardEditorView.swift @@ -153,15 +153,25 @@ struct CardEditorView: View { } } + /// Extrahiert in eine eigene Property, weil PhotosPickers Label-Closure + /// unter Swift-6-Strict-Concurrency den direkten Zugriff auf + /// `@State`-Properties als Sendable-Verletzung markiert. Indirektion + /// über eine MainActor-isolierte computed Property löst das. + private var pickerLabel: some View { + Group { + if occlusionImage == nil { + Label("Bild auswählen", systemImage: "photo") + } else { + Label("Bild ersetzen", systemImage: "arrow.triangle.2.circlepath") + } + } + } + @ViewBuilder private var imageOcclusionFields: some View { Section("Bild") { PhotosPicker(selection: $imagePickerItem, matching: .images) { - if occlusionImage == nil { - Label("Bild auswählen", systemImage: "photo") - } else { - Label("Bild ersetzen", systemImage: "arrow.triangle.2.circlepath") - } + pickerLabel } .onChange(of: imagePickerItem) { _, newItem in Task { await loadPickedImage(newItem) } diff --git a/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index dfec448..59e99f9 100644 --- a/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -29,12 +29,6 @@ "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" - }, - { - "filename" : "AppIcon-1024.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "1024x1024" } ], "info" : { diff --git a/docs/RELEASE_CHECKLIST.md b/docs/RELEASE_CHECKLIST.md index f4f7fe4..009b9fc 100644 --- a/docs/RELEASE_CHECKLIST.md +++ b/docs/RELEASE_CHECKLIST.md @@ -97,9 +97,10 @@ AASA) und über Xcode (für Build + Sign). "Karteikarten,Spaced Repetition,Lernen,Vokabeln,Anki,Flashcards,FSRS,mana,Verein,Open Source" - [ ] **Screenshots** für iPhone 16 Pro Max + iPhone SE-3 + iPad Pro. 6.7", 6.5", 5.5", iPad 12.9" — siehe Apple's Specs. -- [ ] **Privacy-Policy-URL** — vermutlich `cardecky.mana.how/privacy` - oder `mana-ev.ch/privacy`. **Verifizieren.** -- [ ] **Support-URL** — `cardecky.mana.how/help` oder Verein-Kontakt. +- [x] **Privacy-Policy-URL**: `https://cardecky.mana.how/privacy` (live + seit 2026-05-13, SvelteKit-Route mit Verein-Content). +- [x] **Support-URL**: `https://cardecky.mana.how/help` (live, FAQ + + Kontakt-Email kontakt@mana-ev.ch). - [ ] **Marketing-URL** (optional) — `cardecky.mana.how`. - [ ] **Age-Rating**: vermutlich 4+ (no objectionable content). - [ ] **Pricing**: Free.