fix: ITMS-90129 — DisplayName Cards → Cardecky + Build 2

Apple lehnte Build 0.1.0(1) ab mit ITMS-90129: "The bundle uses a
bundle name or display name that is already taken." Im App-Store
gibt es schon Apps mit dem DisplayName "Cards" (u.a. Apples eigene
Grußkarten-App war so benannt). App-Store-Connect-App heißt sowieso
"Cardecky" — Brand-Konsistenz: DisplayName durchgehend "Cardecky".

Geändert:
- project.yml Main-App: CFBundleDisplayName Cards → Cardecky,
  CFBundleVersion 1 → 2 (Apple lehnt doppelte Build-Nummern ab)
- project.yml Widget: CFBundleDisplayName Cards Widget → Cardecky Widget,
  INFOPLIST_KEY_CFBundleDisplayName analog
- project.yml Share-Extension: CFBundleVersion 1 → 2
- LoginView Heading: "Cards" → "Cardecky"
- NotificationManager.content.title: "Cards" → "Cardecky"
- UITest: erwartet "Cardecky" statt "Cards"

Archive verifiziert: CFBundleDisplayName=Cardecky, CFBundleVersion=2,
ARCHIVE SUCCEEDED. Nach erneutem Upload via Xcode Organizer sollte
TestFlight den Build akzeptieren.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-13 15:05:33 +02:00
parent e24e0e6825
commit 2eb7f61f9c
4 changed files with 11 additions and 11 deletions

View file

@ -67,7 +67,7 @@ final class NotificationManager {
guard remindersEnabled, authorization == .authorized else { return } guard remindersEnabled, authorization == .authorized else { return }
let content = UNMutableNotificationContent() let content = UNMutableNotificationContent()
content.title = "Cards" content.title = "Cardecky"
content.body = "Ein paar Karten warten auf dich." content.body = "Ein paar Karten warten auf dich."
content.sound = .default content.sound = .default

View file

@ -10,7 +10,7 @@ struct LoginView: View {
ZStack { ZStack {
CardsTheme.background.ignoresSafeArea() CardsTheme.background.ignoresSafeArea()
VStack(spacing: 24) { VStack(spacing: 24) {
Text("Cards") Text("Cardecky")
.font(.system(size: 48, weight: .bold)) .font(.system(size: 48, weight: .bold))
.foregroundStyle(CardsTheme.primary) .foregroundStyle(CardsTheme.primary)
Text("Karteikarten des Vereins mana e.V.") Text("Karteikarten des Vereins mana e.V.")

View file

@ -4,11 +4,11 @@ final class CardsNativeUITests: XCTestCase {
func testAppLaunches() throws { func testAppLaunches() throws {
let app = XCUIApplication() let app = XCUIApplication()
app.launch() app.launch()
// App ist gestartet, sobald entweder das LoginView "Cards" // App ist gestartet, sobald entweder das LoginView "Cardecky"
// oder das DeckListView mit "Decks" sichtbar ist. Welcher // oder das DeckListView mit "Decks" sichtbar ist. Welcher
// von beiden hängt davon ab, ob der Simulator-Keychain noch // von beiden hängt davon ab, ob der Simulator-Keychain noch
// eine Session hält. // eine Session hält.
let loginTitle = app.staticTexts["Cards"] let loginTitle = app.staticTexts["Cardecky"]
let decksTitle = app.staticTexts["Decks"] let decksTitle = app.staticTexts["Decks"]
let exploreTab = app.staticTexts["Entdecken"] let exploreTab = app.staticTexts["Entdecken"]
@ -21,6 +21,6 @@ final class CardsNativeUITests: XCTestCase {
} }
usleep(100_000) usleep(100_000)
} }
XCTAssertTrue(found, "Erwartete App-Surface (Cards | Decks | Entdecken) erschien nicht innerhalb 5 s") XCTAssertTrue(found, "Erwartete App-Surface (Cardecky | Decks | Entdecken) erschien nicht innerhalb 5 s")
} }
} }

View file

@ -55,9 +55,9 @@ targets:
path: Sources/Resources/Info.plist path: Sources/Resources/Info.plist
properties: properties:
CFBundleShortVersionString: "0.1.0" CFBundleShortVersionString: "0.1.0"
CFBundleVersion: "1" CFBundleVersion: "2"
CFBundleDevelopmentRegion: de CFBundleDevelopmentRegion: de
CFBundleDisplayName: Cards CFBundleDisplayName: Cardecky
LSApplicationCategoryType: "public.app-category.education" LSApplicationCategoryType: "public.app-category.education"
UILaunchScreen: {} UILaunchScreen: {}
UISupportedInterfaceOrientations: UISupportedInterfaceOrientations:
@ -111,7 +111,7 @@ targets:
properties: properties:
CFBundleDisplayName: Als Karte speichern CFBundleDisplayName: Als Karte speichern
CFBundleShortVersionString: "0.1.0" CFBundleShortVersionString: "0.1.0"
CFBundleVersion: "1" CFBundleVersion: "2"
NSExtension: NSExtension:
NSExtensionPointIdentifier: com.apple.share-services NSExtensionPointIdentifier: com.apple.share-services
NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).ShareViewController NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).ShareViewController
@ -142,9 +142,9 @@ targets:
info: info:
path: Widgets/CardsWidget/Resources/Info.plist path: Widgets/CardsWidget/Resources/Info.plist
properties: properties:
CFBundleDisplayName: Cards Widget CFBundleDisplayName: Cardecky Widget
CFBundleShortVersionString: "0.1.0" CFBundleShortVersionString: "0.1.0"
CFBundleVersion: "1" CFBundleVersion: "2"
NSExtension: NSExtension:
NSExtensionPointIdentifier: com.apple.widgetkit-extension NSExtensionPointIdentifier: com.apple.widgetkit-extension
entitlements: entitlements:
@ -160,7 +160,7 @@ targets:
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.cardecky.widget PRODUCT_BUNDLE_IDENTIFIER: ev.mana.cardecky.widget
CODE_SIGN_STYLE: Automatic CODE_SIGN_STYLE: Automatic
SKIP_INSTALL: "YES" SKIP_INSTALL: "YES"
INFOPLIST_KEY_CFBundleDisplayName: Cards Widget INFOPLIST_KEY_CFBundleDisplayName: Cardecky Widget
CardsNativeTests: CardsNativeTests:
type: bundle.unit-test type: bundle.unit-test