App: 2.0.0 버전 배포#56
Merged
Merged
Conversation
- 기존 Dictionary 형태의 캐시 대신 NSCache와 Box 패턴을 사용하여 스레드 안정성 보장 및 메모리 효율성 확보
- Firebase 모듈 실행을 위해 Test target의 Host Application을 TK8로 추가 및 Host Application's API 호출 허용 - 기존의 방식은 TK8 앱이 컴파일 되는거 한번, Test 파일에 필요한 소스파일(ex.Memo.swift)가 컴파일 되는게 한번 해서 중복이 발생ㅇ - @testable import의 경우 전체를 통틀어 한 번만 컴파일(TK8)이 되고 이를 import 하여 사용하기 때문에 타겟이 늘어나도 한 번만 컴파일하여 시간 절약 - AppDelegate에서 Test일 때 FirebaseApp.configure() 를 건너뛰도록 설정
- 프로토콜과 구현체를 별도의 파일로 분리해두던 것을 합침 - 불필요한 if let 구문을 해제함
- MemoRepository 및 Model, Core Data Entity 추가
- Test Code를 먼저 작성하고, 실패한 케이스로부터 코드를 수정하고 결함을 발견함
- ViewModel의 각 메서드가 실행되면 fetch를 통해 저장소와 동기화를 해줘야 했음 - 따라서 내부 함수로 closure를 사용하는 performAndFetch() 메서드를 두어 fetch 로직을 빼먹지 않도록 함.
- 메모 목록을 볼 수 있는 뷰를 구현함 - 실제 메모를 생성하고, 셀을 컨트롤 하는 부분을 실제 생성 후에 진행할 것
- 메모를 작성하지 않을 시 저장하지 않아야되는데 이를 반영하지 않던 부분을 수정함 - 메모 저장시 core data의 updateAt에 값을 저장하지 않는 문제 수정
…ble 프로토콜로 분리 - ISP 적용하여 fetch와 select 역할을 프로토콜로 분리 - CharacterCell을 @ObservedObject 대신 AnyPublisher 기반으로 변경하여 ViewModel 의존성 제거 - CharacterListViewController에서 프로토콜 타입과 filteredCharactersPublisher 사용 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AnyCancellable을 관리하는 subscriptionSet 프로퍼티를 BaseViewController로 이동 - viewDidDisappear에서 subscriptionSet을 초기화하여 메모리 누수 방지 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 메모 작성 시 캐릭터 선택을 위한 전용 VC 구현 - CharacterSelectable 프로토콜을 통해 ViewModel 의존성 최소화 - Selectable delegate 프로토콜로 선택된 캐릭터를 상위 VC에 전달 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Memo.characterName을 var로 변경하여 수정 가능하도록 처리 - DefaultMemoRepository의 update에 characterName 반영 - fetchMemos에 updatedAt 기준 내림차순 정렬 추가 - MemoViewModel에 filteredMemos 추가 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CharacterSelectViewController를 통한 캐릭터 선택 및 Selectable delegate 연결 - 선택된 캐릭터 이름을 navigationItem title에 반영 - viewWillDisappear에서 isMovingFromParent 체크로 불필요한 저장 방지 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- MemoCollectionViewCell에 캐릭터 이미지 표시 (image 파라미터로 직접 전달) - viewWillAppear에서 snapshot 갱신하여 ComposeVC에서 돌아올 때 최신 메모 반영 - DIContainer의 makeMemoListViewController에 characterListViewModel 주입 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 기존에는 viewDidDisappear 상태에서 removeAll을 수행함 - 이 경우 memoCompseView를 통해 메모를 수정한 경우 바인딩이 풀려있기 때문에 반영이 안됨 - 호출 시점을 deinit으로 변경되어 메모리에서 해제될 때 수행하도록 수정
- 값의 삭제와 공유는 Menu 말고 VC에서 알 수 있도록 클로저로 실행하도록 함
- collectionView의 indexPathsForSelectedItems 프로퍼티를 사용하여 삭제할 메모 추출 - ViewModel에 이를 전달하여 일괄 삭제 처리
- cell을 재사용할 때 image 딕셔너리를 초기화합니다. - 초기 1회를 제외하고 anyPublisher가 방출되지 않기 때문에 빈 딕셔너리에서 이미지를 가져오려고 하는 문제 발견 - cell 생성시 이미지 딕셔너리를 넘겨주는 것으로 해결
- filteredMemo index를 indexPath로 하여 일괄 삭제기능 구현 - collectionView의 contextMenuConfigurationForItemsAt을 사용하여 preview와 uimenu 가 동작하도록 함 - preview와 uimenu는 composevc와 menuFactory를 통해 재사용함
- 처음 사용하는 사용자들에게 불편함을 초래할 것 같아서 UX/UI 개편 - 로컬라이징 추가
Memo 모델, CoreData Entity, Repository, ViewModel에 isPinned 속성 추가. Pin만 변경 시 updatedAt을 갱신하지 않도록 isPinOnlyChanged 로직 구현. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MemoMenuFactory에 togglePin 액션 추가 - MemoSectionHeaderView로 고정/일반 섹션 헤더 표시 - DiffableDataSource 섹션 분리 (pinned/general) - ComposeVC에서 내용 입력 시에만 ellipsis 버튼 표시 - Pin 토글 후 메뉴 재생성으로 타이틀 갱신 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
섹션이 여러 개일 때 indexPath.row 직접 접근 대신 dataSource?.itemIdentifier(for:)로 정확한 아이템 조회. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 업데이트시 알려주고 싶은 부분을 제공할 수 있도록 함. - 언어에 맞는 로컬라이징 추가
- TODO로 남겨놓음
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.
📌 관련 이슈
✨ 세부 내용
App version: 2.0.0
수정 사항: 앱 UI를 전반적으로 개선,
✍️ 고민한 내용
#48 참조
⌛ 소요 시간
2W