101 lines
3.4 KiB
Markdown
101 lines
3.4 KiB
Markdown
This is a Kotlin Multiplatform project targeting Android, iOS, and a JVM Ktor server.
|
||
|
||
* [/composeApp](./composeApp/src) is for code that will be shared across your Compose Multiplatform applications.
|
||
It contains several subfolders:
|
||
- [commonMain](./composeApp/src/commonMain/kotlin) is for code that is common to the mobile app targets.
|
||
- [androidMain](./composeApp/src/androidMain/kotlin) contains Android-specific app code.
|
||
- [iosMain](./composeApp/src/iosMain/kotlin) contains iOS-specific app code.
|
||
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name.
|
||
|
||
* [/iosApp](./iosApp/iosApp) contains iOS applications. Even if you’re sharing your UI with Compose Multiplatform,
|
||
you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.
|
||
|
||
* [/server](./server/src/main/kotlin) is for the Ktor server application.
|
||
|
||
* [/shared](./shared/src) is for the code that will be shared between all targets in the project.
|
||
The most important subfolder is [commonMain](./shared/src/commonMain/kotlin). `shared` still declares
|
||
a JVM target because the Ktor server depends on `projects.shared`; this does not mean the Compose
|
||
desktop application target is enabled.
|
||
|
||
### Build and Run Android Application
|
||
|
||
To build and run the development version of the Android app, use the run configuration from the run widget
|
||
in your IDE’s toolbar or build it directly from the terminal:
|
||
|
||
- on macOS/Linux
|
||
```shell
|
||
./gradlew :composeApp:assembleDebug
|
||
```
|
||
- on Windows
|
||
```shell
|
||
.\gradlew.bat :composeApp:assembleDebug
|
||
```
|
||
|
||
### Build and Run Server
|
||
|
||
To build and run the development version of the server, use the run configuration from the run widget
|
||
in your IDE’s toolbar or run it directly from the terminal:
|
||
|
||
- on macOS/Linux
|
||
```shell
|
||
./gradlew :server:run
|
||
```
|
||
- on Windows
|
||
```shell
|
||
.\gradlew.bat :server:run
|
||
```
|
||
|
||
### Build and Run iOS Application
|
||
|
||
To build and run the development version of the iOS app, use the run configuration from the run widget
|
||
in your IDE’s toolbar or open the [/iosApp](./iosApp) directory in Xcode and run it from there.
|
||
|
||
### Local development
|
||
|
||
The server requires Postgres. A `docker-compose.yml` at the repo root ships a local Postgres
|
||
instance whose credentials match `application.conf` defaults (`recipe`/`recipe`/`recipe`).
|
||
|
||
Boot the database and server:
|
||
|
||
```shell
|
||
docker compose up -d postgres
|
||
./gradlew :server:run
|
||
```
|
||
|
||
Verify the server is up:
|
||
|
||
```shell
|
||
curl http://localhost:8080/health
|
||
# expected: {"status":"ok"}
|
||
```
|
||
|
||
Environment overrides (optional — set any of these to override `application.conf` defaults):
|
||
|
||
- `DATABASE_URL` — JDBC URL (default `jdbc:postgresql://localhost:5432/recipe`)
|
||
- `DATABASE_USER` — DB user (default `recipe`)
|
||
- `DATABASE_PASSWORD` — DB password (default `recipe`)
|
||
- `PORT` — Ktor port (default `8080`)
|
||
|
||
Before committing, format all Kotlin + Gradle + Markdown files:
|
||
|
||
```shell
|
||
./gradlew spotlessApply
|
||
```
|
||
|
||
The full check (Spotless + all tests across all targets):
|
||
|
||
```shell
|
||
./gradlew check
|
||
```
|
||
|
||
Reset the local database (destroys the `recipe-pgdata` volume):
|
||
|
||
```shell
|
||
docker compose down -v
|
||
```
|
||
|
||
---
|
||
|
||
Learn more about [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html)
|
||
and [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#compose-multiplatform).
|