The one and only mobile application that displays the countries from the REST Countries API.
- π Separated Gradle subprojects for each data layer
- π Dependency Injection through Koin
- π Async calls and Reactive Flows through Kotlinx Coroutines
- π Remote fetching from the REST API through Ktor Client
- π Data serialization through Kotlinx Serialization
- π Caching on a local database with AndroidX Room
- ποΈ Different data layer handling through Store
- βοΈ Network errors clearly propagated through layers and displayed to the user
- π§ͺ Unit tests using:
- π§© Shared build logic between subprojects through convention plugins
- π¨ UI implemented using Jetpack Compose, with a separated Design System module
- πΌοΈ Image loading through Coil
- πΈ Screenshot testing using Paparazzi
- π§ͺ Unit tests using JUnit4
- βοΈ Instrumented tests with:
- π¨ UI implemented using SwiftUI
- π Dependency Injection through Factory
- π¦ Remote dependencies management through Swift Package Manager
- π§° Xcode configuration files management through Tuist
For the Android app, just open the root folder with Android Studio, and make sure you are using the proper version by checking the Android Gradle plugin and Android Studio compatibility matrix.
For iOS, as mentioned above, we are using Tuist to generate the Xcode project file. In order to open the project, run the following commands from the project root folder:
cd ios-app
mise trust # Trusts the defined packages; make sure you have Mise En Place installed on your machine
mise install # Installs the needed packages for the environment
tuist install # Downloads the needed dependencies for the app project
tuist generate # Opens the project on XcodeTo edit the project configuration, simply run from the /ios-app path:
tuist editThe following steps are recommended if you want to open a new PR to bring your contribution.
If you want to contribute to the Android and/or Kotlin Multiplatform code, run the following command from the project root folder:
./gradlew spotlessApply # or gradlew.bat spotlessApply on WindowsFor the iOS side, run from the project root folder:
cd ios-app
mise install # Fetches SwiftFormat
swiftformat .To check the code formatting before committing your working copy, you can locally configure the Git Hooks available from this repository:
git config --local core.hooksPath .githooks- Chris Banes, with his tivi.app: his project not only taught me during the years about the Android development, but also shaped me as a developer in a general way
- Although I never participated to this event, the DroidKaigi conference applications helped me during the early stages of my journey, and I am deeply grateful for the hard work the team is putting every year
- Now in Android: A fully functional Android app built entirely with Kotlin and Jetpack Compose
- Clean Architecture for SwiftUI + Combine: SwiftUI sample app using Clean Architecture
- All the contributors of the mentioned libraries
- REST Countries API project