Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/deathrashed/agents --skill senior-mobileコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SOC 職業分類に基づく
SKILL.md を表示中
| name | senior-mobile |
| description | null |
| license | MIT + Commons Clause |
| metadata | {"version":"1.0.0","author":"borghei","category":"engineering","domain":"mobile-development","updated":"2026-03-31T00:00:00.000Z","tags":["mobile","ios","android","react-native","flutter","swift","kotlin"]} |
Expert mobile application development across iOS, Android, React Native, and Flutter.
mobile, ios, android, react-native, flutter, swift, kotlin, swiftui, jetpack-compose, expo-router, zustand, app-store, performance, offline-first
# Scaffold a React Native project
python scripts/mobile_scaffold.py --platform react-native --name MyApp
# Build for production
python scripts/build.py --platform ios --env production
# Generate App Store metadata
python scripts/store_metadata.py --screenshots ./screenshots
# Profile rendering performance
python scripts/profile.py --platform android --output report.html
| Script | Purpose |
|---|---|
scripts/mobile_scaffold.py | Scaffold project for react-native, ios, android, or flutter |
scripts/build.py | Build automation with environment and platform flags |
scripts/store_metadata.py | Generate App Store / Play Store listing metadata |
scripts/profile.py | Profile rendering, memory, and startup performance |
| Aspect | Native iOS | Native Android | React Native | Flutter |
|---|---|---|---|---|
| Language | Swift | Kotlin | TypeScript | Dart |
| UI Framework | SwiftUI/UIKit | Compose/XML | React | Widgets |
| Performance | Best | Best | Good | Very Good |
| Code Sharing | None | None | ~80% | ~95% |
| Best For | iOS-only, hardware-heavy | Android-only, hardware-heavy | Web team, shared logic | Maximum code sharing |
python scripts/mobile_scaffold.py --platform react-native --name MyAppsrc/
├── app/ # Expo Router file-based routes
│ ├── (tabs)/ # Tab navigation group
│ ├── auth/ # Auth screens
│ └── _layout.tsx # Root layout
├── components/
│ ├── ui/ # Reusable primitives (Button, Input, Card)
│ └── features/ # Domain components (ProductCard, UserAvatar)
├── hooks/ # Custom hooks (useAuth, useApi)
├── services/ # API clients and storage
├── stores/ # Zustand state stores
└── utils/ # Helpers
app/_layout.tsx with Stack and Tabs.NavigationStack, @StateObject for ViewModel binding, and .task for async data loading.@MainActor class with @Published properties. Inject services via protocol for testability.@Published -> View re-renders..searchable(text:) for filtering, .refreshable for pull-to-refresh.@MainActor
class ProductListViewModel: ObservableObject {
@Published private(set) var products: [Product] = []
@Published private(set) var isLoading = false
@Published private(set) var error: Error?
private let service: ProductServiceProtocol
init(service: ProductServiceProtocol = ProductService()) {
self.service = service
}
func loadProducts() async {
isLoading = true
error = nil
do {
products = try await service.fetchProducts()
} catch {
self.error = error
}
isLoading = false
}
}
Scaffold, TopAppBar, and state collection via collectAsStateWithLifecycle().Loading, Success<T>, Error.@HiltViewModel, MutableStateFlow, and repository injection.LazyColumn with key parameter for stable identity and Arrangement.spacedBy() for spacing.sealed interface UiState<out T> {
data object Loading : UiState<Nothing>
data class Success<T>(val data: T) : UiState<T>
data class Error(val message: String) : UiState<Nothing>
}
@HiltViewModel
class ProductListViewModel @Inject constructor(
private val repository: ProductRepository
) : ViewModel() {
private val _uiState = MutableStateFlow<UiState<List<Product>>>(UiState.Loading)
val uiState: StateFlow<UiState<List<Product>>> = _uiState.asStateFlow()
fun loadProducts() {
viewModelScope.launch {
_uiState.value = UiState.Loading
repository.getProducts()
.catch { e -> _uiState.value = UiState.Error(e.message ?: "Unknown error") }
.collect { products -> _uiState.value = UiState.Success(products) }
}
}
}
python scripts/profile.py --platform <ios|android> --output report.htmlFlatList with keyExtractor, initialNumToRender=10, windowSize=5, removeClippedSubviews=trueReact.memo and handlers with useCallbackgetItemLayout for fixed-height rows to skip measurementprefetchItemsAt for image pre-loading in collection viewssetHasFixedSize(true) and setItemViewCacheSize(20) on RecyclerViewspython scripts/store_metadata.py --screenshots ./screenshotspython scripts/build.py --platform ios --env production| Document | Path |
|---|---|
| React Native Guide | references/react_native_guide.md |
| iOS Patterns | references/ios_patterns.md |
| Android Patterns | references/android_patterns.md |
| App Store Guide | references/app_store_guide.md |
| Full Code Examples | REFERENCE.md |
| Problem | Cause | Solution |
|---|---|---|
| App crashes on launch after adding a new dependency | Incompatible native module version or missing pod install / gradle sync | Run npx pod-install (iOS) or cd android && ./gradlew clean (Android). Verify dependency version compatibility in the changelog. |
| FlatList renders blank or flickers | Missing keyExtractor, unstable keys, or inline renderItem causing full re-renders | Add a stable keyExtractor, wrap renderItem in useCallback, and supply getItemLayout for fixed-height rows. |
| iOS build fails with "signing" error | Provisioning profile mismatch or expired certificate | Open Xcode > Signing & Capabilities, select the correct team and profile. Run security find-identity -v -p codesigning to verify certificates. |
| Android build OOM during dexing | Insufficient JVM heap for large projects | Add org.gradle.jvmargs=-Xmx4096m to gradle.properties. Enable dexOptions { javaMaxHeapSize "4g" } in build.gradle. |
| App Store rejection for missing privacy manifest | Apple requires PrivacyInfo.xcprivacy for apps using required reason APIs (UserDefaults, file timestamp, etc.) | Add a PrivacyInfo.xcprivacy file declaring each required reason API. Run store_metadata_generator.py to review privacy label guidance. |
| Slow cold start time (>3 seconds) | Too many synchronous operations on the main thread at launch, large bundle size, or unoptimized images | Defer non-critical initialization, lazy-load modules, compress images, and use app_performance_analyzer.py to identify bottlenecks. |
| Hot reload / fast refresh stops working | Syntax error in a module boundary, anonymous default export, or class component state | Check terminal for error messages, ensure named exports, and restart the Metro bundler or Flutter daemon with a cache clear. |
app_performance_analyzer.py against the project.store_metadata_generator.py.This skill covers:
This skill does NOT cover:
senior-backend and senior-fullstack skills).senior-devops and release-orchestrator skills).senior-frontend and design-auditor skills).| Skill | Integration | Data Flow |
|---|---|---|
senior-frontend | Shared component patterns, styling conventions, and responsive design principles for React Native web targets | Frontend design tokens and component APIs feed into mobile UI components |
senior-backend | API contract definitions, authentication flows, and data models consumed by mobile clients | Backend OpenAPI specs define mobile service layer interfaces |
senior-devops | Build pipelines, code signing automation, and deployment workflows for mobile releases | Mobile build artifacts flow into CI/CD pipelines for TestFlight / Play Console distribution |
senior-qa | Test strategy alignment, device matrix coverage, and E2E testing patterns for mobile screens | QA test plans drive device coverage; mobile scaffold includes test directory structure |
senior-security | Secure storage patterns (Keychain/Keystore), certificate pinning, and data encryption for mobile apps | Security requirements inform Keychain helper implementation and network client configuration |
release-orchestrator | Version bumping, changelog generation, and coordinated release across iOS and Android | Release metadata and version info flow from orchestrator into store submission workflow |
mobile_scaffold.pyPurpose: Scaffold a production-ready mobile project with proper directory structure, navigation setup, state management, and base configuration files.
Usage:
python scripts/mobile_scaffold.py <name> --platform <platform> [options]
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | positional | Yes | -- | Project name, used as the directory name |
--platform, -p | choice | Yes | -- | Target platform: android-native, flutter, ios-native, react-native |
--typescript, -t | flag | No | False (auto-enabled for react-native) | Use TypeScript (React Native only) |
--state, -s | string | No | none | State management library. React Native: zustand, redux, jotai, none. Flutter: riverpod, bloc, provider, none. Not applicable for native platforms. |
--output-dir, -o | path | No | . (current directory) | Parent directory for the generated project |
--json | flag | No | False | Output result as JSON instead of human-readable summary |
Example:
# Scaffold a React Native app with Zustand state management
python scripts/mobile_scaffold.py MyApp --platform react-native --state zustand
# Scaffold a Flutter app with Riverpod, output as JSON
python scripts/mobile_scaffold.py my-flutter-app --platform flutter --state riverpod --json
# Scaffold an iOS native app in a specific directory
python scripts/mobile_scaffold.py HealthTracker --platform ios-native --output-dir ~/Projects
Output Formats:
--json): Returns a JSON object with project_name, platform, typescript, state_management, output_directory, files_created, and generated_at fields.store_metadata_generator.pyPurpose: Generate structured metadata for App Store (iOS) and Google Play Store (Android) submissions, including title variants, keywords, category recommendations, privacy labels, age rating guidance, and submission checklists.
Usage:
python scripts/store_metadata_generator.py --app-name <name> --category <category> --features <features> [options]
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
--app-name | string | Yes | -- | The app name for store listings |
--category | choice | Yes | -- | Primary app category. Choices: business, education, entertainment, finance, food, games, health, lifestyle, music, navigation, news, photo, productivity, shopping, social, sports, travel, utilities, weather |
--features | string | Yes | -- | Comma-separated list of features (e.g., "offline,sync,biometric"). Recognized features expand into keywords and trigger privacy/age-rating guidance. |
--description | string | No | "" | Short app description used in generated store copy |
--json | flag | No | False | Output results as JSON |
Example:
# Generate metadata for a health app
python scripts/store_metadata_generator.py --app-name "FitTrack" --category health --features "workout,tracking,social" --description "Track your workouts"
# JSON output for CI integration
python scripts/store_metadata_generator.py --app-name "BudgetPal" --category finance --features "payment,offline,biometric,push" --json
Output Formats:
--json): Full metadata object including titles, keywords, categories, descriptions, privacy_labels, age_rating, screenshot_specs, and submission_checklist.app_performance_analyzer.pyPurpose: Analyze a mobile project directory for common performance issues including oversized image assets, re-render patterns, memory leak patterns, bundle size estimation, and platform-specific anti-patterns.
Usage:
python scripts/app_performance_analyzer.py <project_dir> [options]
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
project_dir | positional | Yes | -- | Path to the mobile project directory to analyze |
--platform, -p | choice | No | Auto-detected | Target platform: react-native, flutter, ios-native, android-native. Auto-detected from project files if omitted. |
--json | flag | No | False | Output results as JSON |
Example:
# Analyze with auto-detected platform
python scripts/app_performance_analyzer.py ./my-app
# Analyze a React Native project explicitly
python scripts/app_performance_analyzer.py ./my-app --platform react-native
# JSON output for CI pipeline integration
python scripts/app_performance_analyzer.py ./my-app --platform flutter --json
Output Formats:
--json): Full report object including performance_score, summary, bundle_estimate (source code size, asset size, file counts), issues_by_category, and the flat issues array with category, severity, file, line, and message per issue.