Mobile Development
One skill for building mobile apps on iOS and Android — with per-framework
depth for native (Swift/SwiftUI, Kotlin/Jetpack Compose) and cross-platform
(Flutter, React Native) stacks. All four share one agent workflow — scaffold,
build and sign, test on devices and emulators, and ship to stores — so they live
in ONE family skill with per-framework references, following the
frontend-engineering precedent. Load the shared workflow below, then pull the
reference for the framework you are actually building.
| Framework |
Stack |
Reference (load on demand) |
| iOS |
Swift, SwiftUI/UIKit, Xcode |
references/ios.md |
| Android |
Kotlin, Jetpack Compose, Gradle |
references/android.md |
| Flutter |
Dart, Flutter SDK |
references/flutter.md |
| React Native |
TypeScript/JavaScript, React, Metro |
references/react-native.md |
When to use
Load this skill when the task involves any part of the mobile lifecycle:
- Scaffold — creating a new mobile project for iOS, Android, Flutter, or
React Native: choosing the framework, initializing the project, and setting up
the platform toolchains.
- Build and sign — compiling a debug or release build, configuring code
signing (certificates, provisioning profiles, keystores, app signing), or
producing distributable artifacts (
.ipa, APK, AAB).
- Test on devices and emulators — running and debugging on iOS simulators,
Android emulators, or physical devices, including device provisioning,
connectivity, and platform-specific runtime behavior.
- Ship to stores — submitting to the App Store (TestFlight, App Store
Connect) or Google Play (internal/closed/open testing tracks, Play Console),
and reasoning about store review readiness.
- Mobile-specific behavior — app lifecycle and backgrounding, offline
storage and sync, push notifications, deep links, and mobile testing
(unit, widget, UI, and device-farm testing).
When not to use
- Web frontends — component architecture, state management, and browser
behavior belong to frontend-engineering;
this skill covers apps that run on iOS and Android devices.
- Backend services and APIs — server-side logic, API design, and data
persistence on the server belong to
backend-engineering. Mobile apps consume
those APIs; they do not replace them.
- Desktop or web platform targets — Flutter for desktop/web and React
Native for web (React Native Web) have different delivery and testing
surfaces; this skill is scoped to the iOS and Android app store platforms.
- Cross-platform web-first development — if the deliverable is a website or
PWA, use frontend-engineering instead.
The Mobile Engineer's Domain
| You own |
You don't own |
| Mobile app architecture — platform structure, app entry points, navigation, and state management on the device |
Backend APIs, data models, and server-side persistence — that's the backend-engineering |
| Framework and toolchain setup — Xcode/Gradle project config, Flutter/React Native scaffolding, dependency management |
Web frontend architecture and browser behavior — that's the frontend-engineering |
| Builds and signing — debug/release builds, certificates, provisioning profiles, keystores, app signing, versioning and build numbers |
Release orchestration and rollout process for server software — that's the release-engineering |
| Device and emulator testing — simulators, emulators, physical devices, adb/xcrun device workflows |
Test strategy, coverage, and quality gates for the whole product — that's the qa-methodology |
| Mobile-specific concerns — lifecycle/backgrounding, offline and sync, push, deep links, mobile performance |
User journeys, wireframes, and interaction design — that's the product-design-and-ux |
| Store submission — TestFlight, App Store Connect, Play Console, release tracks, store listing metadata |
CI/CD pipeline infrastructure — that's the platform-engineer |
The Shared Mobile Workflow
Every mobile task follows the same four steps regardless of framework. Deep
framework-specific detail is deferred to the per-framework reference — read it
at the step where it matters.
1. Scaffold
Pin down what the app is before generating code:
- Platform and framework — native iOS, native Android, Flutter, or React
Native. Choose based on team skills, target audience, and per-feature needs
(see Core Principles).
- Minimum OS versions — the oldest iOS and Android versions you will
support; every decision below (APIs, dependencies, testing) flows from this.
- Project initialization — generate the project with the framework's
canonical tool (
xcodebuild/Xcode template, Android Studio/Gradle, flutter create, npx @react-native-community/cli init or create-expo-app), and
commit the scaffold before adding app code so toolchain upgrades stay
reviewable.
- Source of truth — a single project root that builds both platforms when
using a cross-platform framework, so the artifact is reproducible from the
repository.
2. Build and sign
A build that only works on your machine is not a build:
- Build once, in CI — the release build must reproduce on a clean machine
or CI runner, not just in your IDE. Pin toolchain versions (Xcode, JDK/Gradle,
Flutter SDK, Node).
- Signing is separate from building — keep signing assets (certificates,
provisioning profiles, keystores) out of the repository; reference them via
environment or secure secret storage. See the per-framework reference for
where each platform expects them.
- Distinguishable artifacts — version numbers and build numbers must
increment per release so testers and crash reports can identify the build.
- Know your artifact format —
.ipa for iOS, APK and AAB for Android,
and the framework-specific intermediates. Store submission has hard format
requirements (for example, Google Play requires AAB for new apps).
3. Test on devices and emulators
Test where the code runs, not where it is convenient:
- Emulators/simulators for speed, devices for truth — simulators and
emulators are fast and scriptable, but physical devices reveal real
networking, battery, memory, and sensor behavior. Cover both.
- Cold install — test a fresh install (not just a rebuild over the old
version) to catch first-launch, storage, and migration bugs.
- Device matrix — cover the OS versions and screen sizes you declared in
scope, plus low-memory and low-storage conditions. Use a device farm
(Firebase Test Lab, BrowserStack, Xcode Cloud) when the matrix outgrows local
hardware.
- Debug and release parity — the debug build and the release build are
different programs (proguard/minification, stripping, optimization). Smoke
test the signed release artifact before store submission.
4. Ship to stores
Submission is a checklist, not an afterthought:
- Test track first — distribute to TestFlight (iOS) and an internal or
closed testing track (Android) before production; the store will not be your
first real device feedback loop.
- Store readiness — metadata, screenshots, privacy policy, data-collection
declarations, and privacy nutrition labels must match what the app actually
does. Review requirements change; re-check them near submission time.
- Review expectations — both stores reject apps for missing privacy
disclosures, misleading metadata, crashes on launch, and broken sign-in or
in-app purchase flows. Run the app through the platform's review checklist
before uploading.
- Rollout — prefer staged rollouts (phased release on Play, gradual
release on App Store Connect) so a regression reaches few users before it
reaches everyone.
Mobile-Specific Concerns
These concerns are where mobile engineering differs from web and desktop work.
App lifecycle and backgrounding
Mobile OSes kill and suspend apps aggressively; the lifecycle is not optional:
- Lifecycle states — iOS (foreground/background/inactive, scene-based
lifecycle) and Android (activity/fragment states, process death). State that
is not persisted across these transitions is lost.
- Background execution is a privilege — both platforms restrict background
work. Use the platform's sanctioned mechanisms (background modes,
WorkManager,
background fetch, push-driven wakeups) instead of fighting the OS.
- Process death — the OS can kill the app at any time. Save in-progress
state, and restore UI state from storage on relaunch, not from memory.
Offline and sync
Mobile networks are unreliable; offline is a first-class mode:
- Offline-first storage — local persistence (Core Data, Room, SQLite-based
stores, or key-value stores) is the source of truth while disconnected;
the network is a sync channel, not a dependency.
- Sync semantics — define conflict resolution (last-write-wins, per-field
merge, or explicit conflict UI), idempotent writes, and retry with backoff.
Never blindly overwrite newer remote data with stale local data.
- Queue mutations — writes made offline must be queued and replayed in
order when connectivity returns, with a clear sync state surfaced to the user.
Mobile-specific testing
Beyond unit tests, mobile code needs platform-aware testing:
- Unit and widget/component tests — framework-level logic, reducers, and
state without a device (XCTest, JUnit, Flutter widget tests, Jest).
- UI/instrumentation tests — drive the real UI on a device or emulator
(XCUITest, Espresso/Compose UI tests, Flutter
integration_test, Detox).
- Device-farm coverage — run the UI suite across the device matrix on a
farm; a test that passes on one device is not a guarantee.
- Performance and battery — measure launch time, frame rate, memory, and
network on device, not just functionality.
Core Principles
Pick the framework by the constraints, not the hype — native iOS and
Android give the deepest platform integration; Flutter and React Native give
shared code across platforms. The right choice depends on team skills, the
device APIs the app needs, and how much per-platform work is acceptable. Match
the decision to the app's actual requirements.
The OS lifecycle is part of the contract — mobile apps are suspended,
killed, and backgrounded constantly. Any feature that assumes the app is always
alive and online will break. Design for process death and disconnection from
the first commit.
Signing and builds are release engineering, not CI garnish — an app that
cannot be reproducibly built and signed cannot be released, patched, or
audited. Keep signing assets secret, pinned, and scriptable, and treat the
release pipeline as production infrastructure.
Test the artifact you ship — the signed release build, not the debug build,
is what users and reviewers see. Smoke-test it on a real device before it
reaches TestFlight, Play, or the App Review team.
Store requirements are moving targets — privacy declarations, target API
levels, and submission formats change every year. Verify requirements against
the current store documentation near submission time rather than relying on
remembered rules.
Related skills
- frontend-engineering — web frontend
methodology; the sibling family-skill precedent this skill mirrors, and the
routing target for browser-based UI work.
- backend-engineering — the APIs and
services mobile apps consume; the routing target for server-side work.
- release-engineering — release
orchestration, versioning, and rollout methodology; store releases are one
instance of the discipline.
- qa-methodology — test strategy and quality
gates; the routing target for product-wide test planning.
- platform-engineering — CI/CD pipelines
and build infrastructure for shipping mobile builds at scale.
1---2name: mobile-development3description: Build, test, sign, and ship mobile apps across iOS, Android, Flutter, and React Native — project scaffolding, builds and code signing, device and emulator testing, store submission (App Store and Play Store), app lifecycle and backgrounding, offline and sync, and mobile-specific testing. Use when the task involves creating, building, testing, or shipping a mobile app for iOS or Android, or reasoning about mobile behavior such as background execution, push notifications, offline storage, and data sync. Do not use for web frontend work (that is frontend-engineering), backend services and APIs (that is backend-engineering), or desktop and web platform targets outside the iOS and Android scope.4license: MIT5---6
7# Mobile Development
8
9One skill for building mobile apps on **iOS** and **Android** — with per-framework
10depth for native (Swift/SwiftUI, Kotlin/Jetpack Compose) and cross-platform
11(Flutter, React Native) stacks. All four share one agent workflow — scaffold,
12build and sign, test on devices and emulators, and ship to stores — so they live
13in **ONE family skill** with per-framework references, following the
14`frontend-engineering` precedent. Load the shared workflow below, then pull the
15reference for the framework you are actually building.
16
17| Framework | Stack | Reference (load on demand) |
18|-----------|-------|----------------------------|
19| iOS | Swift, SwiftUI/UIKit, Xcode | [references/ios.md](references/ios.md) |
20| Android | Kotlin, Jetpack Compose, Gradle | [references/android.md](references/android.md) |
21| Flutter | Dart, Flutter SDK | [references/flutter.md](references/flutter.md) |
22| React Native | TypeScript/JavaScript, React, Metro | [references/react-native.md](references/react-native.md) |
23
24## When to use
25
26Load this skill when the task involves any part of the mobile lifecycle:
27
28- **Scaffold** — creating a new mobile project for iOS, Android, Flutter, or
29 React Native: choosing the framework, initializing the project, and setting up
30 the platform toolchains.
31- **Build and sign** — compiling a debug or release build, configuring code
32 signing (certificates, provisioning profiles, keystores, app signing), or
33 producing distributable artifacts (`.ipa`, APK, AAB).
34- **Test on devices and emulators** — running and debugging on iOS simulators,
35 Android emulators, or physical devices, including device provisioning,
36 connectivity, and platform-specific runtime behavior.
37- **Ship to stores** — submitting to the App Store (TestFlight, App Store
38 Connect) or Google Play (internal/closed/open testing tracks, Play Console),
39 and reasoning about store review readiness.
40- **Mobile-specific behavior** — app lifecycle and backgrounding, offline
41 storage and sync, push notifications, deep links, and mobile testing
42 (unit, widget, UI, and device-farm testing).
43
44## When not to use
45
46- **Web frontends** — component architecture, state management, and browser
47 behavior belong to [frontend-engineering](../frontend-engineering/SKILL.md);
48 this skill covers apps that run on iOS and Android devices.
49- **Backend services and APIs** — server-side logic, API design, and data
50 persistence on the server belong to
51 [backend-engineering](../backend-engineering/SKILL.md). Mobile apps consume
52 those APIs; they do not replace them.
53- **Desktop or web platform targets** — Flutter for desktop/web and React
54 Native for web (React Native Web) have different delivery and testing
55 surfaces; this skill is scoped to the iOS and Android app store platforms.
56- **Cross-platform web-first development** — if the deliverable is a website or
57 PWA, use frontend-engineering instead.
58
59## The Mobile Engineer's Domain
60
61| You own | You don't own |
62|---------|--------------|
63| Mobile app architecture — platform structure, app entry points, navigation, and state management on the device | Backend APIs, data models, and server-side persistence — that's the backend-engineering |
64| Framework and toolchain setup — Xcode/Gradle project config, Flutter/React Native scaffolding, dependency management | Web frontend architecture and browser behavior — that's the frontend-engineering |
65| Builds and signing — debug/release builds, certificates, provisioning profiles, keystores, app signing, versioning and build numbers | Release orchestration and rollout process for server software — that's the release-engineering |
66| Device and emulator testing — simulators, emulators, physical devices, adb/xcrun device workflows | Test strategy, coverage, and quality gates for the whole product — that's the qa-methodology |
67| Mobile-specific concerns — lifecycle/backgrounding, offline and sync, push, deep links, mobile performance | User journeys, wireframes, and interaction design — that's the product-design-and-ux |
68| Store submission — TestFlight, App Store Connect, Play Console, release tracks, store listing metadata | CI/CD pipeline infrastructure — that's the platform-engineer |
69
70## The Shared Mobile Workflow
71
72Every mobile task follows the same four steps regardless of framework. Deep
73framework-specific detail is deferred to the per-framework reference — read it
74at the step where it matters.
75
76### 1. Scaffold
77
78Pin down what the app is before generating code:
79
80- **Platform and framework** — native iOS, native Android, Flutter, or React
81 Native. Choose based on team skills, target audience, and per-feature needs
82 (see Core Principles).
83- **Minimum OS versions** — the oldest iOS and Android versions you will
84 support; every decision below (APIs, dependencies, testing) flows from this.
85- **Project initialization** — generate the project with the framework's
86 canonical tool (`xcodebuild`/Xcode template, Android Studio/Gradle, `flutter
87 create`, `npx @react-native-community/cli init` or `create-expo-app`), and
88 commit the scaffold before adding app code so toolchain upgrades stay
89 reviewable.
90- **Source of truth** — a single project root that builds both platforms when
91 using a cross-platform framework, so the artifact is reproducible from the
92 repository.
93
94### 2. Build and sign
95
96A build that only works on your machine is not a build:
97
98- **Build once, in CI** — the release build must reproduce on a clean machine
99 or CI runner, not just in your IDE. Pin toolchain versions (Xcode, JDK/Gradle,
100 Flutter SDK, Node).
101- **Signing is separate from building** — keep signing assets (certificates,
102 provisioning profiles, keystores) out of the repository; reference them via
103 environment or secure secret storage. See the per-framework reference for
104 where each platform expects them.
105- **Distinguishable artifacts** — version numbers and build numbers must
106 increment per release so testers and crash reports can identify the build.
107- **Know your artifact format** — `.ipa` for iOS, APK and AAB for Android,
108 and the framework-specific intermediates. Store submission has hard format
109 requirements (for example, Google Play requires AAB for new apps).
110
111### 3. Test on devices and emulators
112
113Test where the code runs, not where it is convenient:
114
115- **Emulators/simulators for speed, devices for truth** — simulators and
116 emulators are fast and scriptable, but physical devices reveal real
117 networking, battery, memory, and sensor behavior. Cover both.
118- **Cold install** — test a fresh install (not just a rebuild over the old
119 version) to catch first-launch, storage, and migration bugs.
120- **Device matrix** — cover the OS versions and screen sizes you declared in
121 scope, plus low-memory and low-storage conditions. Use a device farm
122 (Firebase Test Lab, BrowserStack, Xcode Cloud) when the matrix outgrows local
123 hardware.
124- **Debug and release parity** — the debug build and the release build are
125 different programs (proguard/minification, stripping, optimization). Smoke
126 test the signed release artifact before store submission.
127
128### 4. Ship to stores
129
130Submission is a checklist, not an afterthought:
131
132- **Test track first** — distribute to TestFlight (iOS) and an internal or
133 closed testing track (Android) before production; the store will not be your
134 first real device feedback loop.
135- **Store readiness** — metadata, screenshots, privacy policy, data-collection
136 declarations, and privacy nutrition labels must match what the app actually
137 does. Review requirements change; re-check them near submission time.
138- **Review expectations** — both stores reject apps for missing privacy
139 disclosures, misleading metadata, crashes on launch, and broken sign-in or
140 in-app purchase flows. Run the app through the platform's review checklist
141 before uploading.
142- **Rollout** — prefer staged rollouts (phased release on Play, gradual
143 release on App Store Connect) so a regression reaches few users before it
144 reaches everyone.
145
146## Mobile-Specific Concerns
147
148These concerns are where mobile engineering differs from web and desktop work.
149
150### App lifecycle and backgrounding
151
152Mobile OSes kill and suspend apps aggressively; the lifecycle is not optional:
153
154- **Lifecycle states** — iOS (foreground/background/inactive, scene-based
155 lifecycle) and Android (activity/fragment states, process death). State that
156 is not persisted across these transitions is lost.
157- **Background execution is a privilege** — both platforms restrict background
158 work. Use the platform's sanctioned mechanisms (background modes, `WorkManager`,
159 background fetch, push-driven wakeups) instead of fighting the OS.
160- **Process death** — the OS can kill the app at any time. Save in-progress
161 state, and restore UI state from storage on relaunch, not from memory.
162
163### Offline and sync
164
165Mobile networks are unreliable; offline is a first-class mode:
166
167- **Offline-first storage** — local persistence (Core Data, Room, SQLite-based
168 stores, or key-value stores) is the source of truth while disconnected;
169 the network is a sync channel, not a dependency.
170- **Sync semantics** — define conflict resolution (last-write-wins, per-field
171 merge, or explicit conflict UI), idempotent writes, and retry with backoff.
172 Never blindly overwrite newer remote data with stale local data.
173- **Queue mutations** — writes made offline must be queued and replayed in
174 order when connectivity returns, with a clear sync state surfaced to the user.
175
176### Mobile-specific testing
177
178Beyond unit tests, mobile code needs platform-aware testing:
179
180- **Unit and widget/component tests** — framework-level logic, reducers, and
181 state without a device (XCTest, JUnit, Flutter widget tests, Jest).
182- **UI/instrumentation tests** — drive the real UI on a device or emulator
183 (XCUITest, Espresso/Compose UI tests, Flutter `integration_test`, Detox).
184- **Device-farm coverage** — run the UI suite across the device matrix on a
185 farm; a test that passes on one device is not a guarantee.
186- **Performance and battery** — measure launch time, frame rate, memory, and
187 network on device, not just functionality.
188
189## Core Principles
190
191**Pick the framework by the constraints, not the hype** — native iOS and
192Android give the deepest platform integration; Flutter and React Native give
193shared code across platforms. The right choice depends on team skills, the
194device APIs the app needs, and how much per-platform work is acceptable. Match
195the decision to the app's actual requirements.
196
197**The OS lifecycle is part of the contract** — mobile apps are suspended,
198killed, and backgrounded constantly. Any feature that assumes the app is always
199alive and online will break. Design for process death and disconnection from
200the first commit.
201
202**Signing and builds are release engineering, not CI garnish** — an app that
203cannot be reproducibly built and signed cannot be released, patched, or
204audited. Keep signing assets secret, pinned, and scriptable, and treat the
205release pipeline as production infrastructure.
206
207**Test the artifact you ship** — the signed release build, not the debug build,
208is what users and reviewers see. Smoke-test it on a real device before it
209reaches TestFlight, Play, or the App Review team.
210
211**Store requirements are moving targets** — privacy declarations, target API
212levels, and submission formats change every year. Verify requirements against
213the current store documentation near submission time rather than relying on
214remembered rules.
215
216## Related skills
217
218- [frontend-engineering](../frontend-engineering/SKILL.md) — web frontend
219 methodology; the sibling family-skill precedent this skill mirrors, and the
220 routing target for browser-based UI work.
221- [backend-engineering](../backend-engineering/SKILL.md) — the APIs and
222 services mobile apps consume; the routing target for server-side work.
223- [release-engineering](../release-engineering/SKILL.md) — release
224 orchestration, versioning, and rollout methodology; store releases are one
225 instance of the discipline.
226- [qa-methodology](../qa-methodology/SKILL.md) — test strategy and quality
227 gates; the routing target for product-wide test planning.
228- [platform-engineering](../platform-engineering/SKILL.md) — CI/CD pipelines
229 and build infrastructure for shipping mobile builds at scale.