- Project builds & runs on required iOS versions
- Date/times are displayed in correct timezone
- Separation of concerns (separation of view, business logic & service levels, for example).
- Dependency inversion and injection
- No abuse of singletons, class methods & global variables
- No abuse of subclassing
- No overengineering for "religious" reasons (like "using canonical VIPER/MVVM/whatever" or similar)
- Unit and/or integration tests which:
- don't rely on global state (this also means "don't call real API endpoits")
- don't rely on specific simulator or device state
- are isolated & runnable in parallel
- UI tests which
- aren't locale-dependent
- App looks good
- Errors are handled & requests can be retried
- UI never blocks itself
- Dependency manager is being used for 3rd party libraries (Carhage, CocoaPods)
- 3rd party libraries are being used for repetitive stuff like JSON parsing
- No 3rd party libraries which reimplement standard library features
- Atomic commits with messages that make sense
- Data can be refreshed on demand
- Date/times are displayed in localized format