Some things to check before releasing a mobile application. Slightly iOS specific.
Startup
- Start in different orientations
- Start app with no internet connection
- Delete all user data. Is the first start behaving correctly?
- Install and use previous version of app. User data migrated correctly?
OS
- Dark mode support working? Switching on any screen?
- OS-wide font size applied?
- Locale/language changes applied correctly?
- Accesibility labels for everything?
Network
- Initial start without internet
- Try using each page of the app without internet
- Turn off internet, go back to previous page
- Is network outage during video playback handled well?
- Wake up after a long time (week-month). Detected & refreshed?
- Is the app usable on a slow or unreliable network connection?
Layout & navigation
- Rotate back and forth each page
- Rotate and go back to previous page
- Play fullscreen video, rotate during playback, close. Layout updated correctly?
- Blurry text anywhere? Enable highlighting of misaligned layers in Simulator
- During a call, does the double height status bar break any layouts?
- Tap a button 2-3 times really quickly. Only one screen instance created?
- Look for navigation loops. Detail -> push info -> push detail -> push info etc.
Buttons
- All buttons/elements trigger on touch up and NOT touch down?
- All disabled/highlighted/hover/pushed states displayed correctly?
- Are buttons large enough to hit on small screen?
Lists & views
- Do all lists scroll to top after changing the sorting order?
- Do all views show an “empty results” text when no data is available?
- Showing a loading indicator when loading data takes >1s?
Tracking
- Is analytics tracking working? Correct tracking IDs?
- Crash reports actually sent and saved? Symbolication working?
Prolonged usage
- Keep app running, use whole day, overnight. Still performing well?
- Open & close a screen (open detail, go back). Repeat ~15 times. If it leaks memory it can eventually lead to a crash.
Input fields
- Is the keyboard mode correct for all input fields?
- Email keyboard layout for email input, numeric for phone numbers etc.
- Placeholder text in fields that need it?
- Is there a clear “X” button in fields that need it?
- In email input fields, is the email format verified?
- If maximum length is specified for fields, is the limit really applied? Even when a longer text is pasted? From input fields to local storage, to server and back?
- If no maximum was specified, does the app actually work with very long inputs, long words, special characters? Does it break any layout, internal DB, server backend API?
- Is it easy to hide the onscreen keyboard when needed?
- Does auto-completion work as it should? Does it limit the number of results after typing a single letter? Does input still work when auto-completion API is offline?
Search input
- Make a search, open one of the results, go back. Is the search text still there?
- Does search for empty string work correctly? Single letter? Spaces? Special @#?:/ unicode emoji characters? Extra long strings? Extra long words?
Interruptions
- Put phone to sleep and on again
- Switch to another app and back
- Simulate memory warning, go back to previous page
- Simulate incoming call. App resumes correctly when call ends?
Date & time
- Date formatting correct for different locale settings? No broken layouts?
- Does it handle daylight saving changes correctly? Really?
- Does it handle timezone changes correctly? Start app, suspend, change timezone, resume app. Works?
Sharing
- Does social sharing actually work? Posts appear on FB/Twitter site? Correct title, body, images, links?
- Correct Facebook app ID?
- Does sharing work with and without the official Facebook/Twitter app installed on the device? Automatic login through the app?
- Does the app show correct feedback message after sending/cancelling/failing?
- Is the sharing email correctly formatted? In GMail, Outlook and Mail? On a mobile device?
Storage & output
- If the app has some web caching mechanism, does it correctly restrict itself from using too much storage?
- Does the app behave correctly when the device storage is full? (Load music or videos to your device to fill it up OR place simulator folder in a APFS volume/disk image with limited size)
- Does the app correctly handle having its cache folders deleted by iOS? (Run in simulator and delete using Finder)
- Does the app limit its console output in Release mode? ie. no excess debug information printed – only errors.
Legal
- Acknowledgements page up to date with all 3rd party code/asset licensing info?
- Is it possible to turn off usage tracking? Is the user warned about usage tracking on first start?
- If the app has a built-in browser, is it OK to receive a 17+ rating in the app store?
OS versions
- Fully functional on all supported OS versions?
- Is it possible to run and use the last supported version on older devices/systems? Legacy API?
Devices
- Does the app support all screen sizes in both orientations?