- Replace hardcoded /Users/sd9235/ paths with $HOME in all SKILLS docs - Use WORKSPACE_DIR variable in backup-main.sh (auto-resolves from script location) - Genericize 'Forcepoint CertChecker' / 'corporate proxy' to 'SSL-intercepting proxy' - Add scripts/switch-network.sh for toggling npm between corporate proxy and home - No functional code changes — only comments, docs, and paths
308 lines
6.8 KiB
Markdown
308 lines
6.8 KiB
Markdown
# 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
|