[Setting] #271 - v1.10.0 릴리즈 - #272
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2fgkNPXHekVGYpGbeEC4i
작품 상세 첫 진입 시 평가 상태바를 딤에서 뚫는 스포트라이트 오버레이 + 말풍선 힌트를 앱 전역 1회 띄운다(V1 parity 복원, 복제본 대신 실제 상태바를 밝히는 방식으로 개선). 저장은 BaseDomain OnboardingHint/OnboardingHintUseCase 범용 온보딩 플래그(UserDefaults). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2fgkNPXHekVGYpGbeEC4i
피드 작성/수정·감상평 저장 성공 시 앱스토어 평점 프롬프트를 재도입한다(V1 parity). V1의 매번 호출 대신 "이번 버전 누적 참여 ≥ 3 AND 버전당 1회" 앱측 게이트를 얹어 무분별 호출을 막고, 실제 프롬프트는 각 View가 @Environment(\.requestReview)로 띄운다. 게이트는 BaseDomain AppReviewRequestUseCase + BaseData(UserDefaults+Bundle 버전) repo를 피드·감상평이 공유하며, 참여 카운트는 앱 버전이 바뀌면 0부터 다시 센다. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2fgkNPXHekVGYpGbeEC4i
타유저 프로필에서 차단이 성공하면 그 화면은 dismiss되므로, 복귀한 화면에
"{nickname}님을 차단했어요" 토스트를 띄운다(V1 parity). UserPageView가
shouldDismiss 직전 onUserBlocked(nickname) seam으로 닉네임을 올리고(Factory·
UserPageAssembly 관통), 4탭 Root(Feed·Home·Library·Mypage)가 각자 NavigationStack에
.showWSSToast(.blockUser)로 표시한다. V1의 전역 NotificationCenter(피드 탭 하나만
관찰) 대신 차단한 그 탭에서 뜨게 했다. 4탭 배선은 interim — feedEdited·novelReviewed와
함께 통합 채널로 재설계할 때 정리한다.
Demo(UserPage)로 Mock 차단→복귀 토스트를 실측 확인했고, 그 Mock 선택 화면이 길어
하단이 잘리던 것을 ScrollView로 감쌌다.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N2fgkNPXHekVGYpGbeEC4i
[Fix] #221 - 출시 전 V1 parity 일괄 복원(작품상세·피드·서재 등) + 앱리뷰·온보딩 재도입
App 타깃을 V1(운영 앱)과 동일한 Bundle ID·Apple Developer 팀으로 서명하도록 설정하고, 실제 아카이브를 시도하며 드러난 App Store 제출 준비 공백까지 함께 메웠다(둘 다 App 타깃의 코드사이닝 설정을 다루는 같은 영역이라 하나로 묶음). - ProjectEnvironment.swift에 debug/release Bundle ID·Apple Developer 팀 ID 추가. - App/Project.swift: Debug/Release 서명 설정(CODE_SIGN_STYLE 등), Apple Generic Versioning(MARKETING_VERSION/CURRENT_PROJECT_VERSION/VERSIONING_SYSTEM), TARGETED_DEVICE_FAMILY(iPhone 전용, V1과 동일), 빠져있던 resources: 추가 (앱 아이콘이 빌드에 전혀 안 들어가고 있었음), Debug/Release 아이콘 분리. 코드사이닝 설정은 App 타깃 전용 configuration으로 분리해 다른 타깃(테스트 타깃 등)이 상속하지 않게 함. - Support/Info.plist: CFBundlePackageType·UISupportedInterfaceOrientations· 버전 정보 키 추가. - 앱 아이콘 자산(Release는 V1과 동일한 실제 아이콘, Debug는 구분용 별도 이미지). 결과: 실제 아카이브 → TestFlight 업로드까지 성공 확인. 자세한 재발 방지 포인트는 Projects/App/CLAUDE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UiHDsxZTFoqFbgJe2ncrTa
V1과 같은 Apple Developer 팀·인증서 저장소를 재사용해 서명·아카이브· TestFlight 업로드를 자동화한다(Gemfile의 fastlane gem, Matchfile/Appfile/ Fastfile). 서명은 match, 업로드 인증은 App Store Connect API 키. - Gemfile/Gemfile.lock: fastlane gem 추가(외부 의존성 없음 원칙의 의도적 예외 — 앱 런타임이 아니라 빌드 툴링, 루트 CLAUDE.md에 명시). - fastlane/Appfile, Matchfile: app identifier·팀 ID는 .env(gitignore)에서 읽어옴 — 리터럴 값은 커밋에 남기지 않음. - fastlane/Fastfile: sync_dev_certificates(개발용 인증서 동기화), debug_beta/release_beta(아카이브 + TestFlight 업로드), release(App Store 제출, 아직 호출 안 함) lane. 아카이브 시간 단축을 위해 COMPILER_INDEX_STORE_ENABLE=NO 추가. - .gitignore: fastlane 산출물(report.xml 등)·.env·*.p8·*.ipa 제외.
Debug/Release 스킴을 헷갈리지 않도록 스킬 자체를 분리했다. 둘 다 사전 점검(비밀값은 존재 여부만 확인, 절대 출력 안 함) → 승인 게이트 → 백그라운드 실행 → 결과 있는 그대로 보고 흐름이고, App Store 심사 제출(release lane)은 어느 쪽도 대신 호출하지 않는다.
다른 팀원도 setup 스킬만으로 실기기 빌드/아카이브 환경을 갖출 수 있도록 5단계(fastlane 서명 환경)를 추가했다 — Ruby/Bundler, .env 키 존재 확인, MATCH_PASSWORD는 macOS Keychain 등록을 권장(비대화형 세션에서 prompt를 못 띄우므로), 인증서 저장소 접근 확인, sync_dev_certificates 실행까지.
fastlane 도입·debug_beta 아카이브→TestFlight 업로드 실제 성공을 4번 항목에 반영. 남은 미검증 항목(sync_dev_certificates development 타입, release_beta/release lane, COMPILER_INDEX_STORE_ENABLE=NO 시간 단축 실측)도 함께 정리.
- docs/TODO.md: fastlane match 도입 이후에도 '아직 안 가져왔다'는 문구가 남아있던 자기모순 정정. 개인 로컬 절대경로도 위치-불특정 표현으로 교체. - README.md: 기술 스택 요약의 'Dependencies: 없음'이 이번 브랜치가 추가한 fastlane(Gemfile)과 desync였던 것을 반영.
정의된 적 없는 $(APP_DISPLAY_NAME) 빌드 변수를 CFBundleDisplayName이 참조하고 있어서 빈 문자열로 치환되고 있었고, CFBundleName 키는 아예 없었다. 둘 다 Tuist productName으로 자동 세팅되는 $(PRODUCT_NAME)을 참조하도록 수정 — 실제 debug_beta TestFlight 업로드에서 90784 에러로 실측.
match가 development 프로파일을 Dev Portal에 검증할 때 API 키 없이는 Apple ID 대화형 로그인을 요구해 비대화형 셸에서 실패했다(실측으로 확인) — app_store_connect_api_key를 앞에 추가해 해결. 같은 김에 force_for_new_devices도 추가해, Apple Developer 사이트에 새로 등록한 기기를 이 lane 재실행만으로 프로파일에 반영되게 했다. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Dtd1P1naqPmjumyuyYwRF
신규 팀원 최초 셋업·새 기기 추가 절차를 docs/FASTLANE_ONBOARDING.md로 분리하고 CLAUDE.md 공통 문서 표에 연결. docs/TODO.md의 관련 서술(ASC API 키 불필요 등, 실측으로 틀린 것으로 확인됨)도 정정. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Dtd1P1naqPmjumyuyYwRF
[Setting] #231 - Bundle ID 이관 준비: 운영 앱 환경설정 반영 + fastlane 도입
WSSAsyncImage의 placeholder가 캐시 미스로 실제 네트워크 요청이 도는 동안만 true인 isLoading을 받도록 바뀌었다. WSSNovelCoverImage는 이를 받아 placeholderStyle(.default/.grid)로 로딩 중 ProgressView 표시를 가른다. 시그니처 변경으로 raw WSSAsyncImage 직접 호출부(NotificationListView· MypageCharacterEditSheet·TodayDiscoveryCard)는 기존 시각 동작을 유지한 채 인자만 무시하도록 같이 갱신했다.
LazyVGrid로 여러 셀이 동시에 뜨는 곳(WSSNovelGridCell·WSSLibraryGridCell·CollectionPreviewRow· CreateCollectionView·CollectionDetailView 작품 그리드)에 WSSNovelCoverImage.placeholderStyle: .grid를 명시해, 셀마다 스피너가 따로 도는 대신 배경색+스피너로 로딩 상태를 보여준다.
WSSNovelCoverImage의 .default/.grid placeholderStyle과 raw WSSAsyncImage의 isLoading 인자를 picsum.photos 이미지로 실제 확인할 수 있는 WSSAsyncImageDemoView를 추가하고 Demo 앱 진입 화면으로 연결했다.
WSSNovelCoverImage와 같은 결로 WSSAsyncImage의 isLoading을 받아 로딩 중엔 ProgressView, 그 외 (URL nil·실패)엔 defaultImage(기본 imgEmptyCover)로 폴백한다. contentMode(기본 .fill)도 받아 크롭 없이 원본 비율을 보여줘야 하는 자리(캐릭터 대표 이미지 등)엔 .fit을 넘길 수 있다.
FeedDetailCommentInputBar는 2-클로저 AsyncImage 오버로드를 쓰고 있어 로딩 실패 시에도 ProgressView가 계속 도는 버그가 있었는데, WSSProfileImage(→ WSSAsyncImage 3상태 분기)로 옮기며 함께 고쳐졌다.
대표 캐릭터 이미지(250x250)는 원본을 잘라내면 안 되는 자리라 contentMode: .fit을 명시로 넘긴다.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012QcyBwFPQvJ1Mz5k5zAVMS
[Feat] #250 - Feature 화면별 Amplitude 이벤트 트래킹 배선
기획측 2차 QA 요청 반영. 관련 주석·문서 6곳도 함께 동기화하고, 작업 중 발견한 WSSEmptyView 미통합 상태를 LibraryFeature/CLAUDE.md와 docs/TODO.md에 기록. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFcd5bdXvcMC4vaNgPNZFW
Xcode 프로젝트 knownRegions에 ko가 등록돼 있지 않아, 시스템 편집 메뉴 (Paste/Copy/Select All 등)가 기기 언어와 무관하게 항상 영어로 표시되던 문제. ko.lproj/InfoPlist.strings(빈 파일)를 추가해 knownRegions에 ko를 등록(tuist generate로 반영 확인). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFcd5bdXvcMC4vaNgPNZFW
NormalSearchResultItemRow에 contentShape(Rectangle())이 없어 표지-텍스트 사이 간격, 텍스트 오른쪽 여백이 탭이 안 먹던 문제 수정. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFcd5bdXvcMC4vaNgPNZFW
wss-pr-reviewer 1라운드 지적 반영. LibraryFeature/CLAUDE.md 핵심 시나리오 절과 LibraryView·UserLibraryView의 주석이 여전히 옛 문구를 인용하던 것을 정정하고, docs/TODO.md의 17번 항목 위치를 오름차순 번호 순서에 맞게 16번 뒤로 이동. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFcd5bdXvcMC4vaNgPNZFW
wss-pr-reviewer 1라운드 지적 반영. 빈 파일이라 안 쓰는 파일로 오인해 삭제될 위험이 있어, knownRegions에 ko를 등록시키는 유일한 장치라는 비자명한 이유를 App CLAUDE.md 주의사항 절에 남김. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFcd5bdXvcMC4vaNgPNZFW
wss-pr-reviewer 2라운드 Nit 반영. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JFcd5bdXvcMC4vaNgPNZFW
[Fix] #266 - 2차 QA 기획 요구사항 - 검색 화면 텍스트/UI 수정
- .github/workflows/release.yml 신설: main push 트리거, CUTOVER_READY + app-store-release Environment 승인 게이트를 거쳐 fastlane release lane 실행 - fastlane/Fastfile: release lane에 CUTOVER_READY 가드 추가(로컬 실행도 방어), deliver force: true - fastlane/metadata/ko/release_notes.txt 신설: 심사 제출 릴리즈 노트 출처(git 버전관리) - .github/workflows/test.yml: PR 대상에 main 추가(develop→main 릴리스 PR도 테스트/아키텍처 검사) - docs/WORKFLOW.md, docs/TODO.md: 새 배포 파이프라인 반영 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xw3U9yFqRTVT96h2CQMHXQ
- .claude/scripts/make-release-pr.sh 신설: preflight(develop↔main 비교, 버전 참고값, 대량 커밋일 때 PR 병합 단위 압축 롤업) + pr-create(base=main PR 생성) - .claude/skills/make-release-PR/SKILL.md 신설: 버전·릴리즈노트 질문 → new-issue 재사용해 브랜치 생성 → Project.swift/release_notes.txt 반영 커밋 → base=main PR 생성까지 절차화 - 이슈·브랜치 생성은 재발명하지 않고 기존 new-issue 스킬을 그대로 재사용 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xw3U9yFqRTVT96h2CQMHXQ
…불일치 수정 - release.yml: fastlane/Appfile이 로드 시점에 APP_IDENTIFIER_DEBUG도 ENV.fetch로 요구해 release lane 실행 전 KeyError로 죽던 문제 수정(secret 전달 추가) - release.yml: CONFIG_BASE_URL/CONFIG_BUCKET_URL 시크릿을 평범한 https:// 형태로 등록해도 되도록 xcconfig // 주석 파싱 회피 이스케이프를 워크플로우가 자동 적용 - release.yml: permissions: contents: read 명시(최소권한, test.yml과 일관) - docs/TODO.md: main 브랜치 보호·Environment는 이미 완료된 상태로 정정(WORKFLOW.md와 불일치 해소), 시크릿 목록에 APP_IDENTIFIER_DEBUG 추가, deliver 메타데이터 확인 필요성 명시 - make-release-PR/SKILL.md: Project.swift 변경 후 Scripts/patch-spm-deployment-target.sh 실행 단계 추가(루트 CLAUDE.md 비협상 누락) wss-pr-reviewer 리뷰 반영 (Blocker 1, Warning 3) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xw3U9yFqRTVT96h2CQMHXQ
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LW4vhUfFMPH9PXLV6vdsUg
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LW4vhUfFMPH9PXLV6vdsUg
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LW4vhUfFMPH9PXLV6vdsUg
[Setting] #264 - main 브랜치 push 시 App Store 심사 자동 제출 CI 구축
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
[Fix] #269 - 작품 알림 삭제 관련 텍스트 수정
테스트 커버리지 리포트
Generated by CI on 2026-09-20 20:29 KST |
[Fix] #273 - 작품 알림 삭제 요약 문구의 "Re : " 접두어만 원복
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Guryss
force-pushed
the
Setting/#271
branch
from
September 20, 2026 10:16
804c81f to
27a9def
Compare
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
💡 Issue
💭 Summary
v1.10.0 릴리즈예요 — develop 작업을 main으로 승격해요. 사실상 앱스토어에 처음 심사 제출하는 릴리스예요.
🔑 Key Changes
develop에 쌓인 커밋이 많아 PR 병합 단위로 압축해서 정리했어요. 전체 변경은 아래 비교 링크로 확인해주세요.
main...develop
NONE→1.10.0, 릴리즈 노트 갱신📱 Simulation
해당 없음 (버전/릴리즈노트 텍스트 변경뿐, UI 변경 없음)
🧑🧒🧒 To Reviewer
버전 번호(
1.10.0)와 릴리즈 노트 문구가 맞는지 확인 부탁드려요.merge되면
CUTOVER_READY가true일 때만app-store-release승인 요청이 떠요 — 오발동 걱정 안 하셔도 돼요. 자세한 배포 흐름은 docs/WORKFLOW.md를 참고해주세요.※ Reference