Creating a robust multiplatform application is an exciting endeavor! With Kotlin Multiplatform, you can share code between iOS and Android platforms, integrating libraries from both ecosystems to enhance your app’s functionality. In this guide, we’ll walk through developing a real-life conference application featuring an iOS frontend through SwiftUI, an Android frontend using Jetpack Compose, and a Kotlin backend hosted on App Engine.
Project Setup
Before diving into the code, it’s essential to set up your development environment:
- Install Kotlin and set up your IDE, like IntelliJ IDEA.
- Create two separate projects: one for iOS and one for Android.
- Configure a Kotlin backend hosted on Google Cloud Platform (GCP).
- Ensure all necessary dependencies and libraries are imported.
Backend Features
Your backend needs to handle various functionalities essential for any conference, including:
- Create the agenda of your conference, optionally using Conference Hall.
- Create feedback forms from OpenFeedback.io.
- Manage partner information through Cms4Partners.
- Import planning details using OpenPlanner.
- Import participant tickets from BilletWeb.
- Pull partner jobs from WeLoveDevs.
Mobile Features
For the mobile applications, implement features that enhance user experience:
- Select your conference from a list.
- View the conference schedule.
- Bookmark talks that interest you.
- Access speaker pages featuring biographies and social links.
- Use a networking space with a focus on privacy.
- Discover partners with descriptions, social links, job postings, and locations.
- Interact on the event page with social links, location, menus, Q&A, and code of conduct.
- Scan your event ticket for easy entry.
- Enjoy your conference experience!
Building with the Right Tools
To create your application, you’ll leverage a robust set of technologies:
- Kotlin: The official language for Android Development.
- Jetpack Compose: A modern toolkit for building native UIs.
- Compose Multiplatform: A unified approach for multiple platforms.
- Accompanist: Extension libraries for Jetpack Compose.
- Coil: Image loading framework for Android.
- ViewModel: Stores UI-related data.
- Navigation Compose: For seamless content navigation.
- Swift: The official language for iOS Development.
- SwiftUI: Framework to build apps across all Apple platforms.
- Koin: Dependency Injection framework for Kotlin.
- Kotlin Coroutines: For lightweight threading.
- kotlinx.serialization: Multi-format serialization.
- SQLDelight: Generates type-safe SQL APIs.
- Okio: Modern I/O library.
- Multiplatform Settings: For saving key-value data.
- Ktor: For HTTP requests.
- Firestore: JVM client to interact with Firestore.
- Storage: For storage requests.
- Drive: For handling documents in Google Drive.
Testing Locally
To ensure everything runs smoothly, you’ll need to test your application locally:
# Start Firebase emulators
firebase login # Log in if not done
firebase emulators:start --project $RANDOM_FIREBASE_PROJECT_ID
# Start App Engine server
export GOOGLE_APPLICATION_CREDENTIALS=path/to/key.json
export PROJECT_ID=$RANDOM_FIREBASE_PROJECT_ID
export BASE_URL_CONFERENCE_HALL=conference-hall.io
./gradlew :backend:installDist
./backend/build/install/backend/bin/backend
Deploying in GCP
When ready to deploy, follow these steps:
Prerequisites
- Create your Gcloud app using: gcloud app create
- Enable billing on your GCP project.
- Enable necessary services (Cloud Build, Firestore, and Secret Manager).
- Store your geocoding API key in Secret Manager.
Deploy with App Engine
# Edit app.yaml with your project ID before deploying
export PROJECT_ID=your-project-id
gcloud auth login # If not yet logged in
gcloud config set project $PROJECT_ID
./gradlew :backend:appengineDeploy
Deploy with Cloud Run
export PROJECT_ID=your-project-id
gcloud auth login # If not yet logged in
gcloud config set project $PROJECT_ID
gcloud run deploy confily --source . --platform managed --port 8080 --region europe-west1 --set-env-vars=PROJECT_ID=$PROJECT_ID --allow-unauthenticated
Troubleshooting Tips
As with any complex project, you may encounter some challenges along the way. Here are some troubleshooting tips:
- If your app does not compile, check for mismatched dependencies or outdated libraries.
- Ensure that your project IDs in configuration files are correct.
- If you face network-related issues, verify your Firebase and GCP settings.
- For deploying issues, double-check that billing accounts are enabled and the necessary permissions are granted to services.
For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.
Conclusion
At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.

