namsoo5 / Uniview

✅학교 공지체크 📌학교 공지저장 📩학교 공지알람

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

유니뷰

앱스토어링크 이동


팀원

기획 1명, 디자인 2명, 서버 5명, AOS 3명, iOS 2명

기간

2020.08.25 ~ 2020.10.23

개발환경

Xcode 12.1

CocoaPods 1.9.1

라이브러리

  • Realm
  • lottie
  • Kingfisher
  • SnapKit
  • Firebase(FCM, Analytics, Crashlytics)

개발과정

정리

서로의 작업을 공유하기위해서 노션을 이용해서 팀원과 협업했습니다.

프로젝트를 진행하기전에 개발할 부분을 나누고 도전하고싶은 목표도 정했습니다.

테스트코드를 이용한 개발
다크모드 개발
Realm DB사용
재사용 되는 뷰를 코드로 작성해서 재사용성을 높이는 것
자동완성을 Trie구조를 구현해서 적용하기

클린코드를 지향하기위해서 컨벤션을 통해 네이밍, 함수 형식등 일정한 규칙으로 구현하도록 노력했습니다.

서로가 구현한 Extension이 겹치지않도록 하기위해서 정리하는 공간을 만들었습니다.

공지사항

서로가 꼭 알아야하는 부분이나 개발도중 확인해야 할 것 같은 내용은 공지사항을 통해서 읽도록 했습니다.

이슈

개발 도중 어려웠거나, 알 수 없는 오류등 문제가 생겼을 때 기록 해놓고 해결하면서 그 상황을 기록했습니다.

진행

무엇을 하고있는지 개발과정을 서로가 알 수 있고 어떤 작업이 남았는지 파악하며 혹시나 작업을 까먹어서 누락되지 않도록 기록했습니다.

실행화면 설명

초기설정

키워드

북마크

더보기


이슈사항

1. Cell 디자인 이슈

리스트를 구현하는 TableView Cell을 구현하는게 어려웠습니다.

리스트에 날짜별로 공지사항 뷰가 보여야했고 (헤더 존재)

리스트가 스와이프형식으로 삭제 및 북마크가 되면서 Cell 영역에 색이 보여야하고 (스와이프 기능)

Cell간 간격이 있어야했습니다. (마진)


이 3가지 기능을 충족시키기위해 생각했습니다.

CollectionView를 사용하면 스와이프기능이 어려울 것 같았고

TableView를 사용하면 Cell간 여백과 헤더가 어려울 것 같았습니다.

비교했을 때 TableView를 잘 이용하면 모든 기능을 구현 할 수 있을 것 같았습니다.

**방법1**
Cell안에 뷰를 작게 그려서 여백이 있는것 같이 그려보자 해서 했지만 스와이프시 색이 변하는 영역과
보이는 뷰의 영역의 오차가 생겨서 보기 미웠습니다.

**방법2**
다른 방법으로 셀하나를 Section으로 인식하기로 했습니다.
좋은 방식인지는 확신하진 못하지만 요구기능을 충족시키기위해서 헤더기능을 Cell하나로 대체해줘야했습니다.
Section마다 빈 헤더를 삽입해줘서 여백이있는 효과를 주었습니다.
날짜는 게시글을 비교해서 다른 날짜가 있으면 새로 모델을 만들어서 추가하는 식으로 데이터를 만들었습니다.
구현하고나니 원래 원하던 기능을 만족시킬 수 있고 잘 동작해서 이 방법을 사용했습니다.

스와이프시 자연스러운 색변경이 필요했습니다.

Cell의 한쪽에 여백이있어서 스와이프시 |셀||여백||스와이프색| 위 스크린샷참고

이런형태로 여백 부분이 어색했습니다.

셀을 스와이프하는 느낌이 들도록 많은 테스트를 해봤습니다.

**방법1**
Cell여백이아닌 TableView를 줄였을 땐 줄어든 부분부터 스와이프색이 변경되서 더 어색했습니다.

**방법2**
Cell의 여백을 없애서 꽉차게 만들었고 스와이프했을때 Cell의 라운드처리로 뒷부분이 색이 변하지않아 어색한 느낌이 있었습니다.

**방법3**
Cell의 디자인은 그대로두고 뒤의 Cell배경을 변경해서 전체가 스와이프되는 영역처럼 보이도록 효과를 줬습니다.
이 방법을 채택했습니다.
다행이도 스와이프시를 알 수 있는 API와 스와이프 취소 될때를 알 수 있는 API가 존재했고 그곳에 처리해줬습니다.

2. 웹뷰 URL 이슈

개발하면서 웹뷰테스트 때는 잘 동작했지만 실 서비스를 배포하면서 생긴 이슈입니다.

많고 다양한 학교가 존재하고 각 학교들마다 URL이 다양했습니다.

홍대인경우 URL이 길어서 웹뷰가 동작하지 않는 이슈를 확인했고 확인결과 URL이 긴경우 문제가 되었습니다.

URL이 긴 경우, 빈공백이 있는경우 Swift의 URL(string:)을 이용해서 URL을 받아오려 한다면 nil값을 할당받습니다.

이런경우 addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)를 이용해서 인코딩된 문자열을 넘겨줘서 URL을 받아올 수 있도록 하였습니다.

변경이후

addingPercentEncoding인코딩을 사용하는경우 문제가 되는 상황이 존재했습니다.

URL안에 특수기호가 포함되어서 인코딩시 링크를 다르게 주는 경우였습니다.

링크를 복사해서 사파리등 웹브라우저로 열면 잘열렸지만 웹뷰를 사용하면 다른 링크가 되는것 같았습니다.

이를 해결하고자

URL String을 Data타입으로 변형해서 원본의 문자열을 그대로 사용해보려했고

URL(dataRepresentation: )를 이용해서 Data타입을 URL로 만들 수 있다는것을 확인했고

시도해본결과 잘 동작하는것을 확인했습니다.

About

✅학교 공지체크 📌학교 공지저장 📩학교 공지알람