äžæ¬Ÿåºäº Compose Multiplatform çåŒæº Github 客æ·ç«¯ AppïŒä»åäžä»œ Kotlin / Compose 代ç åæ¶è·é Android / Desktop JVM (macOS + Windows + Linux) / iOS / macOS Native å ± 5 ç«¯ïŒæäŸæŽäž°å¯çåèœãæŽäžèŽç跚端äœéªïŒæšåšæŽå¥œçæ¥åžžç®¡çå绎æ€äžªäºº GithubïŒæäŸæŽå¥œæŽæ¹äŸ¿ç驟蜊äœéªïœïœÎ£(ï¿£ãï¿£ïŸ)ïŸãæ¬ä»åº rootProject 䞺 GSYGithubAppComposeïŒå¹¶æäŸäž°å¯ç忬Ÿå¯¹æ¯ïŒ
-
忬Ÿ Android Compose ç ïŒ https://github.com/CarGuo/GSYGithubAppCompose ïŒ
-
忬Ÿ Flutter ç ïŒ https://github.com/CarGuo/GSYGithubAppFlutter ïŒ
-
忬Ÿ Kotlin View ç ïŒ https://github.com/CarGuo/GSYGithubAppKotlin ïŒ
-
忬Ÿ ReactNative ç ïŒ https://github.com/CarGuo/GSYGithubApp ïŒ
-
忬Ÿ Weex ç ïŒ https://github.com/CarGuo/GSYGithubAppWeex ïŒ
| å ¬äŒå· | æé | ç¥ä¹ | 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 çå€ç§è·šç«¯æ¡æ¶ç䜿çšã
éç项ç®çäœ¿çšæ
åµååéŠïŒå°æ¶äžæ¶æ ¹æ®æŽæ°å¹¶å®åçšæ·äœéªäžåèœäŒåïŒæ¬¢è¿æåºé®é¢ã
![]() |
![]() |
![]() |
![]() |
| 端 | 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 æäŸïŒè·šåè¡çéåšå¯¹åºå®¿äž»äžæ§è¡ã
ndk.dir="xxxxxxxx"
CLIENT_ID = "xxxxxx"
CLIENT_SECRET = "xxxxxx"
泚å Github APP äŒ ééš ïŒåœç¶ïŒåææ¯äœ ç°æäžäžª github èŽŠå· (ïœï¿£âœï¿£)ïœ ã
Github API éèŠäœ¿çšå®å šç»åœïŒææç»åœïŒïŒé£ä¹åšäžè¿°æ³šå Github App ç Authorization callback URL äžæ å¿ é¡»å¡«å ¥
gsygithubapp://authed
# 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ã
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 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 |
è·š 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
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.
















