# Mobile Code Quality Skill

**Description**: Comprehensive code quality checks for native mobile apps (iOS/Swift and Android/Kotlin).

## When to Use

- Before mobile app releases
- During development sprints
- In CI/CD pipelines for mobile
- When onboarding new mobile developers

## Prerequisites

### iOS Development

```bash
# Install SwiftLint
brew install swiftlint

# Verify installation
swiftlint version
```

### Android Development

```bash
# Ensure Android SDK is installed
echo $ANDROID_HOME  # Should point to Android SDK path
```

## Phase 1: MindLyst Native (Kotlin Multiplatform)

```bash
cd $HOME/code/mygh/learning_multimodal_memory_agents/mindlyst-native

# 1. Full project build
./gradlew build
# If fails: fix, then git add . && git commit -m "fix(mindlyst): build fixes" && git push

# 2. Kotlin compilation checks
./gradlew compileKotlinMetadata
./gradlew :shared:compileKotlinIosSimulatorArm64
./gradlew :shared:compileKotlinAndroid
# If fails: fix, commit push

# 3. Kotlin Lint with ktlint
./gradlew ktlintCheck
# If fails: auto-fix with ./gradlew ktlintFormat, then git add . && git commit -m "style(mindlyst): ktlint fixes"

# 4. Static Analysis with Detekt
./gradlew detekt
# If fails: fix issues, then git add . && git commit -m "fix(mindlyst): detekt issues"

# 5. Unit tests
./gradlew test
./gradlew :shared:test
# If fails: fix, commit push
```

### Android Specific Checks (if SDK available)

```bash
./gradlew :androidApp:lintDebug
./gradlew :androidApp:testDebugUnitTest
# If fails: fix, commit push
```

### iOS Specific Checks

```bash
cd ../iosApp

# SwiftLint check
swiftlint
# If fails: auto-fix with swiftlint --fix, then git add . && git commit -m "style(mindlyst): swiftlint fixes"

# Swift format (if configured)
# swiftformat .
```

## Phase 2: LysnrAI Mobile Components

```bash
cd $HOME/code/mygh/learning_voice_ai_agent/mobile_app

# 1. Android checks
cd android
./gradlew build
./gradlew lintDebug
./gradlew testDebugUnitTest
# If fails: fix, commit push

# 2. iOS checks
cd ../ios/LysnrAI
xcodebuild -project LysnrAI.xcodeproj -scheme LysnrAI -configuration Debug build
swiftlint
# If fails: fix, commit push

# 3. Common checks
cd ../common
# Python lint for shared scripts
python -m ruff check .
python -m ruff format .
# If fails: fix, commit push
```

## Phase 3: Cross-Platform Consistency

### Design Token Synchronization

```bash
cd $HOME/code/mygh/learning_multimodal_memory_agents

# Check if tokens are in sync
./scripts/sync-design-tokens.sh --check
# If fails: run ./scripts/sync-design-tokens.sh, then git add . && git commit
```

### Feature Flag Consistency

```bash
# Verify feature flags are consistent across platforms
grep -r "FEATURE_" mindlyst-native/shared/src/commonMain/kotlin/
grep -r "FEATURE_" ../learning_voice_ai_agent/mobile_app/common/
```

### API Contract Validation

```bash
# Compare shared API models across platforms
diff mindlyst-native/shared/src/commonMain/kotlin/api/ \
     ../learning_voice_ai_agent/mobile_app/common/api/ || echo "API differences found"
```

## Phase 4: Performance and Security

### Android Performance

```bash
cd $HOME/code/mygh/learning_multimodal_memory_agents/mindlyst-native

./gradlew :androidApp:assembleDebug

# Check APK size
ls -lh androidApp/build/outputs/apk/debug/
```

### iOS Performance

```bash
cd ../iosApp

xcodebuild -project LysnrAI.xcodeproj -scheme LysnrAI -configuration Release \
  -destination 'platform=iOS Simulator,name=iPhone 15' clean build
```

### Security Scan

```bash
# Android dependency check
./gradlew dependencyCheckAnalyze

# iOS (if using mob security)
# mob security check
```

## Quality Gates and Metrics

### Coverage Targets

| Platform      | Unit Tests | UI Tests | Coverage          |
| ------------- | ---------- | -------- | ----------------- |
| Kotlin Shared | 80%        | N/A      | JaCoCo reports    |
| Android App   | 70%        | 30%      | Espresso + JUnit  |
| iOS App       | 70%        | 30%      | XCTest + XCUITest |

### Lint Rules

- **Kotlin**: Official ktlint rules + custom Detekt rules
- **Swift**: SwiftLint default + custom rules
- **Android**: Android lint default rules

### Performance Budgets

- **Android APK**: < 50MB
- **iOS IPA**: < 100MB
- **Build time**: < 5 minutes

## Automation Scripts

### Setup Script (`scripts/setup-mobile-quality.sh`)

```bash
#!/bin/bash
# Install mobile code quality tools

# SwiftLint
if ! command -v swiftlint &> /dev/null; then
  brew install swiftlint
fi

# Kotlin formatting (add to gradle)
echo "Add ktlint plugin to build.gradle.kts"
echo "Add detekt plugin to build.gradle.kts"
```

### Pre-commit Hook (`.husky/pre-commit-mobile`)

```bash
#!/bin/sh
# Mobile-specific pre-commit hooks

# Kotlin files
if git diff --cached --name-only | grep -E "\.kt$"; then
  cd mindlyst-native
  ./gradlew ktlintCheck
  ./gradlew detekt
fi

# Swift files
if git diff --cached --name-only | grep -E "\.swift$"; then
  cd iosApp
  swiftlint
fi
```

## CI/CD Integration

### GitHub Actions Example

```yaml
name: Mobile Code Quality
on: [push, pull_request]

jobs:
  kotlin:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17
      - run: ./gradlew ktlintCheck detekt test

  ios:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - run: brew install swiftlint
      - run: cd iosApp && swiftlint
      - run: xcodebuild -project LysnrAI.xcodeproj -scheme LysnrAI build
```

## Troubleshooting

### Common Issues

1. **SwiftLint not found**: Install via Homebrew
2. **Kotlin lint fails**: Run `./gradlew ktlintFormat` to auto-fix
3. **Detekt issues**: Check `detekt.yml` configuration
4. **Android SDK missing**: Set $ANDROID_HOME correctly

### Performance Tips

- Use `--daemon` for Gradle
- Enable Gradle build cache
- Use parallel execution where possible

## Reporting

### Generate Quality Report

```bash
# Combined report
./gradlew check jacocoTestReport
open shared/build/reports/jacoco/jacocoTestReport/html/index.html

# Android lint report
open androidApp/build/reports/lint-results-debug.html

# SwiftLint report (JSON)
swiftlint --reporter json > swiftlint-report.json
```

## Commit Patterns

```bash
fix(mobile): ktlint fixes
style(ios): swiftlint fixes
fix(android): lint issues
test(mobile): add unit tests
perf(mobile): reduce APK size
```

## Notes

- **Run before major releases**: Always run full workflow
- **Incremental checks**: Use pre-commit hooks for immediate feedback
- **Cross-platform consistency**: Regular sync meetings recommended
- **Tool versions**: Keep linting tools updated consistently across team

## Related Skills

- [Production Readiness](./production-readiness.md) - Full release validation
- [Debug Service](./debug-service.md) - When tests fail
- [Test Strategies](./test-strategies.md) - Writing effective mobile tests
