Release 1.2.1: iCloud sync improvements + ASO multilingual metadata
iCloud sync: - Force viewContext.refreshAllObjects() on remote change notifications so data from other devices is picked up immediately without app restart - Call refreshFromCloudKit() on foreground to merge any changes made while the device was inactive - Wait up to 10s for initial CloudKit sync on launch before showing onboarding (shows "Checking iCloud..." during the wait) - New OnboardingICloudCheckView: shown on fresh installs with iCloud available, lets user restore from iCloud before starting onboarding from scratch Localization: - Added de, fr, it, ja, pt-BR lproj folders - New iCloud onboarding strings in en + es-ES (+ button literals) ASO metadata (fastlane): - Updated en-US: new subtitle, keywords, description (fixed "no cloud sync" claim), promotional text, release notes - Added full metadata for es-ES, de-DE, fr-FR, it, ja, pt-BR (63 files total) - All keyword fields validated ≤100 Unicode chars Infrastructure: - Gemfile + Gemfile.lock for fastlane - Scripts/archive_and_upload_appstore.sh for CI/CD Version: 1.2.1 (build 7) Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -197,6 +197,13 @@
|
||||
"onboarding_goals_title" = "Reach your financial goals";
|
||||
"onboarding_goals_desc" = "Set targets, track milestones, and see exactly how far you've come.";
|
||||
|
||||
// iCloud check before onboarding (1.2.1)
|
||||
"icloud_check_title" = "Already use Portfolio Journal?";
|
||||
"icloud_check_description" = "If you have data on another device, enable iCloud to restore it here.";
|
||||
"icloud_enabled_title" = "iCloud Enabled";
|
||||
"icloud_enabled_description" = "Close the app and reopen it. Your data will load automatically from iCloud.";
|
||||
"checking_icloud" = "Checking iCloud...";
|
||||
|
||||
// MARK: - Errors
|
||||
"error_generic" = "An error occurred. Please try again.";
|
||||
"error_no_purchases" = "No purchases found to restore";
|
||||
@@ -255,3 +262,21 @@
|
||||
"date_never" = "Never";
|
||||
"calendar_event_title" = "%@: Monthly Check-in";
|
||||
"calendar_event_notes" = "Open %@ and complete your monthly check-in.";
|
||||
|
||||
// MARK: - Satisfaction & Review Dialogs
|
||||
"checkin_enjoying_dialog_title" = "How much are you enjoying Portfolio Journal?";
|
||||
"checkin_enjoying_dialog_message" = "Congrats on your new achievement! Your feedback helps us improve.";
|
||||
"not_now" = "Not Now";
|
||||
"rating_1_star" = "1 Star";
|
||||
"rating_n_stars" = "%d Stars";
|
||||
"app_store_review_title" = "Would you like to leave an App Store review?";
|
||||
"app_store_review_message" = "Thanks for the 5 stars. It really helps other investors discover the app.";
|
||||
"write_review" = "Write a Review";
|
||||
|
||||
// MARK: - Batch Update Actions
|
||||
"save_1_snapshot" = "Save 1 Snapshot";
|
||||
"save_n_snapshots" = "Save %d Snapshots";
|
||||
|
||||
// MARK: - Monthly Check-in Card
|
||||
"checkin_update_month" = "Update %@";
|
||||
"checkin_start_new" = "Start";
|
||||
|
||||
Reference in New Issue
Block a user