-
Notifications
You must be signed in to change notification settings - Fork 0
release: 1.3.1 버전 업데이트 (to develop) #753
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Hotfix/749
fix: 배포 버전 카카오 로그인 안 되는 문제 해결
Walkthrough광범위한 ProGuard/consumer-rules 정비와 모듈별 release 빌드타입 추가, 버전 코드/이름 업데이트, Kakao 로그인 흐름의 오류 처리 리워크, 일부 UI에 edge-to-edge/insets 적용 및 사소한 UI 효과 핸들링 변경이 포함됩니다. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant App as App (KakaoAuthClient)
participant Kakao as Kakao SDK
User->>App: Sign in
App->>Kakao: loginWithKakaotalk()
alt KakaoTalk 성공
Kakao-->>App: token
App-->>User: AuthToken 반환
else KakaoTalk 에러/취소/토큰 없음
Kakao-->>App: error 또는 null
App->>Kakao: loginWithKakaoAccount()
alt KakaoAccount 에러
Kakao-->>App: error
App-->>User: resumeWithException(error)
else KakaoAccount 성공
Kakao-->>App: token
App-->>User: AuthToken 반환
else KakaoAccount token/error 모두 null
Kakao-->>App: null,null
App-->>User: IllegalStateException
end
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt (1)
26-33: 로그인 API는 메인 스레드 요구 — 호출 스레드 보장 필요
UserApiClient.loginWith*는 UI 트리거 특성상 메인 스레드 호출이 안전합니다. 현재 호출 스레드가 보장되지 않으므로 Main으로 전환하세요.- override suspend fun signIn(): AuthToken = - suspendCancellableCoroutine { loginContinuation -> + override suspend fun signIn(): AuthToken = + kotlinx.coroutines.withContext(kotlinx.coroutines.Dispatchers.Main.immediate) { + suspendCancellableCoroutine { loginContinuation -> if (isKakaoTalkLoginAvailable) { loginWithKakaotalk(loginContinuation) } else { loginWithKakaoAccount(loginContinuation) } - } + } + }또한
loginContinuation.invokeOnCancellation { /* 이후 콜백 무시 */ }를 등록하고 아래 resume 지점에if (!loginContinuation.isActive) return@...가드를 추가하면 취소 후 이중 resume을 방지할 수 있습니다.
🧹 Nitpick comments (3)
core/auth-kakao/build.gradle.kts (1)
10-16: consumerProguardFiles의 선언 위치 통일 제안라이브러리 모듈은 보통
defaultConfig { consumerProguardFiles(...) }에 두어 모든 빌드타입에 일관 적용합니다. 현재도 동작은 하지만 팀 전반 규칙 일관성을 위해 위치 이동을 권장합니다.android { setNamespace("core.auth_kakao") - - buildTypes { - release { - isMinifyEnabled = false - - consumerProguardFiles("consumer-rules.pro") - } - } + defaultConfig { + consumerProguardFiles("consumer-rules.pro") + } + buildTypes { + release { + isMinifyEnabled = false + } + } }app/proguard-rules.pro (2)
55-59: Gson 리플렉션 호환성: 속성 보존 추가 권장제네릭/애노테이션 메타데이터가 필요한 경우가 많습니다. 속성 보존을 추가해 안전장치로 두세요.
# JSON 직렬화 관련 -keep class com.google.gson.** { *; } -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer + -keepattributes Signature, *Annotation*
61-64: 전역 Activity keep는 과도
android:onClickXML을 사용하지 않는(Compose 중심) 앱이라면 전역 Activity keep/멤버 keep는 불필요합니다. 제거해 축소율을 높이세요.-# Intent 관련 유지 --keep class * extends android.app.Activity --keepclassmembers class * extends android.app.Activity { - public void *(android.view.View); -}minifyEnabled=true로 release 빌드/런타임 검증을 부탁드립니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (12)
app/proguard-rules.pro(1 hunks)app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailActivity.kt(2 hunks)app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailScreen.kt(2 hunks)core/auth-kakao/build.gradle.kts(1 hunks)core/auth-kakao/consumer-rules.pro(1 hunks)core/auth-kakao/proguard-rules.pro(0 hunks)core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt(1 hunks)feature/signin/build.gradle.kts(1 hunks)feature/signin/consumer-rules.pro(1 hunks)feature/signin/proguard-rules.pro(0 hunks)feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt(1 hunks)gradle/libs.versions.toml(1 hunks)
💤 Files with no reviewable changes (2)
- core/auth-kakao/proguard-rules.pro
- feature/signin/proguard-rules.pro
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (3)
gradle/libs.versions.toml (1)
3-4: PR 제목(1.3.0)과 versionName(1.3.1) 불일치릴리즈 노트/스토어 제출물과 혼선이 생길 수 있습니다. PR 제목을 1.3.1로 수정하거나 versionName을 1.3.0으로 정렬해 주세요.
app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailScreen.kt (1)
32-34: 중복 패딩 없음 확인 NotificationAppBar에 statusBarsPadding이나 windowInsetsPadding 호출이 없어 이중 패딩이 발생하지 않습니다.core/auth-kakao/consumer-rules.pro (1)
33-37: core/auth-kakao/consumer-rules.pro (Lines 33–37)에서 Retrofit/OkHttp 전역 keep/dontwarn 제거
consumer-rules.pro에 선언된 전역 ProGuard 룰을 제거해주세요. 네트워크 라이브러리는 기본적으로 keep 불필요하며, 경고 억제도 앱 레벨에서 사례별로 처리하는 편이 안전합니다. 변경 후 릴리즈(minifyEnabled=true) 빌드가 정상 동작하는지 확인 바랍니다.
| # 카카오 SDK 관련 난독화 방지 | ||
| -keep class com.kakao.** { *; } | ||
| -keep interface com.kakao.** { *; } | ||
| -dontwarn com.kakao.** | ||
|
|
||
| # 카카오 로그인 SDK | ||
| -keep class com.kakao.sdk.** { *; } | ||
| -keep interface com.kakao.sdk.** { *; } | ||
| -dontwarn com.kakao.sdk.** | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
카카오 영역 keep 범위 축소
com.kakao.**까지 전역 keep/dontwarn는 과도합니다. SDK 영역(com.kakao.sdk.**)만 유지하고 나머지는 제거해 크기/최적화 이점을 보존하세요.
-# 카카오 SDK 관련 난독화 방지
--keep class com.kakao.** { *; }
--keep interface com.kakao.** { *; }
--dontwarn com.kakao.**
-
-# 카카오 로그인 SDK
-keep class com.kakao.sdk.** { *; }
-keep interface com.kakao.sdk.** { *; }
-dontwarn com.kakao.sdk.**Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In app/proguard-rules.pro around lines 28 to 37, the current rules keep and
suppress warnings for the entire com.kakao package (lines keeping com.kakao.**
and dontwarn com.kakao.**), which is too broad; remove the three global
com.kakao rules and retain only the SDK-scoped rules for com.kakao.sdk.** (keep
class, keep interface, dontwarn) so that only the Kakao SDK is exempted from
obfuscation/warnings and the rest of the package can be optimized.
| # Retrofit/OkHttp | ||
| -keep class retrofit2.** { *; } | ||
| -keep class okhttp3.** { *; } | ||
| -dontwarn retrofit2.** | ||
| -dontwarn okhttp3.** | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Retrofit/OkHttp 전역 keep 제거
R8가 네트워크 스택을 문제없이 축소합니다. 전역 keep는 바이너리 비대화만 초래합니다. 경고 억제가 필요하면 구체 원인에 한정해 주세요.
-# Retrofit/OkHttp
--keep class retrofit2.** { *; }
--keep class okhttp3.** { *; }
-dontwarn retrofit2.**
-dontwarn okhttp3.**📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Retrofit/OkHttp | |
| -keep class retrofit2.** { *; } | |
| -keep class okhttp3.** { *; } | |
| -dontwarn retrofit2.** | |
| -dontwarn okhttp3.** | |
| -dontwarn retrofit2.** | |
| -dontwarn okhttp3.** |
🤖 Prompt for AI Agents
In app/proguard-rules.pro around lines 48–53, remove the global keep/dontwarn
rules for retrofit2 and okhttp3 because they prevent R8 from shrinking the
network stack; delete those four lines and instead add only targeted
keep/dontwarn entries if you encounter specific missing-reflection or warning
cases (identify the exact class/package causing the warning and restrict rules
to that scope).
| enableEdgeToEdge() | ||
| this.setupWhiteStatusBar() | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
enableEdgeToEdge와 기존 흰색 상태바 설정 충돌 가능 — SystemBarStyle로 일원화 권장
edge-to-edge 활성화 후 불투명 흰색 상태바를 강제하면 콘텐츠 겹침/아이콘 대비가 어긋날 수 있습니다. setupWhiteStatusBar()를 제거하고 SystemBarStyle.auto(TRANSPARENT, TRANSPARENT)로 일괄 제어하세요.
- enableEdgeToEdge()
- this.setupWhiteStatusBar()
+ enableEdgeToEdge(
+ statusBarStyle = androidx.activity.SystemBarStyle.auto(
+ android.graphics.Color.TRANSPARENT,
+ android.graphics.Color.TRANSPARENT
+ ),
+ navigationBarStyle = androidx.activity.SystemBarStyle.auto(
+ android.graphics.Color.TRANSPARENT,
+ android.graphics.Color.TRANSPARENT
+ ),
+ )추가로, 상단/하단 시스템바 영역을 피하도록 Compose 루트에 windowInsetsPadding(WindowInsets.systemBars)가 적용되어 있는지 화면 단에서 한 번 더 확인 부탁드립니다.
enableEdgeToEdge 함수와 setupWhiteStatusBar 함수의 정의 및 호출 방식을 확인하기 위해 아래 스크립트를 실행합니다.
🏁 Script executed:
#!/bin/bash
# enableEdgeToEdge 함수 정의 확인
rg -nP 'fun enableEdgeToEdge' -C3
# enableEdgeToEdge 호출 위치 확인
rg -n 'enableEdgeToEdge\(' -C2
# setupWhiteStatusBar 함수 정의 확인
rg -nP 'fun setupWhiteStatusBar' -C3
# NotificationDetailActivity imports 및 상단 코드 확인
sed -n '1,50p' app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailActivity.ktLength of output: 4613
설정된 setupWhiteStatusBar 구현과 enableEdgeToEdge 확장 함수가 제안한 파라미터를 지원하는지 추가 확인합니다.
🏁 Script executed:
#!/bin/bash
# setupWhiteStatusBar 함수 정의 및 구현 확인
rg -n "setupWhiteStatusBar" -C5 -g '*.kt'Length of output: 8749
🌐 Web query:
androidx.activity enableEdgeToEdge statusBarStyle navigationBarStyle extension function signature
💡 Result:
Kotlin extension signature (from androidx.activity EdgeToEdge.kt):
fun ComponentActivity.enableEdgeToEdge(
statusBarStyle: SystemBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
navigationBarStyle: SystemBarStyle = SystemBarStyle.auto(DefaultLightScrim, DefaultDarkScrim),
)
Source: AndroidX source and docs. [1][2]
References
- EdgeToEdge.enable (Android docs). [1]
- EdgeToEdge.kt source (android.googlesource.com) showing the Kotlin extension and default params. [2]
setupWhiteStatusBar 제거하고 enableEdgeToEdge 호출로 상태/내비게이션 바 스타일 일원화
- NotificationDetailActivity.kt onCreate에서
- enableEdgeToEdge() - this.setupWhiteStatusBar() + enableEdgeToEdge( + statusBarStyle = androidx.activity.SystemBarStyle.auto( + android.graphics.Color.TRANSPARENT, + android.graphics.Color.TRANSPARENT + ), + navigationBarStyle = androidx.activity.SystemBarStyle.auto( + android.graphics.Color.TRANSPARENT, + android.graphics.Color.TRANSPARENT + ) + )
- Compose 루트에
windowInsetsPadding(WindowInsets.systemBars)적용 여부를 반드시 확인하세요.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| enableEdgeToEdge() | |
| this.setupWhiteStatusBar() | |
| // Remove the old calls and replace with a unified edge-to-edge setup: | |
| - enableEdgeToEdge() | |
| enableEdgeToEdge( | |
| statusBarStyle = androidx.activity.SystemBarStyle.auto( | |
| android.graphics.Color.TRANSPARENT, | |
| android.graphics.Color.TRANSPARENT | |
| ), | |
| navigationBarStyle = androidx.activity.SystemBarStyle.auto( | |
| android.graphics.Color.TRANSPARENT, | |
| android.graphics.Color.TRANSPARENT | |
| ) | |
| ) |
🤖 Prompt for AI Agents
In
app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailActivity.kt
around lines 21-23, remove the explicit this.setupWhiteStatusBar() call and rely
solely on enableEdgeToEdge() to unify status/navigation bar styling; then ensure
the Compose root content applies WindowInsets.systemBars by adding
windowInsetsPadding(WindowInsets.systemBars) (or equivalent InsetsPaddingValues)
to the top-level composable so content respects system bars and looks correct
with edge-to-edge mode.
| -keep class com.kakao.sdk.** { *; } | ||
| -keep interface com.kakao.sdk.** { *; } | ||
| -dontwarn com.kakao.sdk.** | ||
|
|
||
| # 카카오 로그인 관련 클래스 보호 | ||
| -keep class com.kakao.sdk.auth.** { *; } | ||
| -keep class com.kakao.sdk.user.** { *; } | ||
| -keep class com.kakao.sdk.common.** { *; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
중복 keep 규칙 정리
com.kakao.sdk.** 전체 keep 후 하위 패키지(auth/user/common)를 다시 keep하는 것은 중복입니다. 최소 규칙만 유지해 난독화/축소 효율을 확보하세요.
- -keep class com.kakao.sdk.** { *; }
- -keep interface com.kakao.sdk.** { *; }
- -dontwarn com.kakao.sdk.**
-
- # 카카오 로그인 관련 클래스 보호
- -keep class com.kakao.sdk.auth.** { *; }
- -keep class com.kakao.sdk.user.** { *; }
- -keep class com.kakao.sdk.common.** { *; }
+ -keep class com.kakao.sdk.** { *; }
+ -keep interface com.kakao.sdk.** { *; }
+ -dontwarn com.kakao.sdk.**📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| -keep class com.kakao.sdk.** { *; } | |
| -keep interface com.kakao.sdk.** { *; } | |
| -dontwarn com.kakao.sdk.** | |
| # 카카오 로그인 관련 클래스 보호 | |
| -keep class com.kakao.sdk.auth.** { *; } | |
| -keep class com.kakao.sdk.user.** { *; } | |
| -keep class com.kakao.sdk.common.** { *; } | |
| -keep class com.kakao.sdk.** { *; } | |
| -keep interface com.kakao.sdk.** { *; } | |
| -dontwarn com.kakao.sdk.** |
🤖 Prompt for AI Agents
In core/auth-kakao/consumer-rules.pro around lines 24 to 31, there are redundant
keep rules: keeping com.kakao.sdk.** already protects all subpackages so the
additional keep lines for auth, user, and common are duplicated; remove the
specific subpackage keep entries and the duplicate interface keep so only a
minimal, non-redundant set of rules remains (e.g., keep com.kakao.sdk.** { *; }
and dontwarn com.kakao.sdk.**), leaving comments as needed to document why the
broad rule exists.
| when { | ||
| error != null -> { | ||
| when { | ||
| error is ClientError && error.reason == ClientErrorCause.Cancelled -> { | ||
| loginWithKakaoAccount(loginContinuation) | ||
| } | ||
|
|
||
| else -> loginWithKakaoAccount(loginContinuation) | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
사용자 취소(Cancelled) 시 자동 계정 로그인으로 강제 폴백 — UX 역행 가능
톡 로그인 화면에서 사용자가 취소한 경우 계정 로그인으로 자동 전환되면 예기치 않은 화면 전환이 발생합니다. 취소는 상위로 전달(취소/실패 처리)하고, 비-취소 오류만 계정 로그인으로 폴백하는 구분을 권장합니다.
- when {
- error != null -> {
- when {
- error is ClientError && error.reason == ClientErrorCause.Cancelled -> {
- loginWithKakaoAccount(loginContinuation)
- }
-
- else -> loginWithKakaoAccount(loginContinuation)
- }
- }
+ when {
+ error != null -> {
+ if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
+ // 사용자 취소는 상위로 전달
+ if (loginContinuation.isActive) {
+ loginContinuation.resumeWithException(error)
+ }
+ } else {
+ // 비-취소 오류만 계정 로그인으로 폴백
+ loginWithKakaoAccount(loginContinuation)
+ }
+ }loginContinuation의 정의와 resumeWithException 호출 가능 여부를 확인하기 위해 아래 스크립트를 실행합니다:
🏁 Script executed:
#!/bin/bash
# KakaoAuthClient.kt에서 loginContinuation의 선언 위치 및 타입 확인
rg -n "loginContinuation" -C3 core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt
# Continuation 인터페이스에서 resumeWithException 메서드 존재 여부 확인
rg -n "resumeWithException" -C3 --type=ktLength of output: 2098
취소 시 상위로 전달하고, 비-취소 오류에만 폴백 적용
톡 로그인 중 사용자가 취소(ClientErrorCause.Cancelled)한 경우 loginContinuation.resumeWithException(error)를 호출해 취소를 상위로 전달하고, 그 외 오류에 대해서만 loginWithKakaoAccount(loginContinuation)로 폴백하세요.
🤖 Prompt for AI Agents
In
core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt
around lines 37 to 46, the current error handling always falls back to
loginWithKakaoAccount even when the user explicitly cancelled; change the logic
so that when error is a ClientError with reason ClientErrorCause.Cancelled you
call loginContinuation.resumeWithException(error) to propagate the cancellation
upward, and only for non-cancel errors call
loginWithKakaoAccount(loginContinuation) as the fallback.
| token != null -> loginContinuation.resume(token.accessToken.toAuthToken()) | ||
|
|
||
| else -> loginWithKakaoAccount(loginContinuation) | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
이중 resume 가드 추가
콜백 도중 코루틴이 취소될 수 있으니 isActive 확인 후 resume 하세요.
- token != null -> loginContinuation.resume(token.accessToken.toAuthToken())
+ token != null -> if (loginContinuation.isActive) {
+ loginContinuation.resume(token.accessToken.toAuthToken())
+ }
@@
- error != null -> loginContinuation.resumeWithException(error)
+ error != null -> if (loginContinuation.isActive) {
+ loginContinuation.resumeWithException(error)
+ }
@@
- else -> {
- loginContinuation.resumeWithException(
- IllegalStateException("Both token and error are null"),
- )
- }
+ else -> if (loginContinuation.isActive) {
+ loginContinuation.resumeWithException(
+ IllegalStateException("Both token and error are null"),
+ )
+ }Also applies to: 56-67
🤖 Prompt for AI Agents
core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt
lines 48-51 (and similarly for 56-67): the coroutine continuation may be
cancelled while the callback runs, so guard all continuation.resume(...) calls
by checking that the coroutine Job is still active before resuming. Implement a
check like continuation.context[Job]?.isActive == true (or use the
coroutineScope's isActive) and only call resume when true; if not active, skip
the resume to avoid double-resume/cancellation races.
| buildTypes { | ||
| release { | ||
| isMinifyEnabled = false | ||
|
|
||
| consumerProguardFiles("consumer-rules.pro") | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
consumerProguardFiles 선언 위치 부적절 — buildType별 선언 대신 defaultConfig로 노출하세요
consumer rules는 AAR에 포함되어 소비자(App)에 전달되어야 하므로 variant(빌드타입)별이 아닌 기본 설정에 선언하는 것이 안전합니다.
적용 diff(해당 범위 내 수정):
release {
isMinifyEnabled = false
-
- consumerProguardFiles("consumer-rules.pro")
}추가로 android 블록에 다음을 배치:
android {
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
}🤖 Prompt for AI Agents
In feature/signin/build.gradle.kts around lines 10 to 16, consumerProguardFiles
is incorrectly declared inside the release buildType; move the
consumerProguardFiles("consumer-rules.pro") declaration into the
android.defaultConfig block instead and remove it from the buildTypes block so
the consumer proguard rules are included in the AAR for all variants.
| -keep class com.kakao.sdk.** { *; } | ||
| -keep interface com.kakao.sdk.** { *; } | ||
| -dontwarn com.kakao.sdk.** | ||
|
|
||
| # 카카오 로그인 관련 클래스 보호 | ||
| -keep class com.kakao.sdk.auth.** { *; } | ||
| -keep class com.kakao.sdk.user.** { *; } | ||
| -keep class com.kakao.sdk.common.** { *; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Kakao SDK keep 규칙이 과도/중복입니다 — 축소/난독화 이점 저하
-keep class com.kakao.sdk.**로 이미 하위 패키지를 모두 포함합니다. 인터페이스/세부 패키지의 중복 keep은 제거하세요.
권장 diff:
- -keep class com.kakao.sdk.** { *; }
- -keep interface com.kakao.sdk.** { *; }
- -dontwarn com.kakao.sdk.**
-
- # 카카오 로그인 관련 클래스 보호
- -keep class com.kakao.sdk.auth.** { *; }
- -keep class com.kakao.sdk.user.** { *; }
- -keep class com.kakao.sdk.common.** { *; }
+ -keep class com.kakao.sdk.** { *; }
+ -dontwarn com.kakao.sdk.**가능하면 코어 모듈(core/auth-kakao)의 consumer-rules에만 집중적으로 배치하고, feature 모듈에서는 중복을 피하는 것이 좋습니다.
🤖 Prompt for AI Agents
In feature/signin/consumer-rules.pro around lines 24 to 31, the ProGuard/R8
rules are redundant because -keep class com.kakao.sdk.** already preserves all
subpackages; remove the duplicate -keep interface com.kakao.sdk.**, the repeated
-keep class entries for auth/user/common, and the unnecessary dontwarn unless
you have a specific unresolved warning to suppress; instead keep only the
minimal package/entries actually required by this feature (or remove the file
entirely) and relocate any broad keep rules to the core/auth-kakao module's
consumer-rules so feature modules do not duplicate them.
| # 네트워크 관련 (카카오 SDK 의존성) | ||
| -keep class retrofit2.** { *; } | ||
| -keep class okhttp3.** { *; } | ||
| -dontwarn retrofit2.** | ||
| -dontwarn okhttp3.** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Retrofit/OkHttp 전체 keep/dontwarn은 불필요하며 바이너리 팽창을 유발합니다
대부분의 네트워크 라이브러리는 자체 consumer-rules를 제공합니다. 전역 keep/dontwarn은 제거하세요.
권장 diff:
-# 네트워크 관련 (카카오 SDK 의존성)
--keep class retrofit2.** { *; }
--keep class okhttp3.** { *; }
--dontwarn retrofit2.**
--dontwarn okhttp3.**📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # 네트워크 관련 (카카오 SDK 의존성) | |
| -keep class retrofit2.** { *; } | |
| -keep class okhttp3.** { *; } | |
| -dontwarn retrofit2.** | |
| -dontwarn okhttp3.** |
🤖 Prompt for AI Agents
In feature/signin/consumer-rules.pro around lines 33 to 37, remove the broad
keep/dontwarn rules for retrofit2 and okhttp3 (the four lines shown) because
they cause binary bloat; instead delete these global entries and rely on the
individual network libraries' provided consumer-rules or add minimal, targeted
ProGuard/R8 rules only for the specific classes/methods your app uses (or the
official Kakao SDK consumer rules) to preserve required classes and suppress
only necessary warnings.
| ShowToast -> { | ||
| // TODO: 실패 시 커스텀 스낵 바 구현 | ||
| } | ||
| ShowToast -> {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
ShowToast 이펙트가 no-op입니다 — 사용자 피드백이 사라졌습니다.
효과를 드롭하면 실패/안내 토스트가 더 이상 표시되지 않습니다. 최소한의 토스트를 복구하세요.
적용 diff:
- ShowToast -> {}
+ ShowToast -> Toast.makeText(
+ context,
+ "문제가 발생했습니다. 잠시 후 다시 시도해 주세요.",
+ Toast.LENGTH_SHORT
+ ).show()파일 상단 import 추가:
import android.widget.Toast만약 메시지를 동적으로 표시해야 한다면 UiEffect.ShowToast에 payload(message/StringRes)를 포함시키는 방향으로 후속 리워크를 권장합니다.
ShowToast 이펙트가 실제로 no-op인지 확인하기 위해 해당 파일에서 호출 위치를 검색합니다.
🏁 Script executed:
#!/bin/bash
rg -n "ShowToast" -n feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.ktLength of output: 189
전체 컨텍스트 확인을 위해 SignInScreen.kt 파일 상단부터 effect 처리 부분까지 출력합니다.
🏁 Script executed:
#!/bin/bash
sed -n '1,120p' feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.ktLength of output: 4292
ShowToast 이펙트 no-op — 토스트 호출 복구 필요
파일: feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt 라인 56
ShowToast 처리부가 빈 블록이라 사용자 피드백이 사라집니다. 최소한 아래와 같이 토스트를 복구하세요:
- ShowToast -> {}
+ ShowToast -> Toast.makeText(
+ context,
+ "문제가 발생했습니다. 잠시 후 다시 시도해 주세요.",
+ Toast.LENGTH_SHORT
+ ).show()파일 상단에 import android.widget.Toast 추가
추후 메시지를 동적으로 처리하려면 UiEffect.ShowToast에 메시지(payload) 필드를 포함시키는 리팩토링을 권장합니다.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ShowToast -> {} | |
| ++ b/feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt | |
| @@ -53,7 +53,12 @@ | |
| } | |
| when (effect) { | |
| ShowToast -> Toast.makeText( | |
| context, | |
| "문제가 발생했습니다. 잠시 후 다시 시도해 주세요.", | |
| Toast.LENGTH_SHORT | |
| ).show() | |
| NavigateBack -> onNavigateBack() | |
| NavigateToHome -> onNavigateToHome() |
🤖 Prompt for AI Agents
In feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt
around line 56, the ShowToast UiEffect is currently a no-op which suppresses
user feedback; restore toast behavior by importing android.widget.Toast at the
top of the file and, inside the ShowToast handling branch, obtain a Context
(e.g., val context = LocalContext.current or a passed-in context) and call
Toast.makeText(context, "<message>" or effect.message,
Toast.LENGTH_SHORT).show(); if UiEffect.ShowToast does not carry a message, add
a message payload to UiEffect.ShowToast for dynamic messages as a follow-up
refactor.
📌𝘐𝘴𝘴𝘶𝘦𝘴
📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯
📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵
💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴
Summary by CodeRabbit