Update signing configuration to use 88oakapps.feels identifiers
- Update App Group IDs from group.com.tt.feels to group.com.88oakapps.feels - Update iCloud container IDs from iCloud.com.tt.feels to iCloud.com.88oakapps.feels - Sync code constants with entitlements across all targets (iOS, Watch, Widget) - Update documentation in CLAUDE.md and PROJECT_OVERVIEW.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -241,29 +241,40 @@ struct FeelsTipModifier: ViewModifier {
|
||||
let tip: any FeelsTip
|
||||
let gradientColors: [Color]
|
||||
|
||||
@ObservedObject private var tipsManager = FeelsTipsManager.shared
|
||||
// Use local state for sheet to avoid interference from other manager state changes
|
||||
@State private var showSheet = false
|
||||
@State private var hasCheckedEligibility = false
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
content
|
||||
.onAppear {
|
||||
tipsManager.showTipIfEligible(tip)
|
||||
}
|
||||
.sheet(isPresented: $tipsManager.showTipModal) {
|
||||
if let currentTip = tipsManager.currentTip {
|
||||
TipModalView(
|
||||
icon: currentTip.icon,
|
||||
title: currentTip.title,
|
||||
message: currentTip.message,
|
||||
gradientColors: gradientColors,
|
||||
onDismiss: {
|
||||
tipsManager.markTipAsShown(currentTip)
|
||||
}
|
||||
)
|
||||
.presentationDetents([.height(340)])
|
||||
.presentationDragIndicator(.visible)
|
||||
.presentationCornerRadius(28)
|
||||
// Only check eligibility once per view lifetime
|
||||
guard !hasCheckedEligibility else { return }
|
||||
hasCheckedEligibility = true
|
||||
|
||||
// Delay tip presentation to ensure view hierarchy is fully established
|
||||
// This prevents "presenting from detached view controller" errors
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
||||
if FeelsTipsManager.shared.shouldShowTip(tip) {
|
||||
showSheet = true
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showSheet) {
|
||||
TipModalView(
|
||||
icon: tip.icon,
|
||||
title: tip.title,
|
||||
message: tip.message,
|
||||
gradientColors: gradientColors,
|
||||
onDismiss: {
|
||||
showSheet = false
|
||||
FeelsTipsManager.shared.markTipAsShown(tip)
|
||||
}
|
||||
)
|
||||
.presentationDetents([.height(340)])
|
||||
.presentationDragIndicator(.visible)
|
||||
.presentationCornerRadius(28)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user