While witnessing someone else try to use the app for the first time, I realizing the wording on the onboarding screen isn’t great. Help with the language and UX for the onboarding process would be appreciated.
There should also be an explanation about iCloud sync and how it can take a minute to load. It would be a bit complex, but it might be possible to have a loading indicator for sync progress even though Apple’s APIs don’t directly give any indication of this:
- Immediately start observing for Core Data changes with something like a
FetchedResultsController with a delegate on app startup of a new install.
- Perform a very small, fast query to CloudKit. For something like a single Track.
- If the user taps to continue before this process is complete, show a loading modal, potentially with a dismiss button (could be labeled something like “Load in background”, thought that might be confusing unless it’s clearly communicated that it’s connecting to CloudKit)
- Could maybe even be a toast with info on the current sync progress.
- If the request is successful and no data is returned,
- assume this is a new user with no data to sync.
- Dismiss the loading modal.
- Continue to the new user onboarding.
- If the request returns with data,
- assume this is an existing user with CloudKit data to import.
- Wait for the CoreData listener to report changes which would indicate that the automatic CloudKit sync was successful (may have already happened).
- Dismiss loading modal.
- Continue to main app.
- If the request fails,
- show an alert saying that CloudKit sync failed.
- Give the user the option to continue with onboarding.
While witnessing someone else try to use the app for the first time, I realizing the wording on the onboarding screen isn’t great. Help with the language and UX for the onboarding process would be appreciated.
There should also be an explanation about iCloud sync and how it can take a minute to load. It would be a bit complex, but it might be possible to have a loading indicator for sync progress even though Apple’s APIs don’t directly give any indication of this:
FetchedResultsControllerwith a delegate on app startup of a new install.