Skip to content

CarGuo/GSYGithubAppCMP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

English

䞀欟基于 Compose Multiplatform 的匀源 Github 客户端 App从同䞀仜 Kotlin / Compose 代码同时跑通 Android / Desktop JVM (macOS + Windows + Linux) / iOS / macOS Native 共 5 端提䟛曎䞰富的功胜、曎䞀臎的跚端䜓验旚圚曎奜的日垞管理和绎技䞪人 Github提䟛曎奜曎方䟿的驟蜊䜓验Σ( ̄。 ̄)。本仓库 rootProject 䞺 GSYGithubAppCompose并提䟛䞰富的同欟对比

公䌗号 掘金 知乎 CSDN 简乊
GSYTech 点我 点我 点我 点我

公䌗号

基于 Compose Multiplatform 1.10.3 + Kotlin 2.3.20 匀发的跚端 App。
单䞀代码仓同时亀付 Android / Desktop JVM (macOS + Windows + Linux) / iOS / macOS Native 5 端。

项目的目的是䞺方䟿䞪人日垞绎技和查阅 Github同时适合 Compose Multiplatform 练手孊习
芆盖 KMP target、expect/actual、跚端富航、跚端 ViewModel/Lifecycle、Ktor 眑络、Koin DI、
Coil 囟片、Apollo GraphQL 等倚种跚端框架的䜿甚。

随着项目的䜿甚情况和反銈将时䞍时根据曎新并完善甚户䜓验䞎功胜䌘化欢迎提出问题。

Github Actions GitHub stars GitHub forks GitHub issues GitHub license

5 端䞀览Compose Multiplatform Targets

端 KMP Target 入口暡块 关键标识
Android androidTarget androidApp applicationId com.shuyu.gsygithubappcomposeminSdk 24compileSdk 36
Desktop JVM (macOS + Windows + Linux) jvm desktopApp mainClass com.shuyu.gsygithubappcompose.desktop.MainKttargetFormats Exe / Msi / Dmg / Deb
iOS (真机) iosArm64 iosApp XcodeGen + bundle id com.shuyu.gsygithubappcomposedeploymentTarget iOS 15.0
iOS (Simulator) iosSimulatorArm64 iosApp 同䞊跑圚 Apple Silicon Simulator
macOS Native macosArm64 composeShared framework + 宿䞻壳 Apple Silicon 原生 framework

跚端共享代码集䞭圚 composeShared、core、data 侎 feature 例的 commonMain各端入口仅承担最小宿䞻职莣。

猖译运行流皋

环境芁求

  • 项目䜿甚 AGP 9.0.0至少需芁 Android Studio Otter (2025.1.1) Feature Drop 或曎高版本才胜正垞猖译运行。
  • Compose Multiplatform 1.10.3 + Kotlin 2.3.20建议䜿甚对应工具铟的 IntelliJ IDEA 或 Android Studio。
  • iOS / macOS Native 端需芁 macOS 䞻机安装 Xcode 15+、xcodegen 侎 xcodebuild。
  • Desktop JVM 打包 (Dmg / Msi / Deb) 由 Compose Desktop 提䟛跚发行版需圚对应宿䞻䞊执行。

重点䜠需芁圚项目根目圕䞋配眮 local.properties 文件可参考 local.properties.sample然后蟓入䜠申请的 Github client_id 和 client_secret。

ndk.dir="xxxxxxxx"
CLIENT_ID = "xxxxxx"
CLIENT_SECRET = "xxxxxx"

泚册 Github APP 䌠送闚 圓然前提是䜠现有䞀䞪 github 莊号 ( ̄▜ ̄) 。

Github API 需芁䜿甚安党登圕授权登圕那么圚䞊述泚册 Github App 的 Authorization callback URL 䞀栏必须填入

gsygithubapp://authed

5 端构建呜什䞀览

# 1) Androiddebug apk安装到 [androidApp](file:///Users/guoshuyu/workspace/android/GSYGithubAppCMP/androidApp) 䞊
./gradlew :androidApp:assembleDebug

# 2) Desktop JVM 盎接 run匀发态macOS / Windows / Linux 任䞀宿䞻
./gradlew :desktopApp:run

# 3) Desktop JVM 平台原生安装包
./gradlew :desktopApp:packageDmg     # macOS  → .dmg
./gradlew :desktopApp:packageMsi     # Windows → .msi
./gradlew :desktopApp:packageDeb     # Linux   → .deb

# 4) iOS甚 XcodeGen 生成工皋再甚 xcodebuild 构建圚 [iosApp](file:///Users/guoshuyu/workspace/android/GSYGithubAppCMP/iosApp) 目圕䞋
cd iosApp && xcodegen generate
xcodebuild -project iosApp.xcodeproj -scheme iosApp -configuration Debug \
  -destination 'generic/platform=iOS Simulator' build

# 5) Compose Multiplatform Framework 产物䟛 iOS / macOS 宿䞻壳铟接
./gradlew :composeShared:linkDebugFrameworkIosSimulatorArm64
./gradlew :composeShared:linkDebugFrameworkMacosArm64

曎诊细的匀发者䞊手步骀见 QUICK_START.md。

项目结构囟

KeyFeatures

Core Technologies

Layer Structure

Technology Stack

Navigation Flow

Data Flow Architecture

敎䜓架构囟

┌─────────────────────────────────────────────────────────────────────────┐
│                          GSYGithubAppCompose                            │
│              (Compose Multiplatform + KMP + MVVM + Koin)                │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
        ┌──────────────┬────────────┌────────────┬──────────────┐
        │              │            │            │              │
   ┌────▌───┐    ┌─────▌────┐  ┌────▌───┐  ┌────▌───┐    ┌─────▌─────┐
   │androidApp│  │desktopApp│  │ iosApp │  │macosApp│    │ Web 预留   │
   │(android  │  │  (jvm)   │  │(iosArm/│  │(macos  │    │ (规划䞭)   │
   │ Target)  │  │          │  │ iosSim)│  │ Arm64) │    │            │
   └────┬─────┘  └────┬─────┘  └────┬───┘  └────┬───┘    └────────────┘
        │             │             │           │
        └─────────────┎──────┬──────┎───────────┘
                             │
                ┌────────────▌────────────┐
                │      composeShared      │
                │ (跚端 UI / 入口聚合)     │
                └────────────┬────────────┘
                             │
        ┌────────────────────┌────────────────────┐
        │                    │                    │
 ┌──────▌──────┐    ┌────────▌────────┐    ┌─────▌──────┐
 │  feature/*  │    │      data       │    │   core/*   │
 │ (13 modules)│    │ Repository 层   │    │ network/db │
 └─────────────┘    └─────────────────┘    │ common/ui  │
                                           └────────────┘

暡块䟝赖关系囟

                ┌────────────┐ ┌────────────┐ ┌────────┐ ┌─────────┐
                │ androidApp │ │ desktopApp │ │ iosApp │ │macosHost│
                └─────┬──────┘ └─────┬──────┘ └────┬───┘ └────┬────┘
                      │              │             │          │
                      └──────┬───────┎─────────────┎──────────┘
                             │
                       ┌─────▌─────┐
                       │composeShared│
                       └─────┬─────┘
                             │
        ┌────────────────────┌────────────────────────┐
        │                    │                        │
 ┌──────▌──────┐      ┌──────▌──────┐         ┌──────▌──────┐
 │  feature/*  │      │    data     │         │   core/ui   │
 │             │      │             │         │             │
 │ 所有功胜暡块 │◄────── Repository  │         │ 通甹 UI 组件 │
 │             │      │             │         │             │
 └──────┬──────┘      └──────┬──────┘         └──────┬──────┘
        │                    │                       │
        │            ┌───────┌────────┐              │
        │            │       │        │              │
        └────────────┌───────┌────────┌──────────────┘
                     │       │        │
         ┌───────────▌─┐  ┌──▌────────▌──┐  ┌──────────────┐
         │core/network │  │core/database │  │ core/common  │
         │             │  │              │  │              │
         │ Ktor 3.1.0  │  │   Room KMP   │  │ DataStore    │
         │ Apollo      │  │   Entity/DAO │  │  Token       │
         │ Models      │  │              │  │  Resources   │
         └─────────────┘  └──────────────┘  └──────────────┘

䟝赖规则
  androidApp / desktopApp / iosApp / macosHost → composeShared
  composeShared → feature/*, core/ui, data
  feature/*    → data, core/ui, core/common
  data         → core/network, core/database, core/common
  core/ui      → core/common
  core/network → (独立暡块)
  core/database→ (独立暡块)
  core/common  → (独立暡块)

暡块诊细结构

GSYGithubAppCompose/
│
├── androidApp/                             # Android 入口宿䞻applicationId com.shuyu.gsygithubappcompose
│   ├── MainActivity.kt                     # 䞻入口挂蜜 composeShared
│   ├── GSYApplication.kt                   # ApplicationKoin 启劚
│   └── di/AppModule.kt                     # Android 端䞓属 module
│
├── desktopApp/                             # Desktop JVM 入口mainClass com.shuyu.gsygithubappcompose.desktop.MainKt
│   ├── Main.kt                             # singleWindowApplication 入口
│   ├── language/JvmLanguageDataStore.kt    # JVM 端 DataStore 适配
│   ├── session/DesktopUserSession.kt       # 桌面䌚话
│   └── diagnostics/StartRouteDiagnostics.kt# 启劚路由诊断
│
├── iosApp/                                 # iOS 入口宿䞻XcodeGen + Swift 壳
│   ├── project.yml                         # XcodeGen 工皋描述
│   ├── iosApp/iOSApp.swift                 # SwiftUI App 入口
│   ├── iosApp/ContentView.swift            # 调甚 composeShared 的 MainViewController
│   └── iosApp/Assets.xcassets/             # AppIcon / launch_image䞎 Android 同源
│
├── composeShared/                          # 跚端 UI 聚合 + iOS 入口胶氎
│   └── src/iosMain/kotlin/.../MainViewController.kt
│
├── core/                                   # 栞心基础暡块commonMain 䌘先
│   │
│   ├── network/                            # 眑络层Ktor 3.1.0 + Apollo GraphQL
│   │   ├── api/GitHubApiService.kt         # GitHub REST API 接口commonMain
│   │   ├── graphql/                        # Apollo schema + queries
│   │   └── di/NetworkModule.kt             # Koin 4.2.1 module
│   │
│   ├── database/                           # 数据库层Room KMP
│   │   ├── entity/                         # EntitycommonMain
│   │   ├── dao/                            # DAO
│   │   └── AppDatabase.kt
│   │
│   ├── common/                             # 公共资源 / DataStore / 倚语蚀
│   │   ├── composeResources/               # Compose Multiplatform 资源drawable / files / values
│   │   │   ├── drawable/ic_launcher.png    # 5 端共享 AppIcon 源
│   │   │   ├── drawable/launch_image.png   # 5 端共享 LaunchScreen 源
│   │   │   └── files/launcher_lottie.json
│   │   └── androidMain/res/                # Android 端 mipmap 资源䞎 commonMain 同源
│   │
│   └── ui/                                 # UI 组件 / 䞻题 / 富航
│       ├── components/                     # GSYPullRefresh / GSYTopAppBar 等
│       ├── theme/                          # Material 3
│       └── navigation/                     # 基于 jetbrains-navigation-compose 2.9.1
│
├── data/                                   # 数据层Repository + expect/actual Dispatcher
│   ├── commonMain/.../repository/          # 跚端 Repository 实现
│   ├── androidMain/.../Dispatchers.android.kt
│   ├── jvmMain/.../Dispatchers.jvm.kt
│   ├── iosMain/.../Dispatchers.ios.kt
│   └── macosMain/.../Dispatchers.macos.kt
│
└── feature/                                # 13 䞪 feature 暡块党郚 commonMain
    ├── welcome/                            # 欢迎页
    ├── login/                              # OAuth 登圕
    ├── home/                               # 䞻页底郚富航
    ├── dynamic/                            # 劚态事件流
    ├── trending/                           # 趋势
    ├── profile/                            # 䞪人䞭心
    ├── search/                             # 搜玢
    ├── detail/                             # 仓库诊情
    ├── code/                               # 代码浏览
    ├── issue/                              # Issue 管理
    ├── push/                               # 掚送管理
    ├── list/                               # 列衚
    ├── notification/                       # 通知
    ├── info/                               # 信息
    └── history/                            # 浏览历史

各暡块对应的 build 脚本入口androidApp/build.gradle.kts、desktopApp/build.gradle.kts、composeShared/build.gradle.kts、iosApp/project.yml版本目圕见 gradle/libs.versions.toml。

技术架构囟

┌─────────────────────────────────────────────────────────────────────┐
│                         技术栈 (Tech Stack)                          │
├──────────────────────────────────────────────────────────────────────
│                                                                     │
│  跚端框架              Compose Multiplatform 1.10.3                  │
│                        Kotlin 2.3.20 + AGP 9.0.0                    │
│                        KMP targets: androidTarget / jvm /            │
│                        iosArm64 / iosSimulatorArm64 / macosArm64    │
│  ├──────────────────────────────────────────────────────────────   │
│                                                                     │
│  UI 层                 Compose Multiplatform + Material 3            │
│                        jetbrains-navigation-compose 2.9.1            │
│                        jetbrains-lifecycle 2.10.0                    │
│                        Coil 2.7.0囟片加蜜                        │
│                        Lottie倍杂劚画                            │
│  ├──────────────────────────────────────────────────────────────   │
│                                                                     │
│  状态管理              StateFlow + ViewModel(KMP)                    │
│                        Kotlin Coroutines + Flow                     │
│  ├──────────────────────────────────────────────────────────────   │
│                                                                     │
│  䟝赖泚入              Koin 4.2.1跚 5 端统䞀                     │
│  ├──────────────────────────────────────────────────────────────   │
│                                                                     │
│  眑络层                Ktor 3.1.0commonMain                      │
│                        Apollo GraphQL                                │
│                        Kotlinx Serialization                         │
│  ├──────────────────────────────────────────────────────────────   │
│                                                                     │
│  数据库层              Room KMP                                      │
│                        DataStore替代 SharedPreferences          │
│  ├──────────────────────────────────────────────────────────────   │
│                                                                     │
│  架构暡匏              MVVM + Repository Pattern                     │
│                        Clean Architecture                           │
│                        Unidirectional Data Flow                     │
│                        expect / actual 平台分发                      │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

数据流向囟

┌──────────────┐        ┌──────────────┐        ┌──────────────┐
│              │        │              │        │              │
│   Screen     │◄────────  ViewModel   │◄────────  Repository  │
│  (Compose MP)│ State  │   (KMP)      │  Flow  │  (commonMain)│
│              │        │              │        │              │
└──────┬───────┘        └──────┬───────┘        └──────┬───────┘
       │                       │                       │
       │ User Action           │ Business Logic        │ Data Source
       │                       │                       │
       ▌                       ▌                       ▌
┌──────────────┐        ┌──────────────┐        ┌──────────────┐
│              │        │              │        │              │
│   onClick    │───────►│  loadData()  │───────►│ Ktor 3.1.0 / │
│   onRefresh  │ Event  │  refresh()   │ Call   │  Room KMP    │
│              │        │              │        │              │
└──────────────┘        └──────────────┘        └──────────────┘

数据流
1. 甚户操䜜觊发 UI 事件5 端同䞀仜 Composable
2. ViewModel 倄理䞚务逻蟑KMP commonMain
3. Repository 协调数据源眑络 Ktor / 数据库 Room KMP
4. 数据通过 Flow 返回到 ViewModel
5. ViewModel 曎新 UiState
6. UI 自劚重组星瀺新状态Android / Desktop / iOS / macOS 䞀臎

分层职莣

层级 暡块 职莣 䞻芁技术
衚现层 feature/ UI 枲染、甚户亀互、状态展瀺 Compose Multiplatform、jetbrains-navigation-compose 2.9.1
䞚务层 data (ViewModel) 䞚务逻蟑、状态管理、数据猖排 StateFlow、Coroutines、jetbrains-lifecycle 2.10.0
数据层 data (Repository) 数据访问、猓存策略、数据映射 Repository Pattern、expect/actual
眑络层 core/network API 调甚、眑络请求、数据暡型 Ktor 3.1.0、Apollo GraphQL
存傚层 core/database 本地猓存、数据持久化 Room KMP、DataStore
基础层 core/common / core/ui 公共工具、UI 组件、资源 composeResources、Koin 4.2.1、Coil 2.7.0

真机回園测试Manual Test Playbooks

è·š Android / iOS / macOS-Desktop / Windows-Desktop / Linux-Desktop 倚端的可 copy-run 手劚回園剧本

平台 入口 工具栈
Android (uiautomator) testing/uiautomator/playbook.md adb + input swipe x y x y 80 + screencap
iOS Simulator testing/ios/playbook.md xcrun simctl + idb ui tap + pasteboard
macOS Desktop (DMG) testing/macos-desktop/playbook.md cliclick + osascript + screencapture

E2E 双蜚脚本13 路由党 PASS

  • iOStesting/ios/scripts/e2e_all_routes.sh
  • macOS Desktoptesting/macos-desktop/scripts/e2e_all_routes.sh
  • Androidtesting/uiautomator/

13 路由芆盖welcome / login / home / dynamic / profile / trending / search / repodetail / code / issue / push / notification / history / info双蜚截囟 + log å…š PASS产物分别萜圚 tools/screenshots/ios、tools/screenshots/macos、tools/logs/ios、tools/logs/macos。

iOS 端的 AppIcon 侎 LaunchScreen 已䞎 Android 同源统䞀来自 core/common 的 ic_launcher / launch_image见 iosApp/iosApp/Assets.xcassets/AppIcon.appiconset 侎 iosApp/iosApp/Assets.xcassets/launch_image.imageset。

先看哪䞀仜跚平台差匂速查衚 → testing/PLATFORM_DIFF.md

每条 P-XX 剧本P-00 Cold Boot / P-01 Login / P-02 Dynamic / P-03 RepoDetail / P-04 PushDetail / P-05 Trending / P-06 Profile / P-08 Notification圚䞉套 playbook 䞭结构䞎验证点完党䞀臎只是工具呜什䞍同。每䞪平台的讟倇 / 窗口元数据见各自 device.md每䞪屏幕的元玠䞭心坐标见各自 screen_map.md。

⚠ "本文档比 README 曎重芁" —— 改 UI 后第䞀件事是 update screen_map其次才是回園。

䞋蜜

Apk䞋蜜铟接 Apk䞋蜜铟接

桌面端 Dmg / Msi / Deb 侎 iOS ipa 暂随 Release 滚劚发垃劂未发垃请按䞊文 5 端构建呜什本地产出。

瀺䟋囟片截囟并非完党对应

感谢

https://deepwiki.com/CarGuo/GSYGithubAppCompose

LICENSE

CarGuo/GSYGithubAppFlutter is licensed under the
Apache License 2.0

A permissive license whose main conditions require preservation of copyright and license notices.
Contributors provide an express grant of patent rights.
Licensed works, modifications, and larger works may be distributed under different terms and without source code.

About

GSYGithubAppCMP

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages