[refactor] 인증 흐름을 안정화하고 React Native 팝업 요청을 도입한다#68
Conversation
|
Warning Review limit reached
Next review available in: 31 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthrough앱 초기화와 루트 TCA 내비게이션을 Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant PopPangApp
participant AppBootstrap
participant AppFeature
participant MainTabFeature
participant PopPangRNFeature
PopPangApp->>AppBootstrap: makeAppStore()
AppBootstrap->>AppFeature: 루트 Store 생성
AppFeature->>MainTabFeature: User 스냅샷으로 main 상태 구성
MainTabFeature->>PopPangRNFeature: 화면·userUuid 전달
PopPangRNFeature->>MainTabFeature: native event delegate 전달
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
Projects/Features/ProfileFeature/Sources/Presentation/ProfileFeatureView.swift (1)
159-159: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value주석 처리된
@Environment(\.dismiss)제거 권장사용하지 않는 환경 프로퍼티는 주석 처리보다 삭제하는 것이 코드 가독성에 좋습니다. 필요시 Git 히스토리에서 복구 가능합니다.
♻️ 제안
- // `@Environment`(\.dismiss) private var dismiss🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Projects/Features/ProfileFeature/Sources/Presentation/ProfileFeatureView.swift` at line 159, ProfileFeatureView에서 주석 처리된 `@Environment(\.dismiss) private var dismiss` 선언을 완전히 삭제하세요. 사용되지 않는 환경 프로퍼티만 제거하고 주변 코드와 동작은 변경하지 마세요.Projects/Features/AlertFeature/Sources/Presentation/AlertFeature.swift (1)
39-50: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win커스텀
==는 삭제하고 합성Equatable에 맡기세요
State의 저장 프로퍼티는 모두Equatable이고,@ObservableState는 관찰용 내부 구현을 추가해도Equatable합성을 깨지 않습니다. 지금 구현은 새 필드 추가 시 누락 위험만 키우니public struct State: Equatable만 남기는 편이 더 안전합니다. Apple Observation 문서와 TCA의@ObservableState문서도 같이 보면 좋습니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Projects/Features/AlertFeature/Sources/Presentation/AlertFeature.swift` around lines 39 - 50, Remove the custom == implementation for State and rely on synthesized Equatable conformance from public struct State: Equatable. Keep all stored properties and the `@ObservableState` behavior unchanged.Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift (1)
1-1: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win닉네임 기본값
"닉네임"폴백 로직이 3곳에 중복돼 있어요.
HomeFeature,ProfileFeature,ProfileSettingFeature세 State init에서user.nickname ?? "닉네임"을 각각 따로 구현하고 있습니다. 같은 문구를 세 군데서 관리하면 나중에 기본 닉네임 정책이 바뀔 때 하나를 빠뜨리기 쉽습니다.Domain모듈의User에displayNickname같은 계산 프로퍼티를 추가해서 한 곳으로 모으는 게 어떨까요.
Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift#L21-25:self.nickname = user.nickname ?? "닉네임"→self.nickname = user.displayNickname으로 교체.Projects/Features/ProfileFeature/Sources/Presentation/ProfileFeature.swift#L16-20:ProfileFeature.State.init의 동일 폴백 로직을 같은 확장 프로퍼티로 교체.Projects/Features/ProfileFeature/Sources/Presentation/ProfileFeature.swift#L114-117:ProfileSettingFeature.State.init의 동일 폴백 로직도 함께 교체.♻️ 제안 (Domain 모듈)
public extension User { var displayNickname: String { nickname ?? "닉네임" } }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift` at line 1, 중복된 닉네임 기본값 처리를 Domain 모듈의 User에 public displayNickname 계산 프로퍼티로 통합하고, HomeFeature.State.init, ProfileFeature.State.init, ProfileSettingFeature.State.init에서 각각 user.nickname ?? "닉네임" 대신 해당 프로퍼티를 사용하도록 변경하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift`:
- Around line 69-75: Update the HomeFeature reducer’s `.onAppear` handling and
`loadAllPopupData` effect to use a dedicated CancelID, matching the existing
MapFeature pattern, and apply `.cancellable(id:cancelInFlight: true)` so a new
initial load cancels any in-flight request before starting.
---
Nitpick comments:
In `@Projects/Features/AlertFeature/Sources/Presentation/AlertFeature.swift`:
- Around line 39-50: Remove the custom == implementation for State and rely on
synthesized Equatable conformance from public struct State: Equatable. Keep all
stored properties and the `@ObservableState` behavior unchanged.
In `@Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift`:
- Line 1: 중복된 닉네임 기본값 처리를 Domain 모듈의 User에 public displayNickname 계산 프로퍼티로 통합하고,
HomeFeature.State.init, ProfileFeature.State.init,
ProfileSettingFeature.State.init에서 각각 user.nickname ?? "닉네임" 대신 해당 프로퍼티를 사용하도록
변경하세요.
In
`@Projects/Features/ProfileFeature/Sources/Presentation/ProfileFeatureView.swift`:
- Line 159: ProfileFeatureView에서 주석 처리된 `@Environment(\.dismiss) private var
dismiss` 선언을 완전히 삭제하세요. 사용되지 않는 환경 프로퍼티만 제거하고 주변 코드와 동작은 변경하지 마세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 43927dbe-60f4-44c2-8162-5767b0ee9e3e
📒 Files selected for processing (29)
Docs/poppang-architecture.mdDocs/tca-navigation-guidelines.mdProjects/App/Sources/AppCore/0. AppSDKInitializer.swiftProjects/App/Sources/AppCore/1. AppDependencyRegistry.swiftProjects/App/Sources/AppCore/2. AppBootstrap.swiftProjects/App/Sources/AppCore/3. AppDeepLinkHandler.swiftProjects/App/Sources/AppCore/AppDeepLinkHandler.swiftProjects/App/Sources/AppCore/Navigation/7. AppRootFlowView.swiftProjects/App/Sources/AppCore/Navigation/8. AppFeature.swiftProjects/App/Sources/AppCore/Navigation/AppFeature.swiftProjects/App/Sources/PopPangApp.swiftProjects/Features/AlertFeature/Demo/Sources/AlertFeatureDemoApp.swiftProjects/Features/AlertFeature/Sources/Presentation/AlertFeature.swiftProjects/Features/CalendarFeature/Demo/Sources/CalendarFeatureDemoApp.swiftProjects/Features/CalendarFeature/Sources/Presentation/CalendarFeature.swiftProjects/Features/CalendarFeature/Sources/Presentation/CalendarFeatureView.swiftProjects/Features/FavoritesFeature/Demo/Sources/FavoritesFeatureDemoApp.swiftProjects/Features/FavoritesFeature/Sources/Presentation/FavoritesFeature.swiftProjects/Features/HomeFeature/Demo/Sources/HomeFeatureDemoApp.swiftProjects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swiftProjects/Features/HomeFeature/Sources/Presentation/Home/HomeFeatureView.swiftProjects/Features/HomeFeature/Tests/HomeFeatureTests.swiftProjects/Features/MainTabFeature/Sources/MainTabFeature.swiftProjects/Features/MainTabFeature/Tests/MainTabFeatureTests.swiftProjects/Features/MapFeature/Demo/Sources/MapFeatureDemoApp.swiftProjects/Features/MapFeature/Sources/Presentation/MapFeature.swiftProjects/Features/ProfileFeature/Demo/Sources/ProfileFeatureDemoApp.swiftProjects/Features/ProfileFeature/Sources/Presentation/ProfileFeature.swiftProjects/Features/ProfileFeature/Sources/Presentation/ProfileFeatureView.swift
💤 Files with no reviewable changes (2)
- Projects/App/Sources/AppCore/Navigation/AppFeature.swift
- Projects/App/Sources/AppCore/AppDeepLinkHandler.swift
| case .onAppear: | ||
| state.isLoading = true | ||
| state.errorMessage = nil | ||
| return loadAllPopupData(state: state) | ||
| return loadAllPopupData( | ||
| userUuid: state.userUuid, | ||
| filter: state.filter | ||
| ) |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Map the target file first
ast-grep outline Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift --view expanded
# Search for cancellation/task-related patterns in HomeFeature and nearby feature files
rg -n --hidden --glob 'Projects/Features/HomeFeature/**' --glob 'Projects/Features/**' \
'\.cancellable\(|CancelID|\.task\(id:|onAppear|loadAllPopupData|cancelInFlight|cancel' .
# Read the relevant slices of HomeFeature.swift with line numbers
sed -n '1,260p' Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift
# Inspect any related view or tab feature files that may apply cancellation at a higher layer
fd -a 'HomeFeatureView.swift|MainTabFeature.swift|HomeFeatureTests.swift' ProjectsRepository: team-PopPang/PopPang-iOS
Length of output: 18570
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Read the relevant HomeFeatureView slice around the onAppear/task usage
sed -n '200,260p' Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeatureView.swift
# Read MainTabFeature for tab-switch behavior and child feature lifetime
sed -n '1,240p' Projects/Features/MainTabFeature/Sources/MainTabFeature.swift
# Read HomeFeature tests for any cancellation-related expectation
sed -n '1,260p' Projects/Features/HomeFeature/Tests/HomeFeatureTests.swiftRepository: team-PopPang/PopPang-iOS
Length of output: 14953
loadAllPopupData에 취소 ID를 붙여 중복 로드를 막아주세요.
HomeFeatureView의 .task는 뷰 이탈 시 취소되지만, 한 번 .onAppear가 전달된 뒤에는 loadAllPopupData가 끝까지 살아 있어 탭 재진입/새로고침 시 요청이 겹칠 수 있습니다. MapFeature처럼 CancelID를 두고 .cancellable(id:cancelInFlight: true)로 감싸면 홈 초기 로드의 레이스를 줄일 수 있어요. SwiftUI의 .task와 TCA cancellation은 역할이 달라서, 이 케이스는 reducer 쪽에서 끊어주는 편이 안전합니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeature.swift`
around lines 69 - 75, Update the HomeFeature reducer’s `.onAppear` handling and
`loadAllPopupData` effect to use a dedicated CancelID, matching the existing
MapFeature pattern, and apply `.cancellable(id:cancelInFlight: true)` so a new
initial load cancels any in-flight request before starting.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@Projects/Features/AuthFeature/Sources/Presentation/RegisterFlowFeatureView.swift`:
- Around line 158-159: RegisterFlowFeatureView의 닉네임 입력 화면 진입 시 최초 자동 포커스를 복구하세요.
현재 focus에 $isFocused를 전달하더라도 초기값이 false이므로, 기존 화면 전환 애니메이션 이후 task 또는 onAppear
흐름에서 isFocused를 명시적으로 true로 설정하고 입력란 바인딩은 유지하세요.
In `@scripts/download-rn-release.sh`:
- Around line 24-36: Update the download flow in scripts/download-rn-release.sh
after both gh release download commands to verify each ZIP’s SHA-256 checksum
against the repository-committed expected values before any extraction or use;
fail immediately on a mismatch and ensure both the iOS bundle and SPM framework
assets are covered.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 0a6813e4-51e8-4441-8d53-262aeeaf0a05
⛔ Files ignored due to path filters (2)
Docs/images/module-dependency-graph-legacy.pngis excluded by!**/*.pngDocs/images/module-dependency-graph.pngis excluded by!**/*.png
📒 Files selected for processing (52)
.github/workflows/1. poppang-build.yml.github/workflows/2. poppang-test.yml.github/workflows/3. poppang-build-and-test.yml.gitignoreDocs/poppang-architecture.mdDocs/static-dynamic-linking.mdDocs/tca-navigation-guidelines.mdProjects/App/Project.swiftProjects/App/Sources/AppCore/1. AppDependencyRegistry.swiftProjects/App/Sources/AppCore/2. AppBootstrap.swiftProjects/App/Sources/AppCore/Navigation/7. AppRootFlowView.swiftProjects/App/Sources/AppCore/Navigation/8. AppFeature.swiftProjects/Features/AuthFeature/Sources/Presentation/RegisterFlowFeatureView.swiftProjects/Features/HomeFeature/Sources/Presentation/Home/HomeFeatureView.swiftProjects/Features/MainTabFeature/Project.swiftProjects/Features/MainTabFeature/Sources/MainTabFeature.swiftProjects/Features/MainTabFeature/Sources/MainTabFeatureDependencies.swiftProjects/Features/MainTabFeature/Sources/MainTabFeatureView.swiftProjects/Features/MainTabFeature/Tests/MainTabFeatureTests.swiftProjects/Features/PopPangRNFeature/Project.swiftProjects/Features/PopPangRNFeature/Sources/Presentation/PopPangRNFeature.swiftProjects/Features/PopPangRNFeature/Sources/Presentation/PopPangRNFeatureView.swiftProjects/Features/PopPangRNFeature/Sources/Support/ReactNativeScreen.swiftProjects/Features/PopupRequestFeature/Demo/Sources/PopupRequestFeatureDemoApp.swiftProjects/Features/PopupRequestFeature/Project.swiftProjects/Features/PopupRequestFeature/Sources/Dependency/PopupRequestClient.swiftProjects/Features/PopupRequestFeature/Sources/Presentation/PopupRequestFeature.swiftProjects/Features/PopupRequestFeature/Sources/Presentation/PopupRequestFeatureView.swiftProjects/Features/PopupRequestFeature/Sources/Support/PopupRequestSubmitState.swiftProjects/Features/PopupRequestFeature/Tests/PopupRequestFeatureTests.swiftProjects/Features/PopupRequestManagementFeature/Demo/Sources/PopupRequestManagementFeatureDemoApp.swiftProjects/Features/PopupRequestManagementFeature/Project.swiftProjects/Features/PopupRequestManagementFeature/Sources/Dependency/PopupRequestManagementClient.swiftProjects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementDetailFeature.swiftProjects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementDetailView.swiftProjects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementFlowFeature.swiftProjects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementFlowView.swiftProjects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementListFeature.swiftProjects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementListView.swiftProjects/Features/PopupRequestManagementFeature/Sources/Support/PopupRequestManagementFilter.swiftProjects/Features/PopupRequestManagementFeature/Sources/Support/PopupRequestManagementListItem.swiftProjects/Features/PopupRequestManagementFeature/Tests/PopupRequestManagementFeatureTests.swiftProjects/Features/PopupSubmissionFormFeature/Project.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Presentation/PopupSubmissionFormFeature.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Presentation/PopupSubmissionFormView.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionFormMapper.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionFormMode.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionFormValidator.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionImageItem.swiftProjects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionTimeParser.swiftProjects/Shared/DSKit/Sources/Component/TextField/RoundedTextField.swiftscripts/download-rn-release.sh
💤 Files with no reviewable changes (30)
- Projects/Features/PopupRequestManagementFeature/Tests/PopupRequestManagementFeatureTests.swift
- Projects/Features/PopupRequestFeature/Sources/Support/PopupRequestSubmitState.swift
- Projects/Features/PopupSubmissionFormFeature/Project.swift
- Projects/Features/PopupRequestManagementFeature/Demo/Sources/PopupRequestManagementFeatureDemoApp.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionImageItem.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Support/PopupRequestManagementListItem.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Presentation/PopupSubmissionFormView.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionTimeParser.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementDetailView.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Support/PopupRequestManagementFilter.swift
- Projects/Features/PopupRequestManagementFeature/Project.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementDetailFeature.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionFormMode.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementListView.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementListFeature.swift
- Projects/Features/PopupRequestFeature/Sources/Presentation/PopupRequestFeature.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementFlowFeature.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Presentation/PopupSubmissionFormFeature.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionFormValidator.swift
- Projects/Features/PopupRequestFeature/Project.swift
- Projects/Features/PopupRequestFeature/Tests/PopupRequestFeatureTests.swift
- Projects/Features/PopupRequestFeature/Demo/Sources/PopupRequestFeatureDemoApp.swift
- Projects/Features/PopupSubmissionFormFeature/Sources/Support/PopupSubmissionFormMapper.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Presentation/PopupRequestManagementFlowView.swift
- Projects/Features/PopupRequestManagementFeature/Sources/Dependency/PopupRequestManagementClient.swift
- Projects/App/Sources/AppCore/2. AppBootstrap.swift
- Projects/Features/PopupRequestFeature/Sources/Dependency/PopupRequestClient.swift
- Projects/Features/MainTabFeature/Sources/MainTabFeatureDependencies.swift
- Projects/App/Sources/AppCore/1. AppDependencyRegistry.swift
- Projects/Features/PopupRequestFeature/Sources/Presentation/PopupRequestFeatureView.swift
🚧 Files skipped from review as they are similar to previous changes (6)
- Projects/App/Sources/AppCore/Navigation/7. AppRootFlowView.swift
- Projects/Features/HomeFeature/Sources/Presentation/Home/HomeFeatureView.swift
- Projects/Features/MainTabFeature/Tests/MainTabFeatureTests.swift
- Docs/tca-navigation-guidelines.md
- Projects/Features/MainTabFeature/Sources/MainTabFeature.swift
- Projects/App/Sources/AppCore/Navigation/8. AppFeature.swift
| echo "iOS bundle 다운로드" | ||
| gh release download "$VERSION" \ | ||
| --repo "$REPO" \ | ||
| --pattern "$BUNDLE_ASSET_NAME" \ | ||
| --dir "$TMP_DIR" \ | ||
| --clobber | ||
|
|
||
| echo "SPM 패키지 다운로드" | ||
| gh release download "$VERSION" \ | ||
| --repo "$REPO" \ | ||
| --pattern "$FRAMEWORK_ASSET_NAME" \ | ||
| --dir "$TMP_DIR" \ | ||
| --clobber |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift
RN 실행 아티팩트의 무결성을 검증해 주세요.
태그와 HTTPS는 다운로드 위치만 보장하며 release asset의 콘텐츠를 고정하지 않습니다. 이 파일들은 앱에서 실행·링크되므로, 압축 해제 전에 이 저장소에 커밋된 SHA-256 값과 두 ZIP을 검증해야 합니다. asset이 교체되거나 공급망이 침해되면 임의 코드가 그대로 배포될 수 있습니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/download-rn-release.sh` around lines 24 - 36, Update the download
flow in scripts/download-rn-release.sh after both gh release download commands
to verify each ZIP’s SHA-256 checksum against the repository-committed expected
values before any extraction or use; fail immediately on a mismatch and ensure
both the iOS bundle and SPM framework assets are covered.
💡 PR 유형
✏️ 변경 사항
@Shared session을 직접 관찰하지 않고 MainTab이 전달한 사용자 snapshot을 사용하도록 변경했습니다.PopPangRNFeature를 통해 React Native 화면을 표시하도록 전환했습니다.main.jsbundle을 앱 리소스로 포함했습니다.🚨 관련 이슈
🎨 스크린샷
✅ 체크리스트
🔥 추가 설명
인증 전환 문제 원인과 해결
TabView가 선택되지 않은 탭의 body와 lifecycle을 재평가할 때, 각 탭이 직접 관찰하던 shared session이 로그아웃으로 비어 Home이 로그인 사용자를 전제한 값에 접근할 수 있었습니다.ifLet경고를 방지했습니다.React Native 연동
main.jsbundle만 로드합니다.request,request-management화면은 각각 full-screen presentation과 NavigationStack push를 유지하며, RN이 보낸 완료/뒤로 가기 이벤트를 TCA delegate action으로 변환해 화면을 닫습니다.검증한 내용
tuist generate를 수행했습니다.xcodebuild build -workspace PopPang.xcworkspace -scheme PopPangApp -configuration Debug -destination "generic/platform=iOS Simulator"빌드를 통과했습니다.git diff --check와HomeFeatureView.swiftSwift 구문 검사를 통과했습니다.추가 확인 필요
/private/tmp접근 권한 문제로 실행 검증이 불가능합니다. 기기 실행은 정상 동작을 확인했습니다.Summary by CodeRabbit