--- name: mobile-platform-conventions description: Where iOS and Android genuinely differ in expected behaviour, and where a shared design is fine. when_to_use: You are designing a screen or flow that ships on both iOS and Android. tags: [mobile, design] --- # Share the layout, respect the platform where it is muscle memory Most of a design ports unchanged. A small number of behaviours are so deeply learned that violating them reads as a bug rather than a style. ## The differences that actually matter | | iOS | Android | |---|---|---| | Back | swipe from left edge; back button top-left | system back gesture/button — **must** work | | Primary nav | tab bar, bottom | bottom nav bar (or drawer) | | Destructive confirm | action sheet from bottom | dialog, centred | | Text input done | "Done" / return key | often the system back dismisses | | Sharing | share sheet | share intent | **System back is the one to get right.** On Android, back must always do something sensible: close the sheet, pop the screen, and at the root, exit. A screen that traps back is broken in a way users will not report — they will just leave. ## Safe areas are not optional Notches, dynamic islands, home indicators and rounded corners all intrude. Anything within 16pt of an edge needs safe-area insets, not fixed padding. Test on a device with a notch and one without. ## Touch targets 44pt minimum on iOS, 48dp on Android. This is the most frequently violated rule in dense interfaces and the most frequently reported as "the app feels unreliable" rather than as a size problem. ## What NOT to differentiate Content layout, spacing scale, typography hierarchy, colour and iconography can and should be shared. Building two visual designs doubles the work and the bugs for a difference users do not notice, and it is the usual reason a "platform conventions" pass runs over. ## Test on the smallest supported device Layouts are usually designed on a large phone and break on a small one, not the reverse. The smallest supported screen at the largest system font size is the worst case, and it takes one simulator run to check.