Improve subscription UI and fix trial date handling

Lock Screen:
- Add light/dark mode support with adaptive colors
- Make passcode text tappable to trigger authentication

Trial Date Fixes:
- Fix IAPManager to read firstLaunchDate directly from UserDefaults
- Add expiration date check (> Date()) before showing "expires in" text
- Show "Trial expired" when trial end date is in the past
- Disable subscription bypass in DEBUG mode for testing

Month/Year Subscribe Prompts:
- Redesign with gradient icons and compelling copy
- Add fade mask (100% at top to 0% at 50%) for content behind
- Position subscribe overlay on bottom half of screen
- Month: purple/pink theme with calendar icon
- Year: orange/pink theme with chart icon

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-12-24 10:54:01 -06:00
parent 745e226ecb
commit cc9f9f9427
8 changed files with 275 additions and 78 deletions

View File

@@ -1183,6 +1183,10 @@
"comment" : "An accessibility label for the section of the settings view that indicates that Apple Health is not available on the user's device.",
"isCommentAutoGenerated" : true
},
"are safe here" : {
"comment" : "A description of the safety of the app's \"Aurora background\".",
"isCommentAutoGenerated" : true
},
"Are you sure you want to delete this mood entry? This cannot be undone." : {
"comment" : "An alert message displayed when the user attempts to delete a mood entry.",
"isCommentAutoGenerated" : true,
@@ -1269,6 +1273,7 @@
},
"Authenticate to access your mood data" : {
"comment" : "A description of the purpose of the authentication process in the lock screen.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
@@ -1309,6 +1314,10 @@
}
}
},
"Authenticate to continue your journey" : {
"comment" : "A description of the action required to unlock the app.",
"isCommentAutoGenerated" : true
},
"Authentication Failed" : {
"comment" : "An alert title when authentication fails.",
"isCommentAutoGenerated" : true,
@@ -4310,6 +4319,10 @@
}
}
},
"Discover your emotional rhythm across the year. Spot trends and celebrate how far you've come." : {
"comment" : "A description of what the \"See Your Year at a Glance\" feature does.",
"isCommentAutoGenerated" : true
},
"Don't break your streak!" : {
"comment" : "A description of the current streak or a motivational message.",
"isCommentAutoGenerated" : true,
@@ -4692,6 +4705,10 @@
}
}
},
"Explore Your Mood History" : {
"comment" : "A title for a feature that allows users to explore their mood history.",
"isCommentAutoGenerated" : true
},
"Export" : {
"comment" : "A button label that triggers data export.",
"isCommentAutoGenerated" : true,
@@ -5076,6 +5093,7 @@
},
"Feels is Locked" : {
"comment" : "The title of the lock screen.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
@@ -10781,6 +10799,13 @@
}
}
},
"See your complete monthly journey. Track patterns and understand what shapes your days." : {
},
"See Your Year at a Glance" : {
"comment" : "A title for a feature that lets users see their year's emotional trends.",
"isCommentAutoGenerated" : true
},
"Select this mood" : {
"comment" : "A hint that appears when a user taps on a mood button.",
"isCommentAutoGenerated" : true
@@ -11653,6 +11678,7 @@
},
"Subscribe to see your full year" : {
"comment" : "A button label that appears when the user is subscribed to Feels.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
@@ -13088,6 +13114,10 @@
}
}
},
"Unlock Full History" : {
"comment" : "A button label that appears when a user is on a free trial and wants to unlock all of their mood history.",
"isCommentAutoGenerated" : true
},
"Unlock Premium" : {
"comment" : "A button label that says \"Unlock Premium\".",
"isCommentAutoGenerated" : true,
@@ -13174,6 +13204,7 @@
},
"Unlock with %@" : {
"comment" : "A button label that instructs the user to unlock their device using their biometric authentication method. The text inside the parentheses is replaced with the name of the biometric authentication method available on the user's device (e.g",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
@@ -13214,6 +13245,10 @@
}
}
},
"Unlock Year Overview" : {
"comment" : "A button label that appears when the user is not a premium subscriber, encouraging them to subscribe to unlock more features.",
"isCommentAutoGenerated" : true
},
"Use Siri to Log Moods" : {
"localizations" : {
"de" : {
@@ -14186,6 +14221,10 @@
}
}
}
},
"Your Feelings" : {
"comment" : "The title of the main screen in the lock screen.",
"isCommentAutoGenerated" : true
}
},
"version" : "1.1"