krz/daybyday

iOS app for children to learn days of the week, months, and seasons with audio assist. education ios kids swift https://krz.sh/apps/daybyday/

Commit 47864264e7

47864264e72636d27a13eb29e6814d8786021788

parent: e25b00d338

Unsigned

cmc <hello@cleberg.net> · 2026-04-14 01:41 UTC

fix: sonarqube quality fixes

Layout: unified · split

DayByDay.xcodeproj/project.pbxproj +4 −4
@@ -338,7 +338,7 @@
338 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 338 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
339 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 339 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
340 CODE_SIGN_STYLE = Automatic; 340 CODE_SIGN_STYLE = Automatic;
341 CURRENT_PROJECT_VERSION = 5; 341 CURRENT_PROJECT_VERSION = 6;
342 DEVELOPMENT_TEAM = ZCNAX3VL9D; 342 DEVELOPMENT_TEAM = ZCNAX3VL9D;
343 ENABLE_PREVIEWS = YES; 343 ENABLE_PREVIEWS = YES;
344 GENERATE_INFOPLIST_FILE = YES; 344 GENERATE_INFOPLIST_FILE = YES;
@@ -353,7 +353,7 @@
353 "$(inherited)", 353 "$(inherited)",
354 "@executable_path/Frameworks", 354 "@executable_path/Frameworks",
355 ); 355 );
356 MARKETING_VERSION = 1.3.1; 356 MARKETING_VERSION = 1.3.2;
357 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DayByDay; 357 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DayByDay;
358 PRODUCT_NAME = "$(TARGET_NAME)"; 358 PRODUCT_NAME = "$(TARGET_NAME)";
359 STRING_CATALOG_GENERATE_SYMBOLS = YES; 359 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -372,7 +372,7 @@
372 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 372 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
373 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 373 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
374 CODE_SIGN_STYLE = Automatic; 374 CODE_SIGN_STYLE = Automatic;
375 CURRENT_PROJECT_VERSION = 5; 375 CURRENT_PROJECT_VERSION = 6;
376 DEVELOPMENT_TEAM = ZCNAX3VL9D; 376 DEVELOPMENT_TEAM = ZCNAX3VL9D;
377 ENABLE_PREVIEWS = YES; 377 ENABLE_PREVIEWS = YES;
378 GENERATE_INFOPLIST_FILE = YES; 378 GENERATE_INFOPLIST_FILE = YES;
@@ -387,7 +387,7 @@
387 "$(inherited)", 387 "$(inherited)",
388 "@executable_path/Frameworks", 388 "@executable_path/Frameworks",
389 ); 389 );
390 MARKETING_VERSION = 1.3.1; 390 MARKETING_VERSION = 1.3.2;
391 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DayByDay; 391 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DayByDay;
392 PRODUCT_NAME = "$(TARGET_NAME)"; 392 PRODUCT_NAME = "$(TARGET_NAME)";
393 STRING_CATALOG_GENERATE_SYMBOLS = YES; 393 STRING_CATALOG_GENERATE_SYMBOLS = YES;
DayByDay/DayCard.swift +7 −1
@@ -12,6 +12,12 @@ struct DayCard: View {
12 var isHighlighted = false 12 var isHighlighted = false
13 @State private var isTapped = false 13 @State private var isTapped = false
14 14
15 private var cardScale: CGFloat {
16 if isTapped { return 1.12 }
17 if isHighlighted { return 1.04 }
18 return 1.0
19 }
20
15 var body: some View { 21 var body: some View {
16 ZStack { 22 ZStack {
17 RoundedRectangle(cornerRadius: 32, style: .continuous) 23 RoundedRectangle(cornerRadius: 32, style: .continuous)
@@ -36,7 +42,7 @@ struct DayCard: View {
36 } 42 }
37 } 43 }
38 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12) 44 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12)
39 .scaleEffect(isTapped ? 1.12 : (isHighlighted ? 1.04 : 1.0)) 45 .scaleEffect(cardScale)
40 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous)) 46 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous))
41 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0)) 47 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0))
42 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped) 48 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped)
DayByDay/MonthCard.swift +7 −1
@@ -12,6 +12,12 @@ struct MonthCard: View {
12 var isHighlighted = false 12 var isHighlighted = false
13 @State private var isTapped = false 13 @State private var isTapped = false
14 14
15 private var cardScale: CGFloat {
16 if isTapped { return 1.12 }
17 if isHighlighted { return 1.04 }
18 return 1.0
19 }
20
15 var body: some View { 21 var body: some View {
16 ZStack { 22 ZStack {
17 RoundedRectangle(cornerRadius: 32, style: .continuous) 23 RoundedRectangle(cornerRadius: 32, style: .continuous)
@@ -36,7 +42,7 @@ struct MonthCard: View {
36 } 42 }
37 } 43 }
38 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12) 44 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12)
39 .scaleEffect(isTapped ? 1.12 : (isHighlighted ? 1.04 : 1.0)) 45 .scaleEffect(cardScale)
40 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous)) 46 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous))
41 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0)) 47 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0))
42 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped) 48 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped)
DayByDay/SeasonCard.swift +7 −1
@@ -12,6 +12,12 @@ struct SeasonCard: View {
12 var isHighlighted = false 12 var isHighlighted = false
13 @State private var isTapped = false 13 @State private var isTapped = false
14 14
15 private var cardScale: CGFloat {
16 if isTapped { return 1.12 }
17 if isHighlighted { return 1.04 }
18 return 1.0
19 }
20
15 var body: some View { 21 var body: some View {
16 ZStack { 22 ZStack {
17 RoundedRectangle(cornerRadius: 32, style: .continuous) 23 RoundedRectangle(cornerRadius: 32, style: .continuous)
@@ -36,7 +42,7 @@ struct SeasonCard: View {
36 } 42 }
37 } 43 }
38 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12) 44 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12)
39 .scaleEffect(isTapped ? 1.12 : (isHighlighted ? 1.04 : 1.0)) 45 .scaleEffect(cardScale)
40 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous)) 46 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous))
41 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0)) 47 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0))
42 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped) 48 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped)
NumberCard.swift +8 −2
@@ -12,6 +12,12 @@ struct NumberCard: View {
12 var isHighlighted = false 12 var isHighlighted = false
13 @State private var isTapped = false 13 @State private var isTapped = false
14 14
15 private var cardScale: CGFloat {
16 if isTapped { return 1.12 }
17 if isHighlighted { return 1.04 }
18 return 1.0
19 }
20
15 var body: some View { 21 var body: some View {
16 ZStack { 22 ZStack {
17 RoundedRectangle(cornerRadius: 32, style: .continuous) 23 RoundedRectangle(cornerRadius: 32, style: .continuous)
@@ -39,7 +45,7 @@ struct NumberCard: View {
39 } 45 }
40 } 46 }
41 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12) 47 .shadow(color: isHighlighted ? .white.opacity(0.8) : .clear, radius: 12)
42 .scaleEffect(isTapped ? 1.12 : (isHighlighted ? 1.04 : 1.0)) 48 .scaleEffect(cardScale)
43 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous)) 49 .contentShape(RoundedRectangle(cornerRadius: 32, style: .continuous))
44 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0)) 50 .rotation3DEffect(.degrees(isTapped ? 6 : 0), axis: (x: 1, y: 0, z: 0))
45 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped) 51 .animation(.spring(response: 0.35, dampingFraction: 0.5), value: isTapped)
@@ -60,7 +66,7 @@ struct NumberCard: View {
60enum LearnNumber: Int, CaseIterable, Identifiable { 66enum LearnNumber: Int, CaseIterable, Identifiable {
61 case one = 1, two, three, four, five, six, seven, eight, nine, ten 67 case one = 1, two, three, four, five, six, seven, eight, nine, ten
62 68
63 var id: Int { rawValue } 69 var id: LearnNumber { self }
64 70
65 /// Highlight the number matching today's day-of-month if it falls in 1–10. 71 /// Highlight the number matching today's day-of-month if it falls in 1–10.
66 static var current: LearnNumber? { 72 static var current: LearnNumber? {