v1.1 polish: accessibility, error logging, localization, and code quality sweep
- Wrap 30+ production print() statements in #if DEBUG guards across 18 files - Add VoiceOver labels, hints, and traits to Watch app, Live Activities, widgets - Add .accessibilityAddTraits(.isButton) to 15+ onTapGesture views - Add text alternatives for color-only indicators (progress dots, mood circles) - Localize raw string literals in NoteEditorView, EntryDetailView, widgets - Replace 25+ silent try? with do/catch + AppLogger error logging - Replace hardcoded font sizes with semantic Dynamic Type fonts - Fix FIXME in IconPickerView (log icon change errors) - Extract magic animation delays to named constants across 8 files - Add widget empty state "Log your first mood!" messaging - Hide decorative images from VoiceOver, add labels to ColorPickers - Remove stale TODO in Color+Codable (alpha change deferred for migration) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -307,8 +307,16 @@ class IAPManager: ObservableObject {
|
||||
|
||||
// Get renewal info
|
||||
if let product = currentProduct,
|
||||
let subscription = product.subscription,
|
||||
let statuses = try? await subscription.status {
|
||||
let subscription = product.subscription {
|
||||
let statuses: [Product.SubscriptionInfo.Status]
|
||||
do {
|
||||
statuses = try await subscription.status
|
||||
} catch {
|
||||
AppLogger.iap.error("Failed to fetch subscription status for \(product.id): \(error)")
|
||||
// Fallback handled below
|
||||
state = .subscribed(expirationDate: transaction.expirationDate, willAutoRenew: false)
|
||||
return true
|
||||
}
|
||||
var hadVerifiedStatus = false
|
||||
|
||||
for status in statuses {
|
||||
|
||||
Reference in New Issue
Block a user