Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
9b0984f
feat: KMP 프로젝트 골격 추가
Jun 22, 2026
71138d1
feat: 크루위키 폰트 리소스 추가
Jun 22, 2026
f7f6996
feat: 크루위키 이미지 자산 추가
Jun 22, 2026
d5575fe
feat: 웹사이트 스타일 일괄 적용
Jun 22, 2026
41ccc8f
feat: 크루위키 공용 라우팅 구조 추가
Jun 22, 2026
0a56fd1
feat: 문서 상세 화면 골격 추가
Jun 22, 2026
2988669
feat: Document 공용 모델 추가
Jun 22, 2026
592fef4
feat: 문서 상세 화면에 Document 모델 주입
Jun 22, 2026
80a8d4e
feat: Ktor HTTP 클라이언트 KMP 의존성 추가
Jun 22, 2026
da7db2c
feat: 네트워크 레이어 구현 (HTTP Client, DTO, API Service)
Jun 22, 2026
2dcfaf0
feat: Repository 레이어 및 그룹 모델 구현
Jun 22, 2026
8767c62
feat: 각 화면 ViewModel 구현
Jun 22, 2026
03a885f
feat: DocumentLogs, DocumentLogDetail, GroupDetail 화면 구현
Jun 22, 2026
b003794
feat: NavHost ViewModel 연동 및 실제 API 데이터 연결
Jun 22, 2026
7d3e2bc
feat: BASE_URL을 실제 백엔드 서버 주소로 변경
Jun 22, 2026
1fe5044
fix: AndroidManifest에 인터넷 권한 및 HTTP 트래픽 허용 추가
Jun 22, 2026
8efa744
feat: Swagger 스펙 기반 DTO·API·서비스·Repository 전면 수정
Jun 22, 2026
2677195
fix: 컴파일 에러 전체 수정
Jun 22, 2026
9ac71f8
fix: KMP iOS 컴파일 에러 수정
Jun 22, 2026
3e6f020
feat: Home 화면 구현 - 최근 편집 문서 목록 + 인기문서 이동 버튼
Jun 22, 2026
7ab28c6
fix: HTTP 500 에러 핸들링 추가 및 RecentDocument 모델 추가
Jun 22, 2026
d739bb5
feat: NavHost - Home·Popular·Document·Group 실제 데이터 연결 및 라우팅 정리
Jun 22, 2026
6b29e82
feat: UI 화면 crew-wiki-next 디자인 반영 - 문서상세/편집기록/그룹/인기문서
Jun 22, 2026
cacbdfb
feat: Coil3 + multiplatform-markdown-renderer 의존성 추가
Jun 22, 2026
9d770d7
feat: 마크다운 렌더링 및 이미지 로딩 적용 - Markdown() 컴포저블 교체
Jun 22, 2026
58dc830
fix: iOS SIGABRT 크래시 수정 - Markdown fillMaxWidth 추가, FlowRow OptIn, HT…
Jun 22, 2026
5647a08
fix: iOS SIGABRT 수정 - 외부 마크다운 라이브러리 제거 후 자체 MarkdownRenderer 구현
Jun 22, 2026
4b43637
fix: App.kt crossfade 미지원 함수 제거
Jun 22, 2026
1e14f54
feat: 마크다운 표(Table) 렌더링 구현 - 헤더/정렬/홀짝행 배경/가로스크롤
Jun 22, 2026
db68675
feat: 상단 헤더 구현 - 로고, 셔플, 검색 아이콘
Jun 22, 2026
956c456
fix: 상단 헤더 상태바 침범 수정 및 로고 아이콘 적용
Jun 22, 2026
6a6a899
fix: 문서 상세 화면 편집/편집기록/작성하기 버튼 제목 위로 이동
Jun 22, 2026
7c43b38
fix: 상단바·검색화면 텍스트에 Pretendard 폰트 누락 적용
Jun 22, 2026
cec44ac
fix: 편집하기/편집기록/작성하기 버튼을 본문 카드 밖 최상단으로 이동
Jun 22, 2026
7cd991a
feat: 하단 네비게이션 바 추가 - 홈/최근 편집/최근 확인 문서/설정
Jun 22, 2026
04eb430
feat: 홈 화면에 대문 문서 콘텐츠 표시
Jun 22, 2026
4e7b38d
fix: 문서 상세 본문 카드 내부 여백을 1/4 수준으로 축소
Jun 22, 2026
b2694a0
feat: 앱 아이콘을 icon.png 기반으로 교체
Jun 22, 2026
49516b5
fix: 홈 화면에서 인기문서 바로가기와 최근 편집 목록 제거
Jun 22, 2026
ad5a813
fix: 표 경계선 정렬 및 본문 링크 클릭 시 페이지 이동 안되는 문제 수정
Jun 22, 2026
e2205ef
feat: 마크다운 표를 라벨/값 카드 스타일로 변경
Jun 22, 2026
177c71a
feat: 작성하기/편집하기 앱 내 에디터 구현 - 문서 저장·소속 연결·충돌 처리
Jun 22, 2026
73b1ed4
fix: 편집하기/편집기록/작성하기 버튼을 문서 박스 내 제목 하단으로 이동
Jun 22, 2026
5c2fd9f
fix: 마크다운 내부 링크 클릭 시 앱 내 라우팅으로 이동하도록 수정
Jun 22, 2026
e449da3
fix: 마크다운 이미지 기본 alt 텍스트 image 노출 제거
Jun 22, 2026
5144833
fix: 문서 제목 하단 divider 추가
Jun 22, 2026
e9b8463
fix: 문서 저장 요청에 JSON Content-Type 헤더 추가
Jun 22, 2026
06a5423
fix: 마크다운 헤더 divider 스타일을 웹과 유사하게 조정
Jun 22, 2026
1fa9d43
fix: 링크가 걸린 마크다운 이미지 렌더링 지원
Jun 22, 2026
81825a7
fix: 마크다운 인용문 렌더링 및 표시바 스타일 수정
Jun 22, 2026
c8bc9d3
fix: 들여쓴 목록과 이미지 마크다운 파싱 보정
Jun 22, 2026
e080e29
fix: 헤더 로고 클릭 홈 이동 및 폰트 적용
Jun 22, 2026
5bdf399
fix: 문서 표 스타일을 웹과 유사하게 조정
Jun 22, 2026
909bb86
fix: 그룹 상세 편집기록 버튼 위치를 문서 카드 내부로 조정
Jun 22, 2026
a6351c8
fix: 최근 편집/확인 리스트 항목을 문서 박스 스타일로, HTML 표 렌더링 지원
Jun 22, 2026
c9b49b1
feat: 문서 상세 화면에 접을 수 있는 목차 추가
Jun 22, 2026
bf77aed
fix: 앱 아이콘을 icon.png 디자인으로 교체
Jun 22, 2026
c86cffd
fix: 앱 표시 이름을 크루위키로 변경
Jun 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
*.iml
.kotlin
.gradle
**/build/
xcuserdata
!src/**/build/
local.properties
.idea
.DS_Store
captures
.externalNativeBuild
.cxx
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcodeproj/project.xcworkspace/
!*.xcworkspace/contents.xcworkspacedata
**/xcshareddata/WorkspaceSettings.xcsettings
node_modules/
35 changes: 33 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,33 @@
# android
크루위키 안드로이드 앱입니다!
This is a Kotlin Multiplatform project targeting Android, iOS.

Asset migration notes for `crew-wiki-next` are in [./docs/asset-migration.md](./docs/asset-migration.md).

* [/iosApp](./iosApp/iosApp) contains an iOS application. Even if you’re sharing your UI with Compose Multiplatform,
you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.

* [/shared](./shared/src) is for code that will be shared across your Compose Multiplatform applications.
It contains several subfolders:
- [commonMain](./shared/src/commonMain/kotlin) is for code that’s common for all targets.
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name.
For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app,
the [iosMain](./shared/src/iosMain/kotlin) folder would be the right place for such calls.
Similarly, if you want to edit the Desktop (JVM) specific part, the [jvmMain](./shared/src/jvmMain/kotlin)
folder is the appropriate location.

### Running the apps

Use the run configurations provided by the run widget in your IDE's toolbar. You can also use these commands and options:

- Android app: `./gradlew :androidApp:assembleDebug`
- iOS app: open the [/iosApp](./iosApp) directory in Xcode and run it from there.

### Running tests

Use the run button in your IDE's editor gutter, or run tests using Gradle tasks:

- Android tests: `./gradlew :shared:testAndroidHostTest`
- iOS tests: `./gradlew :shared:iosSimulatorArm64Test`

---

Learn more about [Kotlin Multiplatform](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html)…
48 changes: 48 additions & 0 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.androidApplication)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
}

kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_11
}
}
dependencies {
implementation(projects.shared)

implementation(libs.androidx.activity.compose)

implementation(libs.compose.uiToolingPreview)
debugImplementation(libs.compose.uiTooling)
}

android {
namespace = "com.example.crew_wiki"
compileSdk = libs.versions.android.compileSdk.get().toInt()

defaultConfig {
applicationId = "com.example.crew_wiki"
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
versionCode = 1
versionName = "1.0"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
24 changes: 24 additions & 0 deletions androidApp/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@android:style/Theme.Material.Light.NoActionBar">
<activity
android:exported="true"
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
25 changes: 25 additions & 0 deletions androidApp/src/main/kotlin/com/example/crew_wiki/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.crew_wiki

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)

setContent {
App()
}
}
}

@Preview
@Composable
fun AppAndroidPreview() {
App()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/crew_wiki_app_icon"
android:insetLeft="18%"
android:insetTop="18%"
android:insetRight="18%"
android:insetBottom="18%" />
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions androidApp/src/main/res/drawable/ic_launcher_background.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#FF25B4B9"
android:pathData="M0,0h108v108h-108z" />
</vector>
5 changes: 5 additions & 0 deletions androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions androidApp/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<resources>
<string name="app_name">크루위키</string>
</resources>
10 changes: 10 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
plugins {
// this is necessary to avoid the plugins to be loaded multiple times
// in each subproject's classloader
alias(libs.plugins.androidApplication) apply false
alias(libs.plugins.androidMultiplatformLibrary) apply false
alias(libs.plugins.composeMultiplatform) apply false
alias(libs.plugins.composeCompiler) apply false
alias(libs.plugins.kotlinMultiplatform) apply false
alias(libs.plugins.kotlinSerialization) apply false
}
49 changes: 49 additions & 0 deletions docs/asset-migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Crew Wiki Asset Migration

`crew-wiki-next/client`의 폰트와 이미지 자산을 Compose Multiplatform 리소스로 옮긴 기록입니다.

## 현재 기준 경로

- 공용 UI 리소스: `shared/src/commonMain/composeResources`
- Android 앱 전용 리소스: `androidApp/src/main/res`

이번 단계에서는 공용 UI에서 바로 쓸 수 있도록 `composeResources` 기준으로 정리했습니다.

## 복사 대상

| 원본 | KMP 대상 | 상태 | 비고 |
| --- | --- | --- | --- |
| `public/fonts/BMHANNAProOTF.otf` | `shared/src/commonMain/composeResources/font/bm_hanna_pro.otf` | 사용 가능 | Compose Multiplatform 폰트로 생성 확인 |
| `Pretendard-1/public/variable/PretendardVariable.ttf` | `shared/src/commonMain/composeResources/font/pretendard_variable.ttf` | 사용 가능 | Variable font 원본 |
| `Pretendard-1/public/static/Pretendard-Regular.otf` | `shared/src/commonMain/composeResources/font/pretendard_regular.otf` | 사용 가능 | 기본 본문 폰트 |
| `Pretendard-1/public/static/Pretendard-Medium.otf` | `shared/src/commonMain/composeResources/font/pretendard_medium.otf` | 사용 가능 | Medium weight |
| `Pretendard-1/public/static/Pretendard-SemiBold.otf` | `shared/src/commonMain/composeResources/font/pretendard_semibold.otf` | 사용 가능 | SemiBold weight |
| `Pretendard-1/public/static/Pretendard-Bold.otf` | `shared/src/commonMain/composeResources/font/pretendard_bold.otf` | 사용 가능 | Bold weight |
| `src/app/apple-icon.png` | `shared/src/commonMain/composeResources/drawable/crew_wiki_apple_icon.png` | 사용 가능 | Drawable 리소스로 생성 확인 |
| `src/app/apple-icon.png` | `shared/src/commonMain/composeResources/files/crew_wiki/icons/icon.png` | 사용 가능 | `icon.svg` 대체용 원본 보관 |
| `src/app/favicon.ico` | `shared/src/commonMain/composeResources/files/crew_wiki/icons/favicon.ico` | 보관 | Compose drawable로 직접 사용하지 않음 |

## 검증 결과

- `composeResources/font` 아래의 `ttf`, `otf`는 Compose Multiplatform 폰트 리소스로 인식됩니다.
- 생성된 accessor에서 아래 리소스를 확인했습니다.
- `Res.font.bm_hanna_pro`
- `Res.font.pretendard_variable`
- `Res.font.pretendard_regular`
- `Res.font.pretendard_medium`
- `Res.font.pretendard_semibold`
- `Res.font.pretendard_bold`
- `Res.drawable.crew_wiki_apple_icon`

## 적용 상태

- `CrewWikiTheme`에서 기본 타이포그래피는 `Pretendard` 정적 weight 세트를 사용합니다.
- `BMHANNA`는 display typography에 연결했습니다.
- `pretendard_variable.ttf`는 리소스로 추가만 되어 있고, 현재 테마에서는 직접 사용하지 않습니다.
- 샘플 화면 이미지는 `crew_wiki_apple_icon.png`를 사용하도록 교체했습니다.

## 다음 작업 후보

1. 화면별 텍스트 스타일을 정리해서 `BMHANNA`와 `Pretendard` 사용 기준 고정
2. `icon.png`를 실제 앱 아이콘 세트 또는 필요한 화면 리소스로 연결
3. CDN 의존 아이콘을 수집해서 `composeResources/drawable`로 고정
12 changes: 12 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#Kotlin
kotlin.code.style=official
kotlin.daemon.jvmargs=-Xmx3072M

#Gradle
org.gradle.jvmargs=-Xmx4096M -Dfile.encoding=UTF-8
org.gradle.configuration-cache=true
org.gradle.caching=true

#Android
android.nonTransitiveRClass=true
android.useAndroidX=true
12 changes: 12 additions & 0 deletions gradle/gradle-daemon-jvm.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/b62178ff26b34365c61e54dea2180e32/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/f2dede3f3c566068b401dc14a9646d39/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/b62178ff26b34365c61e54dea2180e32/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/f2dede3f3c566068b401dc14a9646d39/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9aafe8bc391c4bbca3e440130e15608b/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/109553caae279a667336ea8850b50c92/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/b62178ff26b34365c61e54dea2180e32/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/f2dede3f3c566068b401dc14a9646d39/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/9eb5d45802b65696ed3ce0f14bb1e4ff/redirect
toolchainVendor=AMAZON
toolchainVersion=21
59 changes: 59 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
[versions]
agp = "9.0.1"
android-compileSdk = "36"
android-minSdk = "24"
android-targetSdk = "36"
androidx-activity = "1.13.0"
androidx-appcompat = "1.7.1"
androidx-core = "1.19.0"
androidx-espresso = "3.7.0"
androidx-lifecycle = "2.11.0-beta01"
androidx-navigation = "2.9.2"
androidx-testExt = "1.3.0"
coil3 = "3.2.0"
composeMultiplatform = "1.11.1"
junit = "4.13.2"
kotlin = "2.4.0"
ktor = "3.1.3"
kotlinx-coroutines = "1.9.0"
kotlinx-serialization = "1.9.0"
material3 = "1.11.0-alpha07"

[libraries]
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlin-testJunit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
junit = { module = "junit:junit", version.ref = "junit" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
androidx-testExt-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-testExt" }
androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-espresso" }
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
compose-uiTooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "composeMultiplatform" }
androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
androidx-lifecycle-runtimeCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidx-navigation" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
# Coil3 - KMP 이미지 로딩
coil3-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil3" }
coil3-network-ktor = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil3" }
compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatform" }
compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "composeMultiplatform" }
compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "material3" }
compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "composeMultiplatform" }
compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatform" }
compose-uiToolingPreview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "composeMultiplatform" }

[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
androidMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
8 changes: 8 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=a17ddd85a26b6a7f5ddb71ff8b05fc5104c0202c6e64782429790c933686c806
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading