Note
This branch is designed for partial customized projects. Running the customizer.sh script
doesn't rename any application module, instead it'll change all core and feature module
namespaces, packages, and other related configurations accordingly.
For full customization, please use the full-customizable branch instead.
- Cross-Platform Support: Android, iOS, Desktop, and Web applications from a single codebase
- Multi-Module Architecture: Clean, organized, and scalable project structure
- Advanced Source Set Hierarchy: Sophisticated code sharing structure with logical platform groupings
- Pre-configured CI/CD: GitHub Actions workflows for building, testing, and deployment
- Code Quality Tools: Static analysis and formatting tools pre-configured
- Sync Capabilities: Tools to stay in sync with upstream template changes
- Secrets Management: Secure handling of keystores and sensitive information
- Bash 4.0+
- Unix-like environment (macOS, Linux) or Git Bash on Windows
- Android Studio/IntelliJ IDEA
- Xcode (for iOS development)
- Node.js (for web development)
- Clone the Repository
git clone https://github.com/openMF/kmp-project-template.git
cd kmp-project-template- Run the Customizer
./customizer.sh org.example.myapp MyKMPProject- Build and Run
./gradlew buildThis template includes production-ready iOS deployment infrastructure with support for Firebase App Distribution, TestFlight, and App Store releases.
- macOS with Xcode installed
- Apple Developer Account ($99/year)
- Match Repository for code signing certificates
- App Store Connect API Key
Run the comprehensive iOS setup wizard:
bash scripts/setup_ios_complete.shThe wizard will guide you through:
- β Team ID configuration
- β App Store Connect API key setup
- β Fastlane Match repository configuration
- β Certificate synchronization
- β TestFlight & App Store review contact information
Three deployment targets are available:
| Target | Purpose | Script |
|---|---|---|
| Firebase | Internal testing, QA | bash scripts/deploy_firebase.sh |
| TestFlight | Beta testing | bash scripts/deploy_testflight.sh |
| App Store | Production release | bash scripts/deploy_appstore.sh |
Example:
# Deploy to Firebase for internal testing
bash scripts/deploy_firebase.sh
# Deploy to TestFlight for beta testing
bash scripts/deploy_testflight.sh
# Deploy to App Store for production
bash scripts/deploy_appstore.shThe project uses a shared vs app-specific configuration pattern:
- Shared Config (IOS_SHARED): Team ID, API keys, Match repo - same for all apps
- App-Specific Config (IOS): Bundle ID, Firebase app ID - changes per app
When you run customizer.sh, it updates only app-specific values while preserving shared
infrastructure.
If your app uses Firebase Cloud Messaging:
bash scripts/setup_apn_key.shThe project uses a centralized configuration system for iOS deployment workflows.
Configuration Files:
fastlane-config/project_config.rb- Application-specific configurationsecrets/shared_keys.env- Team-wide credentials and secrets
Configuration Loading:
- Local deployments read from
secrets/shared_keys.env - CI/CD workflows extract configuration from
project_config.rband GitHub Secrets
Setup:
- Configure GitHub Secrets as documented in the iOS Configuration Guide
- Update
project_config.rbwith application-specific values - Execute workflows
Configuration is read from fastlane-config/project_config.rb for both local and CI deployments.
See iOS Configuration Guide for detailed setup instructions.
- Complete iOS Setup Guide - Detailed setup instructions
- iOS Deployment Guide - Deployment workflows and best practices
- GitHub Actions Configuration Guide - CI/CD setup and configuration
The project follows a modular architecture:
- Platform Modules:
cmp-android,cmp-ios,cmp-desktop,cmp-web, etc. - Core Modules: Common, reusable components shared across all features
- Feature Modules: Self-contained feature implementations
- Build Logic: Custom Gradle plugins and build configuration
Our project includes comprehensive documentation to help you get started and understand the architecture:
- Setup Guide - Detailed instructions for setting up your development environment
- Architecture Overview - Explanation of the project's structure and design patterns
- Code Style Guide - Coding conventions and best practices
- Source Set Hierarchy - Guide to the Kotlin Multiplatform code sharing structure
- Sync Script - Information about keeping in sync with upstream changes
- Secrets Manager - Documentation for the keystore and secrets management system
- Fastlane Configuration - Guide to automating deployments with fastlane
Documentation is continuously improving. Check back for updates or contribute to enhancing our docs!
We welcome contributions to improve the project template! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a pull request
Please follow our Contributing Guidelines for detailed information.
- Join our Slack channel
- Report issues on GitHub
- Track progress on Jira
This project is licensed under the Mozilla Public License 2.0
