-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
init kmp project , added navigation , splash and onboarding screen
- Loading branch information
0 parents
commit 66361ae
Showing
60 changed files
with
1,970 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// Project generated by Kotlin Multiplatform Wizard | ||
{ | ||
"spec": { | ||
"template_id": "kmt", | ||
"targets": { | ||
"android": { | ||
"ui": [ | ||
"compose" | ||
] | ||
}, | ||
"ios": { | ||
"ui": [ | ||
"compose" | ||
] | ||
} | ||
} | ||
}, | ||
"timestamp": "2023-11-13T06:15:01.349090388Z" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
*.iml | ||
.gradle | ||
**/build/ | ||
xcuserdata | ||
!src/**/build/ | ||
local.properties | ||
.idea | ||
.DS_Store | ||
captures | ||
.externalNativeBuild | ||
.cxx | ||
*.xcodeproj/* | ||
!*.xcodeproj/project.pbxproj | ||
!*.xcodeproj/xcshareddata/ | ||
!*.xcodeproj/project.xcworkspace/ | ||
!*.xcworkspace/contents.xcworkspacedata | ||
**/xcshareddata/WorkspaceSettings.xcsettings |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
## ShoesKMP - Multiplatform Shoes App | ||
|
||
<p align="left"> A Shoes app built using Compose Multiplatform for Android and iOS </p> | ||
|
||
<p align="left"> | ||
<a href = "https://github.com/JetBrains/compose-multiplatform/releases"> | ||
<img src = "https://img.shields.io/badge/Compose%20Multiplatform-1.5.3-blue.svg?color=blue&style=for-the-badge" /> | ||
</a> | ||
<a href="https://kotlinlang.org/docs/releases.html"> | ||
<img src="https://img.shields.io/badge/Kotlin-1.9.10-blue.svg?color=blue&style=for-the-badge"/> | ||
</a> | ||
</p> | ||
|
||
### _WORK IN PROGRESS_ | ||
|
||
### ⚒️ Architecture | ||
|
||
ShoesKMP follows the principles of Clean Architecture. | ||
|
||
### 👨💻 Tech stack | ||
|
||
| Tools | Link | | ||
|:----------------------|:---------------------------------------------------------------------------------------------------------:| | ||
| 🤖 Language | [Kotlin](https://kotlinlang.org) | | ||
| 🩶 Framework | [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform) | | ||
| 💉 DI | [Koin](https://insert-koin.io/docs/reference/koin-mp/kmp/) | | ||
| 🧭 Navigation | [Tlaster / PreCompose](https://github.com/Tlaster/PreCompose) | | ||
|
||
|
||
### 🖥️ Screenshots | ||
|
||
#### Android | ||
<table style="width:100%"> | ||
<tr> | ||
<th>OnBoarding</th> | ||
</tr> | ||
<tr> | ||
<td><img src = "screenshots/android_1.png" width=150/></td> | ||
</tr> | ||
</table> | ||
|
||
|
||
#### IOS | ||
<table style="width:100%"> | ||
<tr> | ||
<th>OnBoarding</th> | ||
|
||
</tr> | ||
<tr> | ||
<td><img src = "screenshots/ios_1.png" width=150/></td> | ||
</tr> | ||
</table> | ||
|
||
### How to run the project? ✅ | ||
|
||
To run this project, you need the following: | ||
|
||
* A machine running a recent version of macOS | ||
* [Xcode](https://apps.apple.com/us/app/xcode/id497799835) | ||
* [Android Studio](https://developer.android.com/studio) | ||
* The [Kotlin Multiplatform Mobile plugin](https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform-mobile) | ||
|
||
### Check your environment | ||
|
||
Before you start, use the [KDoctor](https://github.com/Kotlin/kdoctor) tool to ensure that your development environment is configured correctly: | ||
|
||
1. Install KDoctor with [Homebrew](https://brew.sh/): ``brew install kdoctor`` | ||
|
||
2. Run KDoctor in your terminal: ``kdoctor`` | ||
|
||
If everything is set up correctly, you'll see valid output: | ||
|
||
```text | ||
Environment diagnose (to see all details, use -v option): | ||
[✓] Operation System | ||
[✓] Java | ||
[✓] Android Studio | ||
[✓] Xcode | ||
[✓] Cocoapods | ||
Conclusion: | ||
✓ Your system is ready for Kotlin Multiplatform Mobile development! | ||
``` | ||
|
||
Otherwise, KDoctor will highlight which parts of your setup still need to be configured and will suggest a way to fix them. | ||
|
||
## Understanding the project structure | ||
|
||
Open the project in Android Studio and switch the view from **Android** to **Project** to see all the files and targets belonging to the project: | ||
|
||
Your Compose Multiplatform project includes 3 modules: | ||
|
||
### shared | ||
|
||
This is a Kotlin module that contains the logic common for both Android and iOS applications, that is, the code you share between platforms. | ||
|
||
This `shared` module is also where you’ll write your Compose Multiplatform code. | ||
In `shared/src/commonMain/kotlin/App.kt`, you can find the shared root `@Composable` function for your app. | ||
|
||
It uses Gradle as the build system. You can add dependencies and change settings in `shared/build.gradle.kts`. | ||
The `shared` module builds into an Android library and an iOS framework. | ||
|
||
### androidApp | ||
|
||
This is a Kotlin module that builds into an Android application. It uses Gradle as the build system. | ||
The `androidApp` module depends on and uses the `shared` module as a regular Android library. | ||
|
||
### iosApp | ||
|
||
This is an Xcode project that builds into an iOS application. | ||
It depends on and uses the `shared` module as a CocoaPods dependency. | ||
|
||
## Run your application | ||
|
||
### On Android | ||
|
||
To run your application on an Android emulator: | ||
|
||
1. Ensure you have an Android virtual device available. Otherwise, [create one](https://developer.android.com/studio/run/managing-avds#createavd). | ||
2. In the list of run configurations, select `androidApp`. | ||
3. Choose your virtual device and click **Run** | ||
|
||
### On iOS | ||
|
||
#### Running on a simulator | ||
|
||
To run your application on an iOS simulator in Android Studio, modify the `iosApp` run configuration: | ||
|
||
1. In the list of run configurations, select **Edit Configurations** | ||
2. Navigate to **iOS Application** | **iosApp**. | ||
3. In the **Execution target** list, select your target device. Click **OK**. | ||
4. The `iosApp` run configuration is now available. Click **Run** next to your virtual device. | ||
|
||
|
||
|
||
<details> | ||
<summary>How to create and run a simple project in Xcode</summary> | ||
|
||
1. On the Xcode welcome screen, select **Create a new project in Xcode**. | ||
2. On the **iOS** tab, choose the **App** template. Click **Next**. | ||
3. Specify the product name and keep other settings default. Click **Next**. | ||
4. Select where to store the project on your computer and click **Create**. You'll see an app that displays "Hello, world!" on the device screen. | ||
5. At the top of your Xcode screen, click on the device name near the **Run** button. | ||
6. Plug your device into the computer. You'll see this device in the list of run options. | ||
7. Choose your device and click **Run**. | ||
|
||
</details> | ||
|
||
## Find this project useful ? ❤️ | ||
|
||
- Support it by clicking the ⭐️ button on the upper right of this page. ✌️ | ||
|
||
# License | ||
```markdown | ||
Copyright 2023 Jayant Kumar | ||
|
||
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. | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
plugins { | ||
// this is necessary to avoid the plugins to be loaded multiple times | ||
// in each subproject's classloader | ||
alias(libs.plugins.jetbrainsCompose) apply false | ||
alias(libs.plugins.androidApplication) apply false | ||
alias(libs.plugins.androidLibrary) apply false | ||
alias(libs.plugins.kotlinMultiplatform) apply false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
import org.jetbrains.compose.ExperimentalComposeLibrary | ||
|
||
plugins { | ||
alias(libs.plugins.kotlinMultiplatform) | ||
alias(libs.plugins.androidApplication) | ||
alias(libs.plugins.jetbrainsCompose) | ||
} | ||
|
||
kotlin { | ||
androidTarget { | ||
compilations.all { | ||
kotlinOptions { | ||
jvmTarget = "1.8" | ||
} | ||
} | ||
} | ||
|
||
listOf( | ||
iosX64(), | ||
iosArm64(), | ||
iosSimulatorArm64() | ||
).forEach { iosTarget -> | ||
iosTarget.binaries.framework { | ||
baseName = "ComposeApp" | ||
isStatic = true | ||
} | ||
} | ||
|
||
sourceSets { | ||
|
||
androidMain.dependencies { | ||
implementation(libs.compose.ui) | ||
implementation(libs.compose.ui.tooling.preview) | ||
implementation(libs.androidx.activity.compose) | ||
} | ||
commonMain.dependencies { | ||
implementation(compose.runtime) | ||
implementation(compose.foundation) | ||
implementation(compose.material) | ||
@OptIn(ExperimentalComposeLibrary::class) | ||
implementation(compose.components.resources) | ||
|
||
// Decompose for Navigation | ||
api(libs.decompose) | ||
api(libs.decompose.compose.jetbrains) | ||
|
||
// Pre-compose for Navigation | ||
api(libs.precompose) | ||
api(libs.precompose.viewmodel) | ||
api(libs.precompose.koin) | ||
|
||
// Koin | ||
api(libs.koin) | ||
api(libs.koin.compose) | ||
} | ||
} | ||
} | ||
|
||
android { | ||
namespace = "org.nameisjayant.shoeskmp" | ||
compileSdk = libs.versions.android.compileSdk.get().toInt() | ||
|
||
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") | ||
sourceSets["main"].res.srcDirs("src/androidMain/res") | ||
sourceSets["main"].resources.srcDirs("src/commonMain/resources") | ||
|
||
defaultConfig { | ||
applicationId = "org.nameisjayant.shoeskmp" | ||
minSdk = libs.versions.android.minSdk.get().toInt() | ||
targetSdk = libs.versions.android.targetSdk.get().toInt() | ||
versionCode = 1 | ||
versionName = "1.0" | ||
} | ||
buildFeatures { | ||
compose = true | ||
} | ||
composeOptions { | ||
kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() | ||
} | ||
packaging { | ||
resources { | ||
excludes += "/META-INF/{AL2.0,LGPL2.1}" | ||
} | ||
} | ||
buildTypes { | ||
getByName("release") { | ||
isMinifyEnabled = false | ||
} | ||
} | ||
compileOptions { | ||
sourceCompatibility = JavaVersion.VERSION_1_8 | ||
targetCompatibility = JavaVersion.VERSION_1_8 | ||
} | ||
dependencies { | ||
debugImplementation(libs.compose.ui.tooling) | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> | ||
|
||
<application | ||
android:allowBackup="true" | ||
android:icon="@mipmap/ic_launcher" | ||
android:label="@string/app_name" | ||
android:roundIcon="@mipmap/ic_launcher_round" | ||
android:supportsRtl="true" | ||
android:theme="@android:style/Theme.Material.Light.NoActionBar"> | ||
<activity | ||
android:exported="true" | ||
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|mnc|colorMode|density|fontScale|fontWeightAdjustment|keyboard|layoutDirection|locale|mcc|navigation|smallestScreenSize|touchscreen|uiMode" | ||
android:name=".MainActivity"> | ||
<intent-filter> | ||
<action android:name="android.intent.action.MAIN" /> | ||
|
||
<category android:name="android.intent.category.LAUNCHER" /> | ||
</intent-filter> | ||
</activity> | ||
</application> | ||
|
||
</manifest> |
20 changes: 20 additions & 0 deletions
20
composeApp/src/androidMain/kotlin/org/nameisjayant/shoeskmp/MainActivity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package org.nameisjayant.shoeskmp | ||
|
||
import ShoesKMPApp | ||
import android.os.Bundle | ||
import androidx.core.view.WindowCompat | ||
import moe.tlaster.precompose.lifecycle.PreComposeActivity | ||
import moe.tlaster.precompose.lifecycle.setContent | ||
import org.nameisjayant.shoeskmp.theme.ShoesKMPTheme | ||
|
||
class MainActivity : PreComposeActivity() { | ||
override fun onCreate(savedInstanceState: Bundle?) { | ||
super.onCreate(savedInstanceState) | ||
WindowCompat.setDecorFitsSystemWindows(window, false) | ||
setContent { | ||
ShoesKMPTheme { | ||
ShoesKMPApp() | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.