프로젝트 기간 : 2022.09.05 월 ~ 2022.09.22 목
팀원 : 재재, 언체인
리뷰어 : Ryan
자신만의 계획을 정해놓은 날짜에 맞춰 계획 실행 여부를 손쉽게 관리할 수 있는 프로젝트 관리 앱입니다 😎
재재(ZZBAE) | 언체인(unchain) |
---|---|
- 다양한 기술 중 목적에 맞는 기술스택
- 내가 선택한 기술을 통한 UI구현
- Word wrapping 방식의 이해
- 리스트에서 스와이프를 통한 삭제 구현
- Date Picker를 통한 날짜입력
├── ProjectManager
│ ├── ProjectManagerApp
│ └── Persistence
├── Model
│ └── project
├── View
│ ├── ProjectMainView
│ ├── ProjectEditView
│ └── ProjectAddView
├── subView
│ └── ProjectContentView
└── ViewModel
├── ProjectMainViewModel
└── ProjectModalViewModel
- WEEK 1
날짜 | 프로젝트 진행 내용 |
---|---|
9월 5일 | STEP1 요구명세서 공부 및 기술스택 선택 |
9월 6일 | STEP1 PR 및 프로젝트 기본 구성 선택 |
9월 7일 | STEP1 Merge 후 프로젝트 기본 세팅 |
9월 8일 | SwiftUI 문서 공부 및 SwiftLint 적용 |
9월 9일 | SwiftUI 문서 공부 및 기본 뷰 구성 시작 |
- WEEK 2
날짜 | 프로젝트 진행 내용 |
---|---|
9월 12일 | ProjectMainView, AddView, EditView 구현 |
9월 13일 | ProjectAddView와 EditView의 디테일 수정 및 mockData 적용 |
9월 14일 | ProjectAddView를 통한 데이터 전달 및 ViewModel 생성 |
9월 15일 | Project를 수정했을 때 수정된 데이터로 update하는 기능 구현 |
9월 16일 | Project를 길게 눌렀을 때 다른 status로 이동하는 기능 구현 |
- WEEK 3
날짜 | 프로젝트 진행 내용 |
---|---|
9월 19일 | Project를 swipe할 때 삭제하는 기능 구현 |
9월 20일 | 기능 구현 수정 및 로직의 MVVM 기준으로 분리 |
9월 21일 | 필요없는 코드 정리, View 구성 수정 및 전반적인 리팩토링 |
9월 22일 | 전체적인 뷰 및 코드 정리 후 STEP 2 PR |
9월 23일 | STEP2 리팩토링 및 리드미 작성 |
ProjectMainView |
---|
ProjectEditView | ProjectAddView |
---|---|
프로젝트의 생성과 이동 기능 | 프로젝트의 수정과 삭제 기능 |
---|---|
- 일부 기능만 다르고 다른 UI디자인이 모두 동일한 뷰를 하나의 뷰로 할지 두개의 뷰로 나눠서 만들지를 고민 해봤습니다.
- 하나의 뷰에서 다른 기능 적인 부분만 분기 처리를 하여 만들게 되면 코드적으로 대응이 쉽고 디자인의 변경이 있더라도 한번에 적용할 수 있다는 장점이 있습니다. 여기서 단점은 만약에 디자인 요소가 처음의 방향과 다르게 수정과 추가 화면에서 다르게 적용이 된다면 대응하기 힘들다는 단점이 있습니다.
- 두개의 뷰로 만들어서 진행 할 경우에는 두개의 뷰에 대해 각각 다른 방향으로 디자인 변경이 이루어질경우에는 쉽게 대응할 수 있지만 같은 방향으로 변경이 되는 경우에는 같은 로직을 두번씩 써줘야 하는 번거로움이 있습니다.
- 여기서는 하나의 뷰에서 분기를 처리하는 것보다 두개의 뷰로 만들어서 관리하는게 더 깔끔한 코드가 될 것이라고 판단하여 두개를 뷰를 선택했습니다.
오류상황.gif | 오류상황.png |
---|---|
에러메세지(iOS16.0) | 에러메세지(iOS15.5) |
---|---|
- 문제
- 프로젝트 중간에 iOS와 MacOS, Xcode의 업데이트가 있었습니다. 저희 중 한명만 Xcode 14.0으로 업데이트를 하게 되면서 시뮬레이터의 iOS버전이 16.0으로 올라가게 되면서 기존 타겟팅이던 15.5에서는 일어나지 않던 오류가 발생했습니다. ProjectMainView에서 Popover를 통해 선택된 리스트의 내부의 뷰를 이동시키게 되었는데 다른 뷰로 보냈다가 다시 돌아오면 앱이 종료되는 현상이 발생했습니다.
- 해결
- 처음에는 업데이트된 엑스코드의 버전 차이로 인한 문제라고 생각했습니다. 하지만 리뷰어의 첨언 덕분에 저희 코드에서 popover를 하기 위해 만들었던 state프로퍼티인 isPopover를 onLongPressGesture를 이용해 true로 바꿔 준 다음 다시 false로 만들어주는 로직을 넣지 않았기 때문에 뷰의 state가 true인 곳으로 projectView를 이동시켰을 때 뷰가 들어가기도 전에 View에서 Popover를 띄우는 상태가 true이기 때문에 Popover를 띄워줘야 하는데 이 때 어디에 띄워야 하는지를 찾지 못해서 이런 에러가 발생을 했다고 판단을 했습니다.
- 그래서 해결방법으로 Popover에서 눌려지는 버튼 내에 isPopover를 false로 만들어주는 로직을 추가 했습니다.
- feat : 기능 추가 (새로운 기능)
- refactor : 리팩토링 (네이밍 수정 등)
- style : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)
Swift Lint 형식 준수