Replace Skip implementation with Kotlin Multiplatform implementation

This commit is contained in:
2026-09-02 22:11:32 +03:00
parent 902b683779
commit abf7cf2e83
184 changed files with 7163 additions and 2449 deletions
+38 -34
View File
@@ -29,53 +29,55 @@ height="70">](https://github.com/tyiu/sats-price/releases)
iOS 16.0+ • macOS 13.0+ • Android 10.0+
</div>
## Kotlin Multiplatform
## Building
This is a Kotlin Multiplatform project targeting Android, iOS, Web, Desktop (JVM).
This is a free [Skip](https://skip.tools) dual-platform app project.
It builds a native app for both iOS and Android.
* [/iosApp](./iosApp/iosApp) contains an iOS application. Even if youre 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.
This project is both a stand-alone Swift Package Manager module,
as well as an Xcode project that builds and transpiles the project
into a Kotlin Gradle project for Android using the Skip plugin.
* [/shared](./shared/src) is for code that will be shared across your Compose Multiplatform applications. It contains
several subfolders:
- [commonMain](./shared/src/commonMain/kotlin) is for code thats common for all targets.
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For
example, if you want to use Apples CoreCrypto for the iOS part of your Kotlin app,
the [iosMain](./shared/src/iosMain/kotlin) folder would be the right place for such calls. Similarly, if you want
to edit the Desktop (JVM) specific part, the [jvmMain](./shared/src/jvmMain/kotlin)
folder is the appropriate location.
Building the module requires that Skip be installed using
[Homebrew](https://brew.sh) with `brew install skiptools/skip/skip`.
### Running the apps
This will also install the necessary transpiler prerequisites:
Kotlin, Gradle, and the Android build tools.
Use the run configurations provided by the run widget in your IDE's toolbar. You can also use these commands and
options:
Installation prerequisites can be confirmed by running `skip checkup`.
- Android app: `./gradlew :androidApp:assembleDebug`
- Desktop app:
- Hot reload: `./gradlew :desktopApp:hotRun --auto`
- Standard run: `./gradlew :desktopApp:run`
- Web app:
- Wasm target (faster, modern browsers): `./gradlew :webApp:wasmJsBrowserDevelopmentRun`
- JS target (slower, supports older browsers): `./gradlew :webApp:jsBrowserDevelopmentRun`
- iOS app: open the [/iosApp](./iosApp) directory in Xcode and run it from there.
## Testing
### Running tests
The module can be tested using the standard `swift test` command
or by running the test target for the macOS destination in Xcode,
which will run the Swift tests as well as the transpiled
Kotlin JUnit tests in the Robolectric Android simulation environment.
Use the run button in your IDE's editor gutter, or run tests using Gradle tasks:
Parity testing can be performed with `skip test`,
which will output a table of the test results for both platforms.
## Running
Xcode and Android Studio must be downloaded and installed in order to
run the app in the iOS simulator / Android emulator.
An Android emulator must already be running, which can be launched from
Android Studio's Device Manager.
To run both the Swift and Kotlin apps simultaneously,
launch the SatsPriceApp target from Xcode.
A build phases runs the "Launch Android APK" script that
will deploy the transpiled app a running Android emulator or connected device.
Logging output for the iOS app can be viewed in the Xcode console, and in
Android Studio's logcat tab for the transpiled Kotlin app.
- Android tests: `./gradlew :shared:testAndroidHostTest`
- Desktop tests: `./gradlew :shared:jvmTest`
- Web tests:
- Wasm target: `./gradlew :shared:wasmJsTest`
- JS target: `./gradlew :shared:jsTest`
- iOS tests: `./gradlew :shared:iosSimulatorArm64Test`
## Attribution
This project depends on [Skip](https://skip.tools) to build as a multi-platform app.
This project uses [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html),
[Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#compose-multiplatform), and
[Kotlin/Wasm](https://kotl.in/wasm/).
The [Bitcoin Calculator](https://www.flaticon.com/free-icons/bitcoin-calculator) icon was created by Icon home and licensed as free for personal and commercial use with attribution.
The following free APIs are used:
@@ -83,4 +85,6 @@ The following free APIs are used:
- [Get Exchange Rates](https://docs.cdp.coinbase.com/coinbase-app/docs/api-exchange-rates#get-exchange-rates)
- [Get Spot Price](https://docs.cdp.coinbase.com/coinbase-app/docs/api-prices#get-spot-price)
- CoinGecko
- [Coin Price by IDs](https://docs.coingecko.com/reference/simple-price)
- [Coin Price by IDs](https://docs.coingecko.com/reference/simple-price)
</div>