{"id":24786877,"url":"https://github.com/apter-tech/githubuserfinder","last_synced_at":"2025-10-12T10:31:43.490Z","repository":{"id":37759891,"uuid":"478683830","full_name":"apter-tech/GitHubUserFinder","owner":"apter-tech","description":"Kotlin Multiplatform sample project with Jetpack Compose and SwiftUI","archived":false,"fork":false,"pushed_at":"2024-10-23T20:41:31.000Z","size":19965,"stargazers_count":48,"open_issues_count":4,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-24T08:26:49.544Z","etag":null,"topics":["android","ios","jetpack-compose","kotlin","kotlin-multiplatform","swiftui"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apter-tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-06T18:36:31.000Z","updated_at":"2024-10-02T14:29:44.000Z","dependencies_parsed_at":"2023-09-30T01:41:46.034Z","dependency_job_id":"8abcffef-3cbf-44f0-9806-425903c3a1b0","html_url":"https://github.com/apter-tech/GitHubUserFinder","commit_stats":null,"previous_names":["apter-tech/githubuserfinder"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apter-tech%2FGitHubUserFinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apter-tech%2FGitHubUserFinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apter-tech%2FGitHubUserFinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apter-tech%2FGitHubUserFinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apter-tech","download_url":"https://codeload.github.com/apter-tech/GitHubUserFinder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236201042,"owners_count":19111410,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","ios","jetpack-compose","kotlin","kotlin-multiplatform","swiftui"],"created_at":"2025-01-29T15:17:21.981Z","updated_at":"2025-10-12T10:31:37.696Z","avatar_url":"https://github.com/apter-tech.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHubUserFinder\n![GitHub Actions build status](https://github.com/kaszabimre/GitHubUserFinder/actions/workflows/GitHubUserFinder.yml/badge.svg)\n\nKotlin Multiplatform sample project with Jetpack Compose and SwiftUI\n\nCheck this basic, simple KMP project with latest and greatest libraries. You can also easily learn and keep your knowledge up-to-date in both [Jeptack Compose](https://developer.android.com/jetpack/compose?gclid=CjwKCAjw7vuUBhBUEiwAEdu2pHTM59Y0NTVLcoFuOJHq5g8p3dJludRLuITkxy54fKMp-3YafHSjNRoCSIwQAvD_BwE\u0026gclsrc=aw.ds) and [SwiftUI](https://developer.apple.com/xcode/swiftui/).\n\n![iOS](https://img.shields.io/badge/iOS-000000?style=for-the-badge\u0026logo=ios\u0026logoColor=white)\n![Swift](https://img.shields.io/badge/Swift-FA7343?style=for-the-badge\u0026logo=swift\u0026logoColor=white)\n![Android](https://img.shields.io/badge/Android-3DDC84?style=for-the-badge\u0026logo=android\u0026logoColor=white)\n![Kotlin](https://img.shields.io/badge/Kotlin-0095D5?\u0026style=for-the-badge\u0026logo=kotlin\u0026logoColor=white)\n![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)\n\nAndroid | iOS\n:--: | :--:\n\u003cimg src=\"/screenshots/android.gif\" width=\"300\" /\u003e | \u003cimg src=\"/screenshots/ios.gif\" width=\"300\" /\u003e\n\n\n### About the project\n\n- Shared ViewModels :rocket:\n- Shared resources (svg, strings) with moko-resources\n- MVVM + Reducer implementation = MVI\n- List and detail screens\n- Favourite user feature with SQLDelight\n- Simple paging functionality\n- Linter \u0026 formatter (detekt, swiftlint)\n- Common tests\n- Dark mode\n- Automated dependency update with Renovate\n- GitHub Actions config:  [GitHubUserFinder.yml](https://github.com/kaszabimre/GitHubUserFinder/blob/main/.github/workflows/GitHubUserFinder.yml)\n- [GitHub API](https://docs.github.com/en/rest/search#search-users)\n- Coverage report (kover)\n\n### Libraries\n\u003e Check [Dependencies.kt](https://github.com/kaszabimre/GitHubUserFinder/blob/main/buildSrc/src/main/java/Dependencies.kt) for more details\n\n- 🌎 [Ktor](https://github.com/ktorio/ktor) - Network\n  [![GitHub Repo stars](https://img.shields.io/github/stars/ktorio/ktor)](https://github.com/ktorio/ktor)\n- 🔒 [SQLDelight](https://github.com/cashapp/sqldelight) - LocalDB\n  [![GitHub Repo stars](https://img.shields.io/github/stars/cashapp/sqldelight)](https://github.com/cashapp/sqldelight)\n- 💉 [Koin](https://github.com/InsertKoinIO/koin) - DI framework\n  [![GitHub Repo stars](https://img.shields.io/github/stars/InsertKoinIO/koin)](https://github.com/InsertKoinIO/koin)\n- 📋 [Kermit](https://github.com/touchlab/Kermit) - Logger\n  [![GitHub Repo stars](https://img.shields.io/github/stars/touchlab/Kermit)](https://github.com/touchlab/Kermit)\n- 🎨 [moko resources](https://github.com/icerockdev/moko-resources) - Shared resources\n  [![GitHub Repo stars](https://img.shields.io/github/stars/icerockdev/moko-resources)](https://github.com/icerockdev/moko-resources)\n- 🚦 Testing - Common unit tests in `shared` module with [MockHttpClient](https://github.com/kaszabimre/GitHubUserFinder/blob/main/shared/src/commonTest/kotlin/io/imrekaszab/githubuserfinder/MockHttpClient.kt)\n- 🔍 Linter \u0026 formatter\n    - [Detekt](https://github.com/detekt/detekt) - `shared + Android`\n      ![GitHub Repo stars](https://img.shields.io/github/stars/detekt/Detekt)\n       ```\n       ./gradlew detekt\n       ```\n    - [Swiftlint](https://github.com/realm/SwiftLint) - `iOS`\n      ![GitHub Repo stars](https://img.shields.io/github/stars/realm/SwiftLint)\n        - [Rules in swiftlint.yaml](https://github.com/kaszabimre/GitHubUserFinder/blob/main/iosApp/.swiftlint.yml)\n       ```\n       swiftlint --fix\n       ```\n\n### Code coverage\n\n- 📋 [Kover](https://github.com/Kotlin/kotlinx-kover) - Kotlin code coverage tool\n  [![GitHub Repo stars](https://img.shields.io/github/stars/Kotlin/kotlinx-kover)](https://github.com/Kotlin/kotlinx-kover)\n\n\u003e Use `./gradlew koverVerify koverHtmlReport` to verify and generate the coverage report with a custom rule:\n\n```Kotlin\nkover {\n        verify {\n            rule {\n                isEnabled = true\n                name = \"Minimum coverage verification error\"\n                target =\n                    kotlinx.kover.api.VerificationTarget.ALL\n\n                bound {\n                    minValue = 90\n                    maxValue = 100\n                    counter =\n                        kotlinx.kover.api.CounterType.LINE\n                    valueType =\n                        kotlinx.kover.api.VerificationValueType.COVERED_PERCENTAGE\n                }\n            }\n        }\n    }\n```\n\n\u003e After that we can use the [Kotlinx Kover Report](https://github.com/marketplace/actions/kotlinx-kover-report) to add the coverage report to the PR as a comment\n\n\n### IDEs\n\n- Android Studio Flamingo | 2022.2.1 | with [KMM plugin](https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform-mobile)\n- Xcode 14.3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapter-tech%2Fgithubuserfinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapter-tech%2Fgithubuserfinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapter-tech%2Fgithubuserfinder/lists"}