Conferences4Hall
Real life Kotlin Multiplatform project with an iOS application developed in Swift with SwiftUI, an Android application developed in Kotlin with Jetpack Compose and a backed in Kotlin hosted on AppEngine.
Features
- Create the agenda of your conference, optionally from Conference Hall
- Fetch your partners from CMS4Partners
- Create your feedback forms to OpenFeedback.io
- Import a participant ticket from BilletWeb
- Networking space which respect privacy from mobile to mobile
- Mobile application for Android and iOS
Build With
- Kotlin - First class and official programming language for Android development
- Jetpack Compose - Modern toolkit for building native UI
- Accompanist - Collection of extension libraries for Jetpack Compose
- Coil - Media management and image loading framework for Android
- ViewModel - Stores UI-related data that isn't destroyed on UI changes
- Navigation Compose - Allow users to navigate across, into, and back out from the different pieces of content within your app
- Swift - First class and official programming language for iOS development
- SwiftUI - Build apps across all Apple platforms with Swift
- Kotlin Coroutines - Light-weight threads
- kotlinx.serialization - Kotlin Multiplatform / multi format serialization
- SQLDelight - Generates typesafe Kotlin APIs from SQL
- Multiplatform Settings - Kotlin Multiplatform library for saving simple key-value data
- ktor - Client to make HTTP request and HTTP server routing
- Firestore - JVM client to make request on Firestore
- Storage - JVM client to make request on Storage
Architecture
Kotlin Multiplatform project where :androidApp
and :iosApp
share the same codebase for the business logic (with :shared
module). :backend
and :shared
modules share the same models due to :models
module and avoid any errors in the parsing of backend responses.
flowchart LR
:androidApp --> :shared
:iosApp --> :shared
:shared --> :models
:backend --> :models
Testing
Running in local
Start firebase emulators inside a terminal with Firestore service.
firebase login # If you are not yet logged
firebase emulators:start --project $RANDOM_FIREBASE_PROJECT_ID
Start appengine server inside another terminal to interact with the local instance of your Firebase.
# Export credential of a random GCP account.
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
./gradlew :backend:installDist && ./backend/build/install/backend/bin/backend
Now, you can start to interact with the backend.
Deploy in GCP
# If you are not yet logged
gcloud auth login
gcloud config set project $PROJECT_ID
# Deploy in production
./gradlew :backend:appengineDeploy
References
License
Copyright 2022 Gérard Paligot.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.