Mobile Development

Build mobile app screens, navigation, and platform-specific features. Supports three platforms: React Native + Expo (cross-platform), Swift/SwiftUI (native iOS), and Kotlin/Jetpack Compose (native Android). Use this skill when a mobile task is ready for implementation.

5 stars

Best use case

Mobile Development is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Build mobile app screens, navigation, and platform-specific features. Supports three platforms: React Native + Expo (cross-platform), Swift/SwiftUI (native iOS), and Kotlin/Jetpack Compose (native Android). Use this skill when a mobile task is ready for implementation.

Teams using Mobile Development should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/mobile-dev/SKILL.md --create-dirs "https://raw.githubusercontent.com/BasharAmso/Bashi/main/.claude/skills/mobile-dev/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/mobile-dev/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How Mobile Development Compares

Feature / AgentMobile DevelopmentStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Build mobile app screens, navigation, and platform-specific features. Supports three platforms: React Native + Expo (cross-platform), Swift/SwiftUI (native iOS), and Kotlin/Jetpack Compose (native Android). Use this skill when a mobile task is ready for implementation.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Skill: Mobile Development

## Metadata

| Field | Value |
|-------|-------|
| **Skill ID** | SKL-0007 |
| **Version** | 2.0 |
| **Owner** | builder |
| **Inputs** | Task description, DECISIONS.md, existing mobile files |
| **Outputs** | Mobile app files, STATE.md updated |
| **Triggers** | `MOBILE_TASK_READY` |

---

## Purpose

Build mobile apps for iOS, Android, or both. Three supported platforms: React Native + Expo (cross-platform, default), Swift/SwiftUI (native iOS), Kotlin/Jetpack Compose (native Android). Default: React Native + Expo unless DECISIONS.md specifies otherwise.

---

## Stack Defaults

### React Native + Expo (Cross-Platform)

| Concern | Default | Why |
|---------|---------|-----|
| Framework | React Native + Expo (managed) | Cross-platform, beginner-friendly |
| Navigation | React Navigation | Most widely used |
| State | useState/useContext (simple), Zustand (complex) | Minimal boilerplate |
| Styling | StyleSheet API | No extra dependencies |

### Swift/SwiftUI (Native iOS)

| Concern | Default | Why |
|---------|---------|-----|
| UI Framework | SwiftUI | Apple's modern declarative framework |
| Architecture | MVVM + @Observable | Replaces ObservableObject, granular view updates |
| Navigation | NavigationStack + NavigationPath | Type-safe, supports deep linking (iOS 16+) |
| Dependency Management | Swift Package Manager (SPM) | First-party, built into Xcode |
| Data Persistence | SwiftData (simple), Core Data (complex) | SwiftData is Swift-native; Core Data for heavy relational models |
| Networking | URLSession + async/await | First-party, zero dependencies |
| Min Target | iOS 17 | Enables @Observable, SwiftData, modern SwiftUI |
| Concurrency | async/await + actors | Replaces GCD; Swift 6.2 defaults to @MainActor |
| DI | Protocol-based + @Environment | No third-party framework needed |
| Image Loading | AsyncImage | Built-in, no third-party needed |

### Kotlin/Jetpack Compose (Native Android)

| Concern | Default | Why |
|---------|---------|-----|
| UI Framework | Jetpack Compose | Google's modern declarative toolkit |
| Architecture | MVVM + StateFlow + UDF | Lifecycle-aware, Google-recommended |
| Navigation | Navigation Compose 2.8+ (type-safe routes) | Official, @Serializable data class routes |
| DI | Hilt | Official Android DI, minimal boilerplate |
| Data Persistence | Room (relational), DataStore (preferences) | Room for structured data, DataStore replaces SharedPreferences |
| Networking | Retrofit + OkHttp + kotlinx.serialization | Industry standard, coroutine support |
| Build System | Gradle + Kotlin DSL + Version Catalogs | Centralized dependency management |
| Min Target | API 26 (Android 8.0) | Covers 95%+ devices, notification channels, java.time |
| Concurrency | Kotlin Coroutines + Flow | Structured concurrency |
| Image Loading | Coil | Kotlin-first, Compose-native |

---

## Procedure

1. **Determine platform and style.** Read DECISIONS.md for platform choice. If none exists, ask the user:
   - **Platform:** "React Native (cross-platform), Swift (iOS only), or Kotlin (Android only)?"
   - **Architecture pattern:** "MVVM (default — works for most apps), MVI (best for complex state like chat or multi-step forms), or Clean Architecture (enterprise, strict layering)?"
   - **Data persistence:** iOS: "SwiftData (default, modern) or Core Data (complex relational models)?" / Android: "Room (default, structured data) or DataStore (simple preferences only)?"

   Log all choices to DECISIONS.md. Load the matching Stack Defaults.

2. **Confirm stack choices.** Read DECISIONS.md for any overrides to the stack defaults (e.g., alternative navigation library, different min target). If no decisions exist for a concern, use the default and log it.

3. **Understand the task.** Screen/feature, target platforms, device capabilities needed, data sources.

4. **Build the screen/feature:**
   - **React Native:** Follow platform UI conventions, use `Platform.select()` for platform-specific code, no hardcoded pixel sizes — use Dimensions API or percentages
   - **Swift/SwiftUI:** Use `NavigationStack` for navigation, `@Observable` classes for ViewModels, `@Environment` for DI, `.task {}` for async loading. Follow feature-based folder structure:
     ```
     Features/
       Home/
         HomeView.swift
         HomeViewModel.swift
         Components/
     ```
   - **Kotlin/Compose:** Use `@Composable` functions, `collectAsStateWithLifecycle()` for StateFlow, `@HiltViewModel` for ViewModels, Material 3 components. Follow feature-based structure:
     ```
     feature/home/
       HomeScreen.kt
       HomeViewModel.kt
       components/
     ```
     For medium+ apps, use multi-module: `:feature:home`, `:core:data`, `:core:ui`

5. **Handle all states:** loading, error, empty, populated — every data-dependent component.
   - **React Native:** Conditional rendering with loading/error/empty states
   - **Swift/SwiftUI:** Use `switch` on a state enum (e.g., `enum ViewState { case loading, error(Error), empty, loaded([Item]) }`) with `.overlay` or `Group`
   - **Kotlin/Compose:** Use `sealed interface UiState` with `when` expression in Compose

6. **Device considerations:**
   - **All platforms:** Request permissions only when the user triggers the feature that needs it. Show a rationale screen before the system dialog. Handle denial gracefully with guidance to Settings.
   - **React Native:** SafeAreaView on all screens, KeyboardAvoidingView on forms
   - **Swift/SwiftUI:** Use `.ignoresSafeArea()` deliberately (not by default), handle keyboard with `@FocusState` + `.scrollDismissesKeyboard()`, support Dynamic Type (avoid fixed font sizes)
   - **Kotlin/Compose:** Use `Modifier.systemBarsPadding()` for edge-to-edge, `enableEdgeToEdge()` in Activity, handle configuration changes properly (no state loss on rotation)

7. **Performance:**
   - **React Native:** FlatList for lists >20 items, no anonymous functions in render, explicit image dimensions
   - **Swift/SwiftUI:** `LazyVStack`/`LazyHStack` for long lists, avoid expensive computations in `body`, use `.task` (not `.onAppear`) for async work, use `@State` sparingly
   - **Kotlin/Compose:** `LazyColumn`/`LazyRow` with stable keys, use `remember`/`derivedStateOf` to avoid unnecessary recomposition, use `immutableList` for stable parameters

8. **App Store flags:**
   - **iOS:** Privacy usage descriptions required (NSCameraUsageDescription, NSLocationWhenInUseUsageDescription, etc.), App Transport Security exceptions, export compliance questionnaire, Mac requirement for building/submitting
   - **Android:** Runtime permissions in AndroidManifest.xml, `targetSdk 35` required for new Play Store submissions, data safety form, content rating questionnaire
   - **React Native:** Both sets of flags apply

9. **Update STATE.md.**

---

## Anti-Patterns

Platform-specific mistakes the agent must never generate:

**Swift/iOS — do not use:**
- `ObservableObject` + `@Published` — replaced by `@Observable` (iOS 17+)
- `@StateObject` / `@ObservedObject` — use `@State` with `@Observable` classes
- `@EnvironmentObject` — use `@Environment(Type.self)`
- `DispatchQueue` / GCD — use async/await + actors
- UIKit storyboards or XIBs — use SwiftUI views
- `URLSession` completion handlers — use async/await overloads
- `NavigationView` — use `NavigationStack` (deprecated in iOS 16)
- Combine for UI data binding — use `@Observable` + SwiftUI

**Kotlin/Android — do not use:**
- XML layouts — use Jetpack Compose
- `LiveData` — use `StateFlow` + `collectAsStateWithLifecycle()`
- `kapt` — use KSP (2x+ faster annotation processing)
- `findViewById` — use Compose
- `AsyncTask` or raw threads — use Kotlin Coroutines
- `Dagger` directly — use Hilt (simplified DI)
- Groovy build scripts — use Kotlin DSL (`.gradle.kts`)
- `GlobalScope` — use `viewModelScope` or `lifecycleScope`
- `SharedPreferences` — use DataStore

---

## Constraints

- Never modifies web frontend or backend files
- Never hardcodes API keys or credentials
- Never generates deprecated APIs listed in Anti-Patterns
- Always targets iOS 17+ for Swift projects (unless DECISIONS.md overrides)
- Always targets API 26+ for Kotlin projects (unless DECISIONS.md overrides)
- Always includes accessibility modifiers (`.accessibilityLabel()` on iOS, `contentDescription` on Android, `accessibilityLabel` prop on RN)
- Always flags Mac requirement before iOS build/submission tasks
- **Friction check before marking done:** Run Friction Audit Checklist (`.claude/skills/friction-audit/CHECKLIST.md`). Focus on: tap count for primary action, permission timing, onboarding flow length.

---

## Primary Agent

builder

---

## Definition of Done

- [ ] Platform confirmed from DECISIONS.md (React Native, Swift, or Kotlin)
- [ ] Stack choices confirmed or defaults logged
- [ ] Platform UI conventions and project structure followed
- [ ] All four states handled (loading, error, empty, populated)
- [ ] Device considerations addressed (safe areas, keyboard, permissions)
- [ ] Performance patterns followed (lazy lists per platform)
- [ ] Anti-patterns avoided (no deprecated APIs)
- [ ] Accessibility labels present on interactive elements
- [ ] App Store readiness flags noted
- [ ] STATE.md updated

## Output Contract

| Field | Value |
|-------|-------|
| **Artifacts** | Mobile app files (screens, components, navigation, ViewModels) |
| **State Update** | `.claude/project/STATE.md` — mark task complete, log files modified |
| **Decision Log** | `.claude/project/knowledge/DECISIONS.md` — platform, architecture pattern, stack choices |
| **Handoff Event** | `TASK_COMPLETED` (mobile feature built) |

Related Skills

Game Development

5
from BasharAmso/Bashi

Build web-based games across four modes: adventure (narrative + puzzles), sandbox (open world + crafting), action (real-time combat + physics), and educational (learning objectives + adaptive difficulty). Covers game loop, scene management, asset pipeline, input handling, and state persistence.

Frontend Development

5
from BasharAmso/Bashi

Build web UI components, pages, and styling. Includes a mandatory Visual Polish pass that adds scroll animations, micro-interactions, typography rhythm, and design depth. Use this skill when a frontend task is ready for implementation, including React components, CSS, layouts, and responsive design.

Backend Development

5
from BasharAmso/Bashi

Build API endpoints, server logic, and backend services. Use this skill when a backend task is ready for implementation, including REST/GraphQL APIs, middleware, and server-side processing.

Supply Chain Audit

5
from BasharAmso/Bashi

Audit the dependency supply chain for security risks beyond what `npm audit` or `pip audit` catches. Analyzes dependency health, maintainer trust signals, typosquatting risk, and transitive dependency exposure.

SEO Audit

5
from BasharAmso/Bashi

Audit web pages for search engine optimization: meta tags, heading hierarchy, structured data, image optimization, mobile-friendliness, and content quality. Complements SKL-0013 (Growth & Distribution) by validating what was built.

Pitch Deck

5
from BasharAmso/Bashi

Create a structured pitch deck outline for investors, stakeholders, or partners. Covers problem, solution, market, traction, team, and ask. Natural output after PRD + Problem Stress Test validation.

Launch Checklist

5
from BasharAmso/Bashi

Pre-launch validation covering everything deployment (SKL-0021) doesn't: analytics, error tracking, social meta, legal pages, email setup, DNS, SSL, and go-live readiness. Produces a launch readiness report with pass/fail checklist. Use this skill before going live on any project.

Insecure Defaults Detection

5
from BasharAmso/Bashi

Detect insecure default configurations, hardcoded credentials, fail-open security patterns, and dangerous default values in application code and configuration files. Complements SKL-0015 (Security Audit) by focusing on configuration-level vulnerabilities that dependency scanners miss.

Differential Security Review

5
from BasharAmso/Bashi

Security-focused review of code changes using git diff analysis. Identifies security implications of recent modifications — new attack surfaces, removed protections, changed auth logic, and risky refactors. Complements SKL-0016 (Code Review) with a security lens on diffs.

Copywriting

5
from BasharAmso/Bashi

Write conversion-focused copy using proven frameworks (AIDA, PAS, BAB). Produces headlines, CTAs, landing page copy, email sequences, and micro-copy. Ensures copy matches brand voice and target audience.

Competitor Analysis

5
from BasharAmso/Bashi

Structured competitor research: features, pricing, positioning, gaps, and differentiation strategy. Feeds into PRD Writing (SKL-0004) and Problem Stress Test (SKL-0027) with better market context.

UX Design

5
from BasharAmso/Bashi

Design user experiences including wireframes, flows, and interaction patterns. Use this skill when UX design work is requested, including onboarding flows and interface layouts.