Xcode 27: compila sin warnings y migra API deprecadas de SwiftUI

- Imports de CoreData que faltaban (MemberImportVisibility) en AccountsView,
  ImportDataView, ChartsContainerView y AddSourceView.
- Aislamiento MainActor: IsolatedDefaultValues en el target de la app,
  LinearGradient @MainActor, WatchSyncMessage nonisolated, closures de
  ReviewPromptService/MonthlyCheckInStore/AppIntents.
- Warnings de valores sin usar (SnapshotGapDetector, DashboardLayoutStore,
  OnboardingView, GoalEditorView, CoreDataStack, SettingsViewModel).
- foregroundColor→foregroundStyle, cornerRadius→clipShape,
  navigationBarLeading/Trailing→topBarLeading/Trailing,
  Task.sleep(nanoseconds:)→sleep(for:), NavigationLink(isActive:)→
  navigationDestination(isPresented:).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
This commit is contained in:
alexandrev-tibco
2026-09-16 11:44:49 +02:00
parent 464fbb2bad
commit a8a9ad64f3
39 changed files with 420 additions and 414 deletions
@@ -41,7 +41,7 @@ struct GoalEditorView: View {
TextField("Goal name", text: $name)
HStack {
Text(currencySymbol)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
TextField("Target amount", text: $targetAmount)
.keyboardType(.decimalPad)
}
@@ -73,10 +73,10 @@ struct GoalEditorView: View {
}
.navigationTitle(goal == nil ? "New Goal" : "Edit Goal")
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
ToolbarItem(placement: .topBarLeading) {
Button("Cancel") { dismiss() }
}
ToolbarItem(placement: .navigationBarTrailing) {
ToolbarItem(placement: .topBarTrailing) {
Button("Save") { saveGoal() }
.disabled(!isValid)
}
@@ -86,7 +86,7 @@ struct GoalEditorView: View {
.presentationDragIndicator(.visible)
.onAppear {
guard let goal, !didLoadGoal else { return }
name = goal.name ?? ""
name = goal.name
if let amount = goal.targetAmount?.decimalValue {
targetAmount = formatDecimalForInput(amount)
}
@@ -26,7 +26,7 @@ struct GoalProgressBar: View {
.overlay(alignment: .leading) {
Image(systemName: iconName)
.font(.caption2)
.foregroundColor(iconColor)
.foregroundStyle(iconColor)
.offset(x: iconOffset)
}
}
@@ -34,10 +34,10 @@ struct GoalShareCardView: View {
VStack(alignment: .leading, spacing: 4) {
Text("Goal Progress")
.font(.caption.weight(.semibold))
.foregroundColor(.white.opacity(0.8))
.foregroundStyle(.white.opacity(0.8))
Text(name)
.font(.title2.weight(.bold))
.foregroundColor(.white)
.foregroundStyle(.white)
}
GoalProgressBar(
@@ -51,27 +51,27 @@ struct GoalShareCardView: View {
Text("\(progressText) complete")
.font(.caption.weight(.semibold))
.foregroundColor(.white.opacity(0.85))
.foregroundStyle(.white.opacity(0.85))
if privacyMode {
HStack {
Text("Progress")
.font(.subheadline.weight(.semibold))
.foregroundColor(.white.opacity(0.9))
.foregroundStyle(.white.opacity(0.9))
Spacer()
Text(progressText)
.font(.headline.weight(.bold))
.foregroundColor(.white)
.foregroundStyle(.white)
}
} else {
HStack {
Text(displayCurrentValue)
.font(.headline)
.foregroundColor(.white)
.foregroundStyle(.white)
Spacer()
Text("of \(targetValue.currencyString)")
.font(.subheadline.weight(.medium))
.foregroundColor(.white.opacity(0.8))
.foregroundStyle(.white.opacity(0.8))
}
}
@@ -82,7 +82,7 @@ struct GoalShareCardView: View {
Text("Target: \(targetDate.mediumDateString)")
.font(.caption.weight(.medium))
}
.foregroundColor(.white.opacity(0.85))
.foregroundStyle(.white.opacity(0.85))
}
if let estimatedCompletionDate {
@@ -92,7 +92,7 @@ struct GoalShareCardView: View {
Text("Est. completion: \(estimatedCompletionDate.mediumDateString)")
.font(.caption.weight(.medium))
}
.foregroundColor(.white.opacity(0.85))
.foregroundStyle(.white.opacity(0.85))
}
if privacyMode {
@@ -101,7 +101,7 @@ struct GoalShareCardView: View {
Text("Privacy mode enabled")
}
.font(.caption.weight(.semibold))
.foregroundColor(.white.opacity(0.7))
.foregroundStyle(.white.opacity(0.7))
}
Spacer(minLength: 0)
@@ -124,10 +124,10 @@ struct GoalShareCardView: View {
VStack(alignment: .leading, spacing: 2) {
Text("Powered by")
.font(.caption2.weight(.medium))
.foregroundColor(.white.opacity(0.7))
.foregroundStyle(.white.opacity(0.7))
Text("Portfolio Journal")
.font(.subheadline.weight(.bold))
.foregroundColor(.white)
.foregroundStyle(.white)
}
Spacer()
@@ -144,7 +144,7 @@ struct GoalShareCardView: View {
Text("Scan to download")
.font(.system(size: 7, weight: .medium))
.foregroundColor(.white.opacity(0.8))
.foregroundStyle(.white.opacity(0.8))
}
} else {
// Fallback if QR code generation fails
@@ -154,7 +154,7 @@ struct GoalShareCardView: View {
Text("App Store")
.font(.caption2.weight(.semibold))
}
.foregroundColor(.white.opacity(0.9))
.foregroundStyle(.white.opacity(0.9))
}
}
}
+22 -22
View File
@@ -72,7 +72,7 @@ struct GoalsView: View {
}
.navigationTitle("Goals")
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
ToolbarItem(placement: .topBarLeading) {
Picker(String(localized: "goals_filter_active"), selection: $goalFilter) {
ForEach(GoalFilter.allCases) { filter in
Text(filter.label).tag(filter)
@@ -80,7 +80,7 @@ struct GoalsView: View {
}
.pickerStyle(.menu)
}
ToolbarItem(placement: .navigationBarTrailing) {
ToolbarItem(placement: .topBarTrailing) {
Button {
showingAddGoal = true
} label: {
@@ -145,19 +145,19 @@ struct GoalsView: View {
VStack(spacing: 16) {
Image(systemName: "target")
.font(.system(size: 48))
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
Text("Set your first goal")
.font(.headline)
Text("Track progress toward milestones like \(AppSettings.getOrCreate(in: CoreDataStack.shared.viewContext).currencySymbol)1M and share your wins.")
.font(.subheadline)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
Button {
showingAddGoal = true
} label: {
Text(String(localized: "goals_empty_add_cta"))
.font(.subheadline.weight(.semibold))
.foregroundColor(.white)
.foregroundStyle(.white)
.padding(.horizontal, 20)
.padding(.vertical, 10)
.background(Color.appPrimary)
@@ -170,13 +170,13 @@ struct GoalsView: View {
VStack(spacing: 12) {
Image(systemName: "archivebox")
.font(.system(size: 40))
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
Text(String(localized: "goals_all_active_achieved"))
.font(.headline)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
Text("Switch to \"Archived\" or \"All\" to see other goals.")
.font(.subheadline)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
}
.frame(maxWidth: .infinity)
@@ -186,10 +186,10 @@ struct GoalsView: View {
VStack(spacing: 12) {
Image(systemName: "archivebox")
.font(.system(size: 40))
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
Text(String(localized: "goals_empty_archived"))
.font(.headline)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
}
.frame(maxWidth: .infinity)
.padding(.vertical, 32)
@@ -197,12 +197,12 @@ struct GoalsView: View {
VStack(spacing: 16) {
Image(systemName: "target")
.font(.system(size: 48))
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
Text("Set your first goal")
.font(.headline)
Text("Track progress toward milestones like \(AppSettings.getOrCreate(in: CoreDataStack.shared.viewContext).currencySymbol)1M and share your wins.")
.font(.subheadline)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
}
.frame(maxWidth: .infinity)
@@ -265,7 +265,7 @@ struct GoalRowView: View {
if isAchieved {
Text("Achieved")
.font(.caption2.weight(.bold))
.foregroundColor(.white)
.foregroundStyle(.white)
.padding(.horizontal, 8)
.padding(.vertical, 3)
.background(Color.appSuccess)
@@ -280,7 +280,7 @@ struct GoalRowView: View {
Text(category.name)
.font(.caption2.weight(.semibold))
}
.foregroundColor(category.color)
.foregroundStyle(category.color)
.padding(.horizontal, 8)
.padding(.vertical, 3)
.background(category.color.opacity(0.15))
@@ -293,21 +293,21 @@ struct GoalRowView: View {
.hiddenBalance()
Text("of \(goal.targetDecimal.currencyString)")
.font(.subheadline)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
.hiddenBalance()
}
if let targetDate = goal.targetDate {
Text("Target date: \(targetDate.mediumDateString)")
.font(.caption)
.foregroundColor(targetDateColor)
.foregroundStyle(targetDateColor)
}
if let paceStatus {
Text(paceStatus.statusText)
.font(.caption.weight(.semibold))
.foregroundColor(
isAchieved ? .appSuccess : (paceStatus.isBehind ? .appWarning : .positiveGreen)
.foregroundStyle(
isAchieved ? Color.appSuccess : (paceStatus.isBehind ? Color.appWarning : Color.positiveGreen)
)
}
@@ -326,7 +326,7 @@ struct GoalRowView: View {
showingShareOptions = true
} label: {
Image(systemName: "square.and.arrow.up")
.foregroundColor(.appPrimary)
.foregroundStyle(Color.appPrimary)
.padding(.top, 2)
}
.buttonStyle(.borderless)
@@ -366,13 +366,13 @@ struct GoalRowView: View {
case .unreachable:
Label(String(localized: "goal_projection_add_contributions"), systemImage: "plus.circle")
.font(.caption)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
default:
HStack(spacing: 8) {
if let date = projection.projectedDate {
Text(String(format: String(localized: "goal_projection_projected"), date.monthYearString))
.font(.caption)
.foregroundColor(.secondary)
.foregroundStyle(.secondary)
}
onTrackChip
Spacer(minLength: 0)
@@ -409,7 +409,7 @@ struct GoalRowView: View {
if projection.status != .unreachable {
Text(chipText)
.font(.caption2.weight(.semibold))
.foregroundColor(chipColor)
.foregroundStyle(chipColor)
.padding(.horizontal, 8)
.padding(.vertical, 3)
.background(chipColor.opacity(0.15))