# Kotlin-Multiplatform (Android, iOS, JS & JVM Desktop App)


[](https://www.gnu.org/licenses/gpl-3.0)
This example shows how to create a simple Android/iOS/JVM/JS project sharing some Kotlin code. This app saves on a local database your favourites locations and get the current weather of them from OpenWeatherMap.
In this app we share common code for both platforms (Android/iOS) to get data from an API (in this case OpenWeatherMap). The libraries that we use are:
- [KTOR](https://github.com/ktorio/ktor): to make HTTP requests
- [Serialization](https://github.com/Kotlin/kotlinx.serialization): to De/Serializing JSON
- [SqlDelight](https://github.com/square/sqldelight): Local database shared between Android & iOS
Tests:
- [MockK](https://mockk.io/#gradlemaven-dependency): mocking library for Kotlin
### Android App - Master Branch
With this app you can get the weather of your locations using KTor:
And add and save on SQLDelight database your favourite locations:
### iOS App
Open XCode and select the project:
### JVM - Desktop App
To execute this version as desktop app, you have to execute this code on your console:
```
./gradlew JavaFxApp:run
```
By default the JDBC SQLite is created in memory. If you want to persist your database in your disk, you have to indicate the path when you create the database driver:
```
SQLDriver.kt
JdbcSqliteDriver("jdbc:sqlite:$your_database_path")
```
### JS App
If you want to launch a web to get the weather you can try executing the next commands:
```
./gradlew JsApp:run
./gradlew BackEnd:run
--> localhost:8080
```
Current weather is not shown when you launch the browser? If you have this problem (Module not found: Error: Can't resolve 'core-js/features/object/assign') try to reinstall the node module core-js:
```
npm install core-js
```
I have followed these examples:
https://kotlinlang.org/docs/tutorials/native/mpp-ios-android.html
https://www.raywenderlich.com/1022411-kotlin-multiplatform-project-for-android-and-ios-getting-started
https://proandroiddev.com/kotlin-multiplatform-very-beginners-guide-part-3-database-e34c92daf41c