112 lines
4.3 KiB
Markdown
112 lines
4.3 KiB
Markdown
# Chom Bev e Brezhoneg - Survive in Breton - Survive en Breton
|
||
|
||
This is a Compose Multiplatform project to listen to Breton from Vannes country. It uses an audio
|
||
player adapted for each platform and synchronised subtitles.
|
||
|
||
## Main architecture
|
||
|
||
This is a Kotlin Multiplatform project targeting Android, iOS, Web, Desktop (JVM).
|
||
|
||
* [/iosApp](./iosApp/iosApp) contains an iOS application. 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.
|
||
|
||
* [/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 that’s 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 Apple’s 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.
|
||
|
||
## Running the apps
|
||
|
||
Use the run configurations provided by the run widget in your IDE's toolbar. You can also use these
|
||
commands and options:
|
||
|
||
- 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.
|
||
|
||
## Running tests
|
||
|
||
Use the run button in your IDE's editor gutter, or run tests using Gradle tasks:
|
||
|
||
- 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`
|
||
|
||
---
|
||
|
||
Learn more
|
||
about [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html),
|
||
[Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#compose-multiplatform),
|
||
[Kotlin/Wasm](https://kotl.in/wasm/)…
|
||
|
||
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).
|
||
If you face any issues, please report them
|
||
on [YouTrack](https://youtrack.jetbrains.com/newIssue?project=CMP).
|
||
|
||
## Dependency injection
|
||
|
||
For dependency injection, we use [Koin](https://insert-koin.io/). To know more about the integration
|
||
with Compose,
|
||
please refer to
|
||
the [Koin Compose documentation](https://insert-koin.io/docs/reference/koin-compose/compose).
|
||
|
||
## Navigation
|
||
|
||
For navigation, Navigation3 is
|
||
used: https://kotlinlang.org/docs/multiplatform/compose-navigation-3.html
|
||
|
||
For implementation details, please refer to
|
||
the [Navigation3 Android documentation](https://developer.android.com/guide/navigation/navigation-3/basics).
|
||
|
||
## Audio
|
||
|
||
OGG Vorbis is not correctly supported on iOS. Prefer M4A+AAC instead. For instance, audio duration
|
||
is shorter on iOS with OGG. Therefore, subtitles are not correctly synchronized.
|
||
|
||
## Subtitles
|
||
|
||
To know more about subtitles, see: [SUBTITLES.md](docs/SUBTITLES.md)
|
||
|
||
## Resources
|
||
|
||
See [Resource's README.md](data/resources/README.md) to handle the resource files (list of records,
|
||
audio files,
|
||
and subtitles).
|
||
|
||
## License
|
||
|
||
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.
|
||
|
||
```
|
||
Copyright 2026 Antoine Jaury
|
||
|
||
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.
|
||
``` |