Skip to content

Commit 419298c

Browse files
Initial commit, default project configurations
0 parents  commit 419298c

File tree

26 files changed

+1233
-0
lines changed

26 files changed

+1233
-0
lines changed

.fleet/receipt.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Project generated by Kotlin Multiplatform Wizard
2+
{
3+
"spec": {
4+
"template_id": "kmt",
5+
"targets": {
6+
"android": {
7+
"ui": [
8+
"compose"
9+
]
10+
},
11+
"ios": {
12+
"ui": [
13+
"compose"
14+
]
15+
},
16+
"desktop": {
17+
"ui": [
18+
"compose"
19+
]
20+
},
21+
"web": {
22+
"ui": [
23+
"compose"
24+
]
25+
}
26+
}
27+
},
28+
"timestamp": "2025-04-28T13:00:15.321827845Z"
29+
}

.gitignore

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
*.iml
2+
.kotlin
3+
.gradle
4+
**/build/
5+
xcuserdata
6+
!src/**/build/
7+
local.properties
8+
.idea
9+
.DS_Store
10+
captures
11+
.externalNativeBuild
12+
.cxx
13+
*.xcodeproj/*
14+
!*.xcodeproj/project.pbxproj
15+
!*.xcodeproj/xcshareddata/
16+
!*.xcodeproj/project.xcworkspace/
17+
!*.xcworkspace/contents.xcworkspacedata
18+
**/xcshareddata/WorkspaceSettings.xcsettings

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
This is a Kotlin Multiplatform project targeting Android, iOS, Web, Desktop.
2+
3+
* `/composeApp` is for code that will be shared across your Compose Multiplatform applications.
4+
It contains several subfolders:
5+
- `commonMain` is for code that’s common for all targets.
6+
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name.
7+
For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app,
8+
`iosMain` would be the right folder for such calls.
9+
10+
* `/iosApp` contains iOS applications. Even if you’re sharing your UI with Compose Multiplatform,
11+
you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.
12+
13+
14+
Learn more about [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html),
15+
[Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#compose-multiplatform),
16+
[Kotlin/Wasm](https://kotl.in/wasm/)
17+
18+
We would appreciate your feedback on Compose/Web and Kotlin/Wasm in the public Slack channel [#compose-web](https://slack-chats.kotlinlang.org/c/compose-web).
19+
If you face any issues, please report them on [GitHub](https://github.com/JetBrains/compose-multiplatform/issues).
20+
21+
You can open the web application by running the `:composeApp:wasmJsBrowserDevelopmentRun` Gradle task.

build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
plugins {
2+
// this is necessary to avoid the plugins to be loaded multiple times
3+
// in each subproject's classloader
4+
alias(libs.plugins.androidApplication) apply false
5+
alias(libs.plugins.androidLibrary) apply false
6+
alias(libs.plugins.composeMultiplatform) apply false
7+
alias(libs.plugins.composeCompiler) apply false
8+
alias(libs.plugins.kotlinMultiplatform) apply false
9+
}

composeApp/build.gradle.kts

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
2+
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
3+
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
4+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
5+
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
6+
7+
plugins {
8+
alias(libs.plugins.kotlinMultiplatform)
9+
alias(libs.plugins.androidApplication)
10+
alias(libs.plugins.composeMultiplatform)
11+
alias(libs.plugins.composeCompiler)
12+
}
13+
14+
kotlin {
15+
androidTarget {
16+
@OptIn(ExperimentalKotlinGradlePluginApi::class)
17+
compilerOptions {
18+
jvmTarget.set(JvmTarget.JVM_11)
19+
}
20+
}
21+
22+
listOf(
23+
iosX64(),
24+
iosArm64(),
25+
iosSimulatorArm64()
26+
).forEach { iosTarget ->
27+
iosTarget.binaries.framework {
28+
baseName = "ComposeApp"
29+
isStatic = true
30+
}
31+
}
32+
33+
jvm("desktop")
34+
35+
@OptIn(ExperimentalWasmDsl::class)
36+
wasmJs {
37+
moduleName = "composeApp"
38+
browser {
39+
val rootDirPath = project.rootDir.path
40+
val projectDirPath = project.projectDir.path
41+
commonWebpackConfig {
42+
outputFileName = "composeApp.js"
43+
devServer = (devServer ?: KotlinWebpackConfig.DevServer()).apply {
44+
static = (static ?: mutableListOf()).apply {
45+
// Serve sources to debug inside browser
46+
add(rootDirPath)
47+
add(projectDirPath)
48+
}
49+
}
50+
}
51+
}
52+
binaries.executable()
53+
}
54+
55+
sourceSets {
56+
val desktopMain by getting
57+
58+
androidMain.dependencies {
59+
implementation(compose.preview)
60+
implementation(libs.androidx.activity.compose)
61+
}
62+
commonMain.dependencies {
63+
implementation(compose.runtime)
64+
implementation(compose.foundation)
65+
implementation(compose.material)
66+
implementation(compose.ui)
67+
implementation(compose.components.resources)
68+
implementation(compose.components.uiToolingPreview)
69+
implementation(libs.androidx.lifecycle.viewmodel)
70+
implementation(libs.androidx.lifecycle.runtime.compose)
71+
}
72+
desktopMain.dependencies {
73+
implementation(compose.desktop.currentOs)
74+
implementation(libs.kotlinx.coroutines.swing)
75+
}
76+
}
77+
}
78+
79+
android {
80+
namespace = "com.developersbreach.kotlindictionarymultiplatform"
81+
compileSdk = libs.versions.android.compileSdk.get().toInt()
82+
83+
defaultConfig {
84+
applicationId = "com.developersbreach.kotlindictionarymultiplatform"
85+
minSdk = libs.versions.android.minSdk.get().toInt()
86+
targetSdk = libs.versions.android.targetSdk.get().toInt()
87+
versionCode = 1
88+
versionName = "1.0"
89+
}
90+
packaging {
91+
resources {
92+
excludes += "/META-INF/{AL2.0,LGPL2.1}"
93+
}
94+
}
95+
buildTypes {
96+
getByName("release") {
97+
isMinifyEnabled = false
98+
}
99+
}
100+
compileOptions {
101+
sourceCompatibility = JavaVersion.VERSION_11
102+
targetCompatibility = JavaVersion.VERSION_11
103+
}
104+
}
105+
106+
dependencies {
107+
debugImplementation(compose.uiTooling)
108+
}
109+
110+
compose.desktop {
111+
application {
112+
mainClass = "com.developersbreach.kotlindictionarymultiplatform.MainKt"
113+
114+
nativeDistributions {
115+
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
116+
packageName = "com.developersbreach.kotlindictionarymultiplatform"
117+
packageVersion = "1.0.0"
118+
}
119+
}
120+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="600dp"
3+
android:height="600dp"
4+
android:viewportWidth="600"
5+
android:viewportHeight="600">
6+
<path
7+
android:pathData="M301.21,418.53C300.97,418.54 300.73,418.56 300.49,418.56C297.09,418.59 293.74,417.72 290.79,416.05L222.6,377.54C220.63,376.43 219,374.82 217.85,372.88C216.7,370.94 216.09,368.73 216.07,366.47L216.07,288.16C216.06,287.32 216.09,286.49 216.17,285.67C216.38,283.54 216.91,281.5 217.71,279.6L199.29,268.27L177.74,256.19C175.72,260.43 174.73,265.23 174.78,270.22L174.79,387.05C174.85,393.89 178.57,400.2 184.53,403.56L286.26,461.02C290.67,463.51 295.66,464.8 300.73,464.76C300.91,464.76 301.09,464.74 301.27,464.74C301.24,449.84 301.22,439.23 301.22,439.23L301.21,418.53Z"
8+
android:fillColor="#041619"
9+
android:fillType="nonZero"/>
10+
<path
11+
android:pathData="M409.45,242.91L312.64,188.23C303.64,183.15 292.58,183.26 283.68,188.51L187.92,245C183.31,247.73 179.93,251.62 177.75,256.17L177.74,256.19L199.29,268.27L217.71,279.6C217.83,279.32 217.92,279.02 218.05,278.74C218.24,278.36 218.43,277.98 218.64,277.62C219.06,276.88 219.52,276.18 220.04,275.51C221.37,273.8 223.01,272.35 224.87,271.25L289.06,233.39C290.42,232.59 291.87,231.96 293.39,231.51C295.53,230.87 297.77,230.6 300,230.72C302.98,230.88 305.88,231.73 308.47,233.2L373.37,269.85C375.54,271.08 377.49,272.68 379.13,274.57C379.68,275.19 380.18,275.85 380.65,276.53C380.86,276.84 381.05,277.15 381.24,277.47L397.79,266.39L420.34,252.93L420.31,252.88C417.55,248.8 413.77,245.35 409.45,242.91Z"
12+
android:fillColor="#37BF6E"
13+
android:fillType="nonZero"/>
14+
<path
15+
android:pathData="M381.24,277.47C381.51,277.92 381.77,278.38 382.01,278.84C382.21,279.24 382.39,279.65 382.57,280.06C382.91,280.88 383.19,281.73 383.41,282.59C383.74,283.88 383.92,285.21 383.93,286.57L383.93,361.1C383.96,363.95 383.35,366.77 382.16,369.36C381.93,369.86 381.69,370.35 381.42,370.83C379.75,373.79 377.32,376.27 374.39,378L310.2,415.87C307.47,417.48 304.38,418.39 301.21,418.53L301.22,439.23C301.22,439.23 301.24,449.84 301.27,464.74C306.1,464.61 310.91,463.3 315.21,460.75L410.98,404.25C419.88,399 425.31,389.37 425.22,379.03L425.22,267.85C425.17,262.48 423.34,257.34 420.34,252.93L397.79,266.39L381.24,277.47Z"
16+
android:fillColor="#3870B2"
17+
android:fillType="nonZero"/>
18+
<path
19+
android:pathData="M177.75,256.17C179.93,251.62 183.31,247.73 187.92,245L283.68,188.51C292.58,183.26 303.64,183.15 312.64,188.23L409.45,242.91C413.77,245.35 417.55,248.8 420.31,252.88L420.34,252.93L498.59,206.19C494.03,199.46 487.79,193.78 480.67,189.75L320.86,99.49C306.01,91.1 287.75,91.27 273.07,99.95L114.99,193.2C107.39,197.69 101.81,204.11 98.21,211.63L177.74,256.19L177.75,256.17ZM301.27,464.74C301.09,464.74 300.91,464.76 300.73,464.76C295.66,464.8 290.67,463.51 286.26,461.02L184.53,403.56C178.57,400.2 174.85,393.89 174.79,387.05L174.78,270.22C174.73,265.23 175.72,260.43 177.74,256.19L98.21,211.63C94.86,218.63 93.23,226.58 93.31,234.82L93.31,427.67C93.42,438.97 99.54,449.37 109.4,454.92L277.31,549.77C284.6,553.88 292.84,556.01 301.2,555.94L301.2,555.8C301.39,543.78 301.33,495.26 301.27,464.74Z"
20+
android:strokeWidth="10"
21+
android:fillColor="#00000000"
22+
android:strokeColor="#083042"
23+
android:fillType="nonZero"/>
24+
<path
25+
android:pathData="M498.59,206.19L420.34,252.93C423.34,257.34 425.17,262.48 425.22,267.85L425.22,379.03C425.31,389.37 419.88,399 410.98,404.25L315.21,460.75C310.91,463.3 306.1,464.61 301.27,464.74C301.33,495.26 301.39,543.78 301.2,555.8L301.2,555.94C309.48,555.87 317.74,553.68 325.11,549.32L483.18,456.06C497.87,447.39 506.85,431.49 506.69,414.43L506.69,230.91C506.6,222.02 503.57,213.5 498.59,206.19Z"
26+
android:strokeWidth="10"
27+
android:fillColor="#00000000"
28+
android:strokeColor="#083042"
29+
android:fillType="nonZero"/>
30+
<path
31+
android:pathData="M301.2,555.94C292.84,556.01 284.6,553.88 277.31,549.76L109.4,454.92C99.54,449.37 93.42,438.97 93.31,427.67L93.31,234.82C93.23,226.58 94.86,218.63 98.21,211.63C101.81,204.11 107.39,197.69 114.99,193.2L273.07,99.95C287.75,91.27 306.01,91.1 320.86,99.49L480.67,189.75C487.79,193.78 494.03,199.46 498.59,206.19C503.57,213.5 506.6,222.02 506.69,230.91L506.69,414.43C506.85,431.49 497.87,447.39 483.18,456.06L325.11,549.32C317.74,553.68 309.48,555.87 301.2,555.94Z"
32+
android:strokeWidth="10"
33+
android:fillColor="#00000000"
34+
android:strokeColor="#083042"
35+
android:fillType="nonZero"/>
36+
</vector>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.developersbreach.kotlindictionarymultiplatform
2+
3+
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.foundation.Image
5+
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.material.Button
8+
import androidx.compose.material.MaterialTheme
9+
import androidx.compose.material.Text
10+
import androidx.compose.runtime.*
11+
import androidx.compose.ui.Alignment
12+
import androidx.compose.ui.Modifier
13+
import org.jetbrains.compose.resources.painterResource
14+
import org.jetbrains.compose.ui.tooling.preview.Preview
15+
16+
import kotlindictionarymultiplatform.composeapp.generated.resources.Res
17+
import kotlindictionarymultiplatform.composeapp.generated.resources.compose_multiplatform
18+
19+
@Composable
20+
@Preview
21+
fun App() {
22+
MaterialTheme {
23+
var showContent by remember { mutableStateOf(false) }
24+
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
25+
Button(onClick = { showContent = !showContent }) {
26+
Text("Click me!")
27+
}
28+
AnimatedVisibility(showContent) {
29+
val greeting = remember { Greeting().greet() }
30+
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
31+
Image(painterResource(Res.drawable.compose_multiplatform), null)
32+
Text("Compose: $greeting")
33+
}
34+
}
35+
}
36+
}
37+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.developersbreach.kotlindictionarymultiplatform
2+
3+
class Greeting {
4+
private val platform = getPlatform()
5+
6+
fun greet(): String {
7+
return "Hello, ${platform.name}!"
8+
}
9+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.developersbreach.kotlindictionarymultiplatform
2+
3+
interface Platform {
4+
val name: String
5+
}
6+
7+
expect fun getPlatform(): Platform

gradle.properties

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#Kotlin
2+
kotlin.code.style=official
3+
kotlin.daemon.jvmargs=-Xmx2048M
4+
5+
#Gradle
6+
org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
7+
8+
#Android
9+
android.nonTransitiveRClass=true
10+
android.useAndroidX=true

0 commit comments

Comments
 (0)