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:
@@ -258,12 +258,26 @@ class CoreDataStack: ObservableObject {
|
||||
// MARK: - Remote Change Handling
|
||||
|
||||
@objc private func processRemoteChanges(_ notification: Notification) {
|
||||
// Process remote changes on main context
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.objectWillChange.send()
|
||||
// Ensure changes are persisted to disk before refreshing widget
|
||||
self?.save()
|
||||
self?.refreshWidgetData()
|
||||
guard let self else { return }
|
||||
// Force viewContext to re-read all objects from the persistent store,
|
||||
// which now contains the changes CloudKit just synced from other devices.
|
||||
// This triggers NSManagedObjectContextObjectsDidChange so all repositories
|
||||
// automatically re-fetch and push fresh data to ViewModels.
|
||||
self.viewContext.refreshAllObjects()
|
||||
self.objectWillChange.send()
|
||||
self.save()
|
||||
self.refreshWidgetData()
|
||||
}
|
||||
}
|
||||
|
||||
/// Forces an immediate re-read of all Core Data objects from the persistent store.
|
||||
/// Call this when the app returns to the foreground so any iCloud changes made on
|
||||
/// other devices (while this device was inactive) are picked up right away.
|
||||
func refreshFromCloudKit() {
|
||||
guard Self.cloudKitEnabled else { return }
|
||||
viewContext.perform { [weak self] in
|
||||
self?.viewContext.refreshAllObjects()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user