TvManiac is a personalized entertainment tracking and recommendation Multiplatform app (Android & iOS). By utilizing Trakt, we are able to view shows, create a watchlist get statistics and much more. The aim of this project is do demonstrate KMM development capabilities.
You can Install and test latest android app from below 👇
This is my playground for learning Kotlin Multiplatform. With that said, I'm sure it's filled bugs are crawling everywhere, and I'm probably doing a couple of things wrong. So a lot is changing, but that shouldn't stop you from checking it out.
To use the Trakt API, you'll need to create a new API app. & for TMDb create an account and generate an API key if you don't have one.
You need to add API keys from Trakt.tv & TMDb. To do so:
-
Add the following keys to
~/.gradle/gradle.properties
:TMDB_API_URL=https://api.themoviedb.org/3/ TMDB_API_KEY=ENTER_URI TRAKT_CLIENT_ID=ENTER_KEY TRAKT_CLIENT_SECRET=ENTER_KEY TRAKT_REDIRECT_URI=ENTER_KEY
-
Run
./gradlew generateBuildKonfig
Open config.json
in the iOS project root directory and enter the correct values that your generated for your Trakt Applicaton.:
callbackURL
clientId
clientSecret
- Zulu Java 17
- You require the latest Android Studio release to be able to build the app.
- Install Kmm Plugin. Checkout this setup guide.
- Navigate to ios directory & open
.xcworkspace
& not.xcodeproj
In case you make changes to the shared
module and want to test out the changes, you can generate the swift package locally by:
- Execute
./gradle createSwiftPackage
. This will generate a swift package outside the root directory. - Add the generated package in XCode.
screen-20230308-001558.mp4
- Accompanist
- Android-youtube-player - Youtube Player
- AppAuth - AppAuth for Android is a client SDK for communicating with OAuth 2.0 and OpenID Connect providers.
- Compose Lints - Custom lint checks for Jetpack Compose.
- Dagger Hilt - dependency injection.
- Jetpack Compose
- Coil - Image loading
- Navigation - Navigation
- KenBurnsView - Immersive image.
- Leakcanary - Memory leak detection.
- ViewModel UI related data holder, lifecycle aware.
- WorkManager Handle persistent work
- Kotlinx Serialization - De/Serializing JSON
- Coroutines - Concurrency & Threading
- DataStore Preferences - Data storage
- DateTime - Date & Time
- Flow-Redux
- Kermit - Logging
- koin - Injection library.
- Ktor - Networking
- Kotest Assertions - Testing
- SQLDelight - Local storage
- Coroutines Extensions Consume queries as Flow
- Kingfisher - Image library.
- OAuthSwift Swift based OAuth library for iOS and macOS.
- TvManiac - TvManiac SwiftPackage.
Android
- Implement Watchlist
- Add
More
screen. Shows GridView - Recommended Shows
- Implement pagination.
- Add Settings panel.
- Dynamic theme change.
- Add Seasons UI
- Implement trakt auth & sign in
- Migrate to Material3
- Add Episode detail screen
- Add Watchlist
- Implement Search
iOS
- Add HomeScreen: Tabs & Empty UI
- Implement Discover UI
- Show Detail Screen
- Add Settings panel.
- Implement trakt auth & sign in
- Add Seasons UI
- Implement Search UI
- Implement Watchlist UI
- Implement Load more
Shared
- Use SQLDelight extensions to consume queries as Flow
- Refactor interactor implementation.
- Use koin for injection
- Modularize
shared
module - Try out Flow-Redux
- Improve error handling, add retry.
- Add test cases.
- Fix paging
- Observe Internet connection
- Android
- iOS
Copyright 2021 Thomas Kioko
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
https://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.