🍭 GithubSearchKMM - Github Repos Search - Android - iOS - Kotlin Multiplatform Mobile using Jetpack Compose, SwiftUI, FlowRedux, Coroutines Flow, Dagger Hilt, Koin Dependency Injection, shared KMP ViewModel, Clean Architecture

Overview

GithubSearchKMM

Github Repos Search - Kotlin Multiplatform Mobile using Jetpack Compose, SwiftUI, FlowRedux, Coroutines Flow, Dagger Hilt, Koin Dependency Injection, shared KMP ViewModel, Clean Architecture

Android Build CI iOS Build CI Validate Gradle Wrapper API Kotlin Hits License: MIT codecov Platform

Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose.

  • Android (Jetpack compose)
  • iOS (SwiftUI)

Liked some of my work? Buy me a coffee (or more likely a beer)

Buy Me A Coffee

Modern Development

  • Kotlin Multiplatform
  • Jetpack Compose
  • Kotlin Coroutines & Flows
  • Dagger Hilt
  • SwiftUI
  • Koin Dependency Injection
  • FlowRedux State Management
  • Shared KMP ViewModel
  • Clean Architecture

Tech Stacks

Screenshots

Android (Light theme)

Android (Dark theme)

iOS (Light theme)

iOS (Dark theme)

Overall Architecture

What is shared?

  • domain: Domain models, UseCases, Repositories.
  • presentation: ViewModels, ViewState, ViewSingleEvent, ViewAction.
  • data: Repository Implementations, Remote Data Source, Local Data Source.
  • utils: Utilities, Logging Library

Unidirectional data flow - FlowRedux

RxRedux In a Nutshell

public sealed interface FlowReduxStore<Action, State> {
  public val coroutineScope: CoroutineScope

  public val stateFlow: StateFlow<State>

  /** Get streams of actions.
   *
   * This [Flow] includes dispatched [Action]s (via [dispatch] function)
   * and [Action]s returned from [SideEffect]s.
   */
  public val actionSharedFlow: SharedFlow<Action>

  /**
   * @return false if cannot dispatch action ([coroutineScope] was cancelled).
   */
  public fun dispatch(action: Action): Boolean
}

Multiplatform ViewModel

open class GithubSearchViewModel(
  searchRepoItemsUseCase: SearchRepoItemsUseCase,
) : ViewModel() {
  private val store = viewModelScope.createFlowReduxStore(
    initialState = GithubSearchState.initial(),
    sideEffects = GithubSearchSideEffects(
      searchRepoItemsUseCase = searchRepoItemsUseCase,
    ).sideEffects,
    reducer = { state, action -> action.reduce(state) }
  )
  private val eventChannel = store.actionSharedFlow
    .mapNotNull { it.toGithubSearchSingleEventOrNull() }
    .buffer(Channel.UNLIMITED)
    .produceIn(viewModelScope)

  fun dispatch(action: GithubSearchAction) = store.dispatch(action)
  val stateFlow: StateFlow<GithubSearchState> by store::stateFlow
  val eventFlow: Flow<GithubSearchSingleEvent> get() = eventChannel.receiveAsFlow()
}

Platform ViewModel

Android

Extends GithubSearchViewModel to use Dagger Constructor Injection.

@HiltViewModel
class DaggerGithubSearchViewModel @Inject constructor(searchRepoItemsUseCase: SearchRepoItemsUseCase) :
  GithubSearchViewModel(searchRepoItemsUseCase)

iOS

Conform to ObservableObject and use @Published property wrapper.

import Foundation
import Combine
import shared
import sharedSwift

@MainActor
class IOSGithubSearchViewModel: ObservableObject {
  private let vm: GithubSearchViewModel

  @Published private(set) var state: GithubSearchState
  let eventPublisher: AnyPublisher<GithubSearchSingleEventKs, Never>

  init(vm: GithubSearchViewModel) {
    self.vm = vm

    self.eventPublisher = vm.eventFlow.asNonNullPublisher()
      .assertNoFailure()
      .map(GithubSearchSingleEventKs.init)
      .eraseToAnyPublisher()

    self.state = vm.stateFlow.typedValue()
    vm.stateFlow.subscribeNonNullFlow(
      scope: vm.viewModelScope,
      onValue: { [weak self] in self?.state = $0 }
    )
  }

  @discardableResult
  func dispatch(action: GithubSearchAction) -> Bool {
    self.vm.dispatch(action: action)
  }

  deinit {
    Napier.d("\(self)::deinit")
    vm.clear()
  }
}

Download APK

Building & Develop

  • Android Studio Chipmunk | 2021.2.1 (note: Java 11 is now the minimum version required).

  • XCode 13.2 or later (due to use of new Swift 5.5 concurrency APIs).

  • Clone project: git clone https://github.com/hoc081098/GithubSearchKMM.git

  • Android: open project by Android Studio and run as usual.

  • iOS

    # Cd to root project directory
    cd GithubSearchKMM
    
    # Setup
    sh scripts/run_ios.sh

    There's a Build Phase script that will do the magic. 🧞
    Cmd + B to build
    Cmd + R to run.

    When you see any error like this:

    ./GithubSearchKMM/iosApp/iosApp/ContentView.swift:4:8: No such module 'sharedSwift'
    

    You can run the following commands (must select Read from disk inside Xcode):

    # go to iosApp directory
    cd iosApp
    
    # install pods
    pod install

    Then, you can build and run inside Xcode as usual.

LOC

--------------------------------------------------------------------------------
 Language             Files        Lines        Blank      Comment         Code
--------------------------------------------------------------------------------
 Kotlin                  96         7111          863          398         5850
 JSON                     7         3938            0            0         3938
 Swift                   16          857          110           98          649
 Markdown                 1          255           47            0          208
 Bourne Shell             2          245           28          110          107
 Batch                    1           91           21            0           70
 XML                      7           71            6            0           65
--------------------------------------------------------------------------------
 Total                  130        12568         1075          606        10887
--------------------------------------------------------------------------------
Comments
  • build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.8 to 1.7.22-1.0.8

    build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.8 to 1.7.22-1.0.8

    Bumps com.google.devtools.ksp from 1.7.20-1.0.8 to 1.7.22-1.0.8.

    Release notes

    Sourced from com.google.devtools.ksp's releases.

    1.7.22-1.0.8

    KSP 1.0.8 for Kotlin 1.7.22

    1.7.21-1.0.8

    KSP 1.0.8 for Kotlin 1.7.21

    Commits
    • 26b7a0e UPDATE_KOTLIN_VERSION: 1.7.22
    • 9c06151 Revert "Revert "UPDATE_KOTLIN_VERSION: 1.7.21""
    • b23654e Revert "Revert "UPDATE_KOTLIN_VERSION: 1.7.20""
    • 1330eeb Revert "Revert "UPDATE_KOTLIN_VERSION: 1.7.20-Beta""
    • 6219cb5 Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-446"""
    • 708e760 Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-1390"""
    • 5f96d74 Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-1593"""
    • 6ca8e2d Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2355"""
    • ec9ce4f Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2355"""
    • 490a518 Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2355"""
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • chore(deps): update dependency gradle to v7.6

    chore(deps): update dependency gradle to v7.6

    Mend Renovate

    This PR contains the following updates:

    | Package | Update | Change | |---|---|---| | gradle (source) | minor | 7.5.1 -> 7.6 |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.8 to 1.7.21-1.0.8

    build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.8 to 1.7.21-1.0.8

    Bumps com.google.devtools.ksp from 1.7.20-1.0.8 to 1.7.21-1.0.8.

    Release notes

    Sourced from com.google.devtools.ksp's releases.

    1.7.21-1.0.8

    KSP 1.0.8 for Kotlin 1.7.21

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • chore(deps): update plugin com.google.devtools.ksp to v1.7.20-1.0.8

    chore(deps): update plugin com.google.devtools.ksp to v1.7.20-1.0.8

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.google.devtools.ksp (source) | 1.7.20-1.0.7 -> 1.7.20-1.0.8 | age | adoption | passing | confidence |


    Release Notes

    google/ksp

    v1.7.20-1.0.8

    Compare Source

    Issues Fixed

    • fixed nested java class resolution for more cases.
    • #​1153 isMutable is always true for fields in Java source
    • K/N: fix duplicated compilation

    contributors

    @​cdsap @​3flex


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • chore(deps): update sersoft-gmbh/xcodebuild-action action to v2.0.1

    chore(deps): update sersoft-gmbh/xcodebuild-action action to v2.0.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | sersoft-gmbh/xcodebuild-action | action | patch | v2.0.0 -> v2.0.1 |


    Release Notes

    sersoft-gmbh/xcodebuild-action

    v2.0.1

    Compare Source

    What's Changed

    • Update dependencies (including @actions/core to fix warning about set-output)
    • Internal cleanup

    Full Changelog: https://github.com/sersoft-gmbh/xcodebuild-action/compare/v2.0.0...v2.0.1


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • chore(deps): update maxim-lobanov/setup-xcode action to v1.5.1

    chore(deps): update maxim-lobanov/setup-xcode action to v1.5.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | maxim-lobanov/setup-xcode | action | patch | v1.5.0 -> v1.5.1 |


    Release Notes

    maxim-lobanov/setup-xcode

    v1.5.1

    Compare Source

    Fixes https://github.com/maxim-lobanov/setup-xcode/issues/55

    Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

    Also bumping all other dependencies.

    What's Changed

    Full Changelog: https://github.com/maxim-lobanov/setup-xcode/compare/v1.5.0...v1.5.1


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.6 to 1.7.20-1.0.7

    build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.6 to 1.7.20-1.0.7

    Bumps com.google.devtools.ksp from 1.7.20-1.0.6 to 1.7.20-1.0.7.

    Release notes

    Sourced from com.google.devtools.ksp's releases.

    1.7.20-1.0.7

    Behavior Changes

    blockOtherPlugins is on by default. The old behavior (allowing other plugins to be loaded in KSP's Gradle task) is deprecated and will be removed in the future.

    New Features

    #1041 A new CodeGenerator.createFile method with more flexibility

    Issues Fixed

    #167 nullability for java sources ignores annotations #897 Compatibility with Kotlin/Native compiler plugins #974 Exceptions are swallowed when using withCompilation flag #985 No "kotlin.ExtensionFunctionType" annotation on functional types with receivers #989 NoSuchElementException when getting a default argument of the inner annotation type #997 Incremental KSP fails in Java/Kotlin mixed module #1011 Generic TypeAliases Parameter are not consistent resolved #1034 After updating to KSP 1.7.0, Missing information occurs in some cases that are configured in Java. #1039 Support class extraction provided by annotation #1063 Memory leak: org.sqlite.JDBC holds classloader of KSP

    Contributors

    Thank you for the pull requests! @​Jeffset @​midery @​jameskleeh @​Bencodes @​heli-os

    Commits
    • 6a632da UPDATE_KOTLIN_VERSION: 1.7.20
    • 06c05e7 temporary disable AA tests on Windows
    • e004327 Scan Kotlin constants for JavaPsiFacade
    • 878e341 Implements referenceElement.
    • f8ca2b3 AA: use object cache for KSTypeReference.
    • c454c70 use KtType for hashCode and equals checking for KSType`
    • a399ea5 Deprecate blockOtherPlugins
    • f35af30 Simplify the implementation of blockOtherPlugins
    • a8353f6 Copy plugin options from compileKotlinNative
    • c944449 respect nullability annotations on Java type references.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • chore(deps): update maxim-lobanov/setup-xcode action to v1.5.0

    chore(deps): update maxim-lobanov/setup-xcode action to v1.5.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | maxim-lobanov/setup-xcode | action | minor | v1.4.1 -> v1.5.0 |


    Release Notes

    maxim-lobanov/setup-xcode

    v1.5.0

    Compare Source

    Updating this action to use Node.js 16. Find more details in https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • build(deps): bump kover from 0.5.1 to 0.6.1

    build(deps): bump kover from 0.5.1 to 0.6.1

    Bumps kover from 0.5.1 to 0.6.1.

    Release notes

    Sourced from kover's releases.

    0.6.1

    Features

    • Implemented filtering of reports by annotation (#121)
    • Minimal and default agent versions upgraded to 1.0.683

    Bugfixes

    • Added filtering out projects without a build file (#222)
    • Added JaCoCo reports filtering (#220)
    • Fixed coverage for function reference (#148)
    • Fixed incorrect multiplatform lookup adapter (#193)
    • Fixed ArrayIndexOutOfBoundsException during class instrumentation (#166)

    Internal features

    • Upgraded Gradle version to 7.5.1
    • Rewritten functional tests infrastructure
    • Added example projects
    • XML and HTML report generation moved to Kover Aggregator

    Documentation

    • Added contribution guide
    • Added section Building and contributing into Table of contents
    • Fix migration to 0.6.0 documentation

    0.6.0

    Note that this is a full changelog relative to 0.6.0 version. Changelog relative to 0.6.0-Beta can be found at the changelog file.

    In this version, the plugin API has been completely redesigned. The new API allows you to configure Kover in a more flexible manner, there is no need to configure Kover or test tasks separately.

    Please refer to migration guide in order to migrate from previous versions.

    Features

    • Implemented a new plugin API (#19)
    • Added support of instruction and branch counters for verification tasks (#128)
    • Ordered report tasks before verification tasks (#209)
    • Minimal and default agent versions upgraded to 1.0.680

    Bugfixes

    • Verification task is no longer executed if there are no rules (#168)
    • Added instrumentation filtering by common filters (#201)
    • Fixed instrumentation counter in IntelliJ verifier (#210, #211, #212)

    Internal features

    • Kotlin version upgraded to 1.7.10
    • instrumentation config added to the test framework
    • added test on instrumentation config

    Documentation

    • Updated docs for onCheck properties (#213)

    ... (truncated)

    Changelog

    Sourced from kover's changelog.

    0.6.1 / 2022-10-03

    Features

    • Implemented filtering of reports by annotation (#121)
    • Minimal and default agent versions upgraded to 1.0.683

    Bugfixes

    • Added filtering out projects without a build file (#222)
    • Added JaCoCo reports filtering (#220)
    • Fixed coverage for function reference (#148)
    • Fixed incorrect multiplatform lookup adapter (#193)
    • Fixed ArrayIndexOutOfBoundsException during class instrumentation (#166)

    Internal features

    • Upgraded Gradle version to 7.5.1
    • Rewritten functional tests infrastructure
    • Added example projects
    • XML and HTML report generation moved to Kover Aggregator

    Documentation

    • Added contribution guide
    • Added section Building and contributing into Table of contents
    • Fix migration to 0.6.0 documentation

    0.6.0 / 2022-08-23

    Note that this is a full changelog relative to 0.6.0 version. Changelog relative to 0.6.0-Beta can be found at the end of the changelog.

    In this version, the plugin API has been completely redesigned. The new API allows you to configure Kover in a more flexible manner, there is no need to configure Kover or test tasks separately.

    Please refer to migration guide in order to migrate from previous versions.

    Features

    • Implemented a new plugin API (#19)
    • Added support of instruction and branch counters for verification tasks (#128)
    • Ordered report tasks before verification tasks (#209)
    • Minimal and default agent versions upgraded to 1.0.680

    Bugfixes

    • Verification task is no longer executed if there are no rules (#168)
    • Added instrumentation filtering by common filters (#201)
    • Fixed instrumentation counter in IntelliJ verifier (#210, #211, #212)

    Internal features

    • Kotlin version upgraded to 1.7.10
    • instrumentation config added to the test framework
    • added test on instrumentation config

    Documentation

    ... (truncated)

    Commits
    • 24a0188 Release 0.6.1
    • 8734c77 Minimal and default agent versions upgraded to 1.0.683
    • 3dc8702 Fixed incorrect multiplatform lookup adapter
    • 562d11c Add Android example project
    • 55173f6 Implemented filtering of reports by annotation
    • 1d75e05 Fix migration to 0.6.0 documentation
    • d72c49d Added example projects
    • 798dc69 Added section Building and contributing into Table of contents
    • da53779 Added contribution guide
    • 633aebf Added JaCoCo reports filtering
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • chore(deps): update actions/cache action to v3.0.10

    chore(deps): update actions/cache action to v3.0.10

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/cache | action | patch | v3.0.9 -> v3.0.10 |


    Release Notes

    actions/cache

    v3.0.10

    Compare Source

    • Fix a bug with sorting inputs.
    • Update definition for restore-keys in README.md

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • chore(deps): update actions/cache action to v3.0.9

    chore(deps): update actions/cache action to v3.0.9

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/cache | action | patch | v3.0.8 -> v3.0.9 |


    Release Notes

    actions/cache

    v3.0.9

    Compare Source

    • Enhanced the warning message for cache unavailability in case of GHES.

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 1
  • build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.8 to 1.8.0-1.0.8

    build(deps): bump com.google.devtools.ksp from 1.7.20-1.0.8 to 1.8.0-1.0.8

    Bumps com.google.devtools.ksp from 1.7.20-1.0.8 to 1.8.0-1.0.8.

    Release notes

    Sourced from com.google.devtools.ksp's releases.

    1.8.0-1.0.8

    KSP 1.0.8 for Kotlin 1.8.0.

    1.8.0-RC2-1.0.8

    KSP 1.0.8 for Kotlin 1.8.0-RC2

    1.8.0-RC-1.0.8

    KSP 1.0.8 for Kotlin 1.8.0-RC

    1.8.0-Beta-1.0.8

    This is KSP 1.0.8 release for kotlin 1.8.0-Beta

    1.7.22-1.0.8

    KSP 1.0.8 for Kotlin 1.7.22

    1.7.21-1.0.8

    KSP 1.0.8 for Kotlin 1.7.21

    Commits
    • 1a1818b UPDATE_KOTLIN_VERSION: 1.8.0
    • 9daa5e4 Setup module name according to Kotlin 1.8.0-RC2
    • d71fb83 UPDATE_KOTLIN_VERSION: 1.8.0-RC2
    • ceddc19 UPDATE_KOTLIN_VERSION: 1.8.0-RC
    • 490f129 Setup module name for KGP correctly
    • c20fff2 Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-Beta""
    • 01268fe Revert "Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2843""""
    • d7726dc Revert "Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2355""""
    • 0e51c14 Revert "Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2355""""
    • 221ade5 Revert "Revert "Revert "Revert "UPDATE_KOTLIN_VERSION: 1.8.0-dev-2355""""
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): update plugin com.google.devtools.ksp to v1.8.0-1.0.8

    chore(deps): update plugin com.google.devtools.ksp to v1.8.0-1.0.8

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.google.devtools.ksp (source) | 1.7.20-1.0.8 -> 1.8.0-1.0.8 | age | adoption | passing | confidence |


    Release Notes

    google/ksp

    v1.8.0-1.0.8

    Compare Source

    KSP 1.0.8 for Kotlin 1.8.0.

    v1.7.22-1.0.8

    Compare Source

    KSP 1.0.8 for Kotlin 1.7.22

    v1.7.21-1.0.8

    Compare Source

    KSP 1.0.8 for Kotlin 1.7.21


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • Can add function about User ?

    Can add function about User ?

    Dear sir

    can add

    1. search / list User (Users) : like hoc081098 ( api.github.com/users/hoc081098)
    2. list all (public) repos of user
    3. repo (repos ) fork / Transfer ownership to other user THX
    enhancement 
    opened by CMingTseng 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Open

    These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

    Detected dependencies

    cocoapods
    iosApp/Podfile
    • Kingfisher ~> 7.0
    github-actions
    .github/workflows/build.yml
    • actions/checkout v3
    • actions/setup-java v3
    • actions/cache v3
    • actions/cache v3
    • actions/upload-artifact v3
    .github/workflows/gradle-versions-checker.yml
    • actions/checkout v3
    • actions/setup-java v3
    • actions/cache v3
    .github/workflows/gradle-wrapper-validation.yml
    • actions/checkout v3
    • gradle/wrapper-validation-action v1
    .github/workflows/ios-build.yml
    • actions/checkout v3
    • actions/setup-java v3
    • maxim-lobanov/setup-xcode v1.5.1
    • actions/cache v3
    • actions/cache v3
    • sersoft-gmbh/xcodebuild-action v2.0.1
    .github/workflows/remove-old-artifacts.yml
    • c-hive/gha-remove-artifacts v1
    .github/workflows/review-suggest.yml
    • actions/checkout v3
    • actions/checkout v3
    • actions/setup-java v3
    • actions/cache v3
    • reviewdog/action-suggester v1
    .github/workflows/test.yml
    • actions/checkout v3
    • actions/setup-java v3
    • actions/cache v3
    • actions/cache v3
    • codecov/codecov-action v3.1.1
    gradle
    gradle.properties
    settings.gradle.kts
    build.gradle.kts
    • org.jetbrains.kotlinx:kover 0.6.1
    • com.squareup:javapoet 1.13.0
    • com.google.devtools.ksp 1.7.20-1.0.8
    • com.codingfeline.buildkonfig 0.13.3
    androidApp/build.gradle.kts
    buildSrc/gradle.properties
    buildSrc/build.gradle.kts
    buildSrc/buildSrc/gradle.properties
    flowredux/build.gradle.kts
    multiplatform-viewmodel/build.gradle.kts
    shared/build.gradle.kts
    gradle-wrapper
    buildSrc/buildSrc/gradle/wrapper/gradle-wrapper.properties
    • gradle 7.6
    buildSrc/gradle/wrapper/gradle-wrapper.properties
    • gradle 7.6
    gradle/wrapper/gradle-wrapper.properties
    • gradle 7.6

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(0.0.1)
  • 0.0.1(Jul 29, 2022)

    New Contributors

    • @renovate made their first contribution in https://github.com/hoc081098/GithubSearchKMM/pull/1
    • @hoc081098 made their first contribution in https://github.com/hoc081098/GithubSearchKMM/pull/3

    Full Changelog: https://github.com/hoc081098/GithubSearchKMM/commits/0.0.1

    Source code(tar.gz)
    Source code(zip)
Owner
Petrus Nguyễn Thái Học
Functional & Reactive Programming - Rx Fan 🌰 RxDart - RxKotlin - RxSwift - rxjs 🌸 Android - iOS - Flutter - Node.js - Angular
Petrus Nguyễn Thái Học
Built with Jetpack compose, multi modules MVVM clean architecture, coroutines + flow, dependency injection, jetpack navigation and other jetpack components

RickAndMortyCompose - Work in progress A simple app using Jetpack compose, clean architecture, multi modules, coroutines + flows, dependency injection

Daniel Waiguru 9 Jul 13, 2022
Koin Annotations - help declare Koin definition in a very fast and intuitive way, and generate all underlying Koin DSL for you

The goal of Koin Annotations project is to help declare Koin definition in a very fast and intuitive way, and generate all underlying Koin DSL for you. The goal is to help developer experience to scale and go fast ?? , thanks to Kotlin Compilers.

insert-koin.io 68 Jan 6, 2023
Dependency Injection library for Compose Multiplatform, Koin wrapper.

?? Cokoin Injection library for Compose (Multiplatform and Jetpack), Koin wrapper. It uses @Composable functions to configure KoinContext and Scopes.

Bruno Wieczorek 57 Dec 29, 2022
A minimal notes application in Jetpack Compose with MVVM architecture. Built with components like DataStore, Coroutines, ViewModel, LiveData, Room, Navigation-Compose, Coil, koin etc.

Paper - A Minimal Notes App A minimal notes application in Jetpack Compose with MVVM architecture. Built with components like DataStore, Coroutines, V

Akshay Sharma 139 Jan 2, 2023
Kotlin Multiplatform Mobile + Mobile Declarative UI Framework (Jetpack Compose and SwiftUI)

Kotlin Multiplatform Mobile + Mobile Declarative UI Framework (Jetpack Compose and SwiftUI)

Kotchaphan Muangsan 3 Nov 15, 2022
A cryptocurrency application with clean architecture (MVVM, Jetpack Compose, Flow, Dagger Hilt)

Amirypto A cryptocurrency application built with Clean architecture and Jetpack component (MVVM, Jetpack Compose, Flow, Hilt, Retrofit). It was made t

null 6 Aug 20, 2022
Dependency Injection library for Kotlin Multiplatform, support iOS and Android

Multiplatform-DI library for Kotlin Multiplatform Lightweight dependency injection framework for Kotlin Multiplatform application Dependency injection

Anna Zharkova 32 Nov 10, 2022
Real life Kotlin Multiplatform project with an iOS application developed in Swift with SwiftUI, an Android application developed in Kotlin with Jetpack Compose and a backed in Kotlin hosted on AppEngine.

Conferences4Hall Real life Kotlin Multiplatform project with an iOS application developed in Swift with SwiftUI, an Android application developed in K

Gérard Paligot 98 Dec 15, 2022
MangaKu App Powered by Kotlin Multiplatform Mobile, Jetpack Compose, and SwiftUI

MangaKu ?? Introduction MangaKu App Powered by Kotlin Multiplatform Mobile, Jetpack Compose, and SwiftUI Module core: data and domain layer iosApp: io

Uwais Alqadri 132 Jan 8, 2023
Boilerplate code for implementing MVVM in Android using Jetpack libraries, coroutines, dependency injection and local persistance

MVVM Foundation This projects aims to speed up development of Android apps by providing a solid base to extend Libraries Jetpack Fragment Material3 :

Gabriel Gonzalez 2 Nov 10, 2022
Educational App made with Retrofit, Coroutines, Navigation Component, Room, Dagger Hilt, Flow & Material Motion Animations.

TechHub TechHub is a sample educational app that provides courses for people who want to learn new skills in mostly tech-related areas. The goal of th

Jon Areas 32 Dec 20, 2022
Funstuff - Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose, Compose for Wear OS, Compose for Desktop

PeopleInSpace Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose

Shivam Dhuria 2 Feb 15, 2022
Playground project for Koin Koin Compiler - Sandbox

Koin Compiler - Sandbox The goal of Koin compiler & Annotations project is to help declare Koin definition in a very fast and intuitive way, and gener

insert-koin.io 17 Nov 22, 2021
FaceTimeClone app that implements Coroutines , mvvm architecture , clean architecture , navigation component , hilt , etc.... using kotlin language

This repository contains a FaceTimeClone app that implements Coroutines , mvvm architecture , clean architecture , navigation component , hilt , etc.... using kotlin language

null 17 Dec 13, 2022
Example Multi module architecture Android project using MVVM, Dynamic Features, Dagger-Hilt, Coroutines and Navigation Components

ModularDynamicFeatureHilt An Android template project following a multi module approach with clean architecture. It has been built following Clean Arc

Mbuodile Obiosio 25 Nov 23, 2022
Shared ViewModel in Kotlin Multiplatform

multiplatform-viewmodel ?? Create shared ViewModel's for shared business logic using our ViewModel base class. Features Uses Jetpack ViewModel on Andr

Double Symmetry 16 Nov 8, 2022
This Project for how to use MVVM , state flow, Retrofit, dagger hit, coroutine , use cases with Clean architecture.

Clean-architecture This Project for how to use MVVM , state flow, Retrofit, dagger hit, coroutine , use cases with Clean architecture. Why i should us

Kareem Aboelatta 10 Dec 13, 2022
Clean MVVM with eliminating the usage of context from view models by introducing hilt for DI and sealed classes for displaying Errors in views using shared flows (one time event), and Stateflow for data

Clean ViewModel with Sealed Classes Following are the purposes of this repo Showing how you can remove the need of context in ViewModels. I. By using

Kashif Mehmood 22 Oct 26, 2022