A Kotlin Multiplatform Mobile (KMM) application for the DevFest Nantes conference, providing attendees with schedules, speaker information, venue details, and more.
Get the app from the official app stores:
- Android: Play Store
- iOS: App Store
This project uses Kotlin Multiplatform Mobile (KMM) to share business logic between Android and iOS while maintaining platform-specific UI implementations.
DevFestNantes/
βββ shared/ # Shared business logic, models, and API clients
βββ shared-ui/ # Shared UI components and resources (experimental)
βββ androidApp/ # Android-specific UI and platform implementations
βββ iosApp/ # iOS-specific UI and platform implementations
βββ gradle/ # Gradle version catalog and wrapper
βββ buildSrc/ # Build configuration and plugins
- Kotlin Multiplatform for shared business logic
- Apollo GraphQL for API communication
- Kotlinx Coroutines for asynchronous programming
- Kotlinx Serialization for JSON handling
- KMP-NativeCoroutines for iOS coroutines integration
- Jetpack Compose for modern UI
- Dagger Hilt for dependency injection
- Navigation Component for app navigation
- Material 3 design system
- Firebase for analytics, crash reporting, and performance monitoring (with user consent)
- SwiftUI for native iOS UI
- Swift Package Manager for dependencies
- iOS 15.0+ minimum deployment target
-
Android Development:
- Android Studio (latest stable)
- JDK 17
- Android SDK 36
-
iOS Development:
- Xcode 15.0+
- macOS 13.0+ (for iOS development)
- iOS 15.0+ deployment target
-
Clone the repository:
git clone https://github.com/GDG-Nantes/DevfestNantesMobile.git cd DevfestNantesMobile
-
Android Setup:
# Open in Android Studio # The project should sync automatically # Or build from command line ./gradlew :androidApp:assembleDebug
-
iOS Setup:
# Generate the Kotlin framework for iOS ./gradlew :shared:linkDebugFrameworkIosSimulatorArm64 # Open iOS project in Xcode open iosApp/iosApp.xcodeproj # Build and run in Xcode or from command line xcodebuild -project iosApp/iosApp.xcodeproj -scheme iosApp -configuration Debug build
- Shared Module Development: Make changes to business logic in the
shared/
module - Android UI: Implement Android-specific UI in
androidApp/
using Jetpack Compose - iOS UI: Implement iOS-specific UI in
iosApp/
using SwiftUI - Testing: Run platform-specific tests and shared module tests
For detailed setup instructions, see documentation/DEVELOPMENT.md.
The app follows a clean architecture pattern with clear separation of concerns:
- Data Layer (
shared/
): GraphQL client, repositories, and data models - Domain Layer (
shared/
): Business logic and use cases - Presentation Layer (platform-specific): ViewModels and UI components
- π Event Schedule: Browse conference sessions by day, track, and time
- π€ Speaker Profiles: Detailed speaker information and social links
- π Venue Information: Interactive venue maps and navigation
- β Bookmarks: Save favorite sessions for easy access
- π Offline Support: Cached data for offline viewing
- π Multi-language: Support for French and English
- π Privacy-First: User consent system for analytics and performance monitoring
- GraphQL Server: Powered by Confetti
- Feedback System: OpenFeedback.io integration
- Analytics: Firebase Analytics, Crashlytics, and Performance Monitoring (respects user consent)
- Version Management: Gradle version catalog (
gradle/libs.versions.toml
)
The project uses Calendar Versioning (CalVer) with the YYYY.0M.MICRO
format:
- YYYY: Full year (e.g., 2025)
- 0M: Zero-padded month (e.g., 07 for July)
- MICRO: Patch version (e.g., 00)
This approach aligns releases with the DevFest Nantes conference schedule and provides clear timeline visibility. Version management is handled by project maintainers through GitHub releases.
- Code Quality: Detekt for static analysis
- Build System: Gradle with Kotlin DSL
- Testing: JUnit, KMM test framework
- CI/CD: GitHub Actions (configuration in
.github/
)
See documentation/DEVELOPMENT.md for
instructions on updating your local schema.graphqls
file using the Apollo Gradle plugin and custom
headers.
The project includes comprehensive testing at multiple levels:
- Unit Tests: Business logic testing in the shared module
- Platform Tests: Android and iOS specific testing
- Integration Tests: End-to-end feature testing
Run tests with:
# All tests
./gradlew test
# Android tests
./gradlew :androidApp:testDebugUnitTest
# Shared module tests
./gradlew :shared:test
We welcome contributions! Please see our contribution guidelines for details on:
- Setting up your development environment
- Code style and conventions
- Submitting pull requests
- Reporting issues
- Follow the established coding standards (see
.github/copilot-instructions.md
) - Add tests for new features
- Update documentation as needed
- Use conventional commit messages
- Architecture Guide - Detailed architecture overview
- Development Setup - Complete setup instructions
- Performance Monitoring - Firebase Performance implementation and usage
- Versioning Strategy - Calendar versioning implementation and guidelines
- API Documentation - GraphQL API integration details
- Testing Guide - Testing strategies and best practices
- Troubleshooting - Common issues and solutions
- Build System - Gradle and build configuration details
This project is licensed under the MIT License - see the LICENSE file for details.
This project is adapted from the Android Makers app:
Special thanks to the GDG Nantes community and all contributors who make this project possible.