나의 첫 출시 앱, 알러지키미 처음으로 기획부터 디자인, 개발까지 전적으로 스스로 해낸, 의미가 깊은 프로젝트입니다. 여러번의 리젝을 받으면서 좌절도 했지만, 앱의 출시 플로우를 제대로 경험해 볼 수 있었습니다. 개발일지로 짬짬히 이슈 등의 과정의 발자취를 남겨두었지만, 출시를 마치고 다시 돌아보기로 했습니다. 기획과 디자인은 어려워 이번 프로젝트는 온전히 나의 것이었기 때문에, 이전까지 배우고 학습했던 것들을 최대한 적용해보고 싶다는 욕심과 경험해보지 못했던 기술들을 적용해보고 싶다는 사심이 많이 들어갔습니다. 네이버 맵 SDK, Mordern Cell을 통한 실시간 검색 시 셀 애니메이션, Tag List 등... 이것저것 넣어보며 기획과 디자인을 마구잡이로 하다보니, 생각보다 이에 시간이 많이 들었..
트러블 슈팅🔧 시점 문제과 루트뷰 교체. onboarding에서 HomeView로 넘어갈 때, 이전에 보여줬던 뷰를 pop해서 내려야겠다고 생각했었다. 그러나 실행된 뷰를 펼쳐보니 잘 이전 뷰가 내려가지 않고 그냥 쌓여 있었다. 그리고 클로저에 값을 넣어버린 탓에 이번 뷰가 생성된 시점 이후에 UserDefaults에 값을 넣어줘서 바로 반영이 안되는 문제가 있었다. 루트뷰 자체를 바꿀 수 있었다! sceneDelegate를 불러와서 루트뷰를 교체해주면 된다! 그리고 클로저에 값을 넣지 않고 HomeViewController 인스턴스 생성시점 전에 UserDefaults에 값을 저장했다. 느낀점 이전에는 구현에만 급급해서 자잘한 오류 발생요인들을 놓치고 갔다..
트러블 슈팅🔧 내가 잡은 레이아웃을 무조건 신뢰하지 말자. 이렇게 레이아웃을 짜놓고 왜 태그리스트를 담은 collectionView가 뜨지 않는지 한참을 고민하고 헤맸다. 처음에는 데이터가 잘 안 들어오는 줄 알고 UICollectionViewDelegate 프로토콜 numberOfItemsInSection과 cellForItemAt에서 올바르게 출력이 되고 있는지 확인해 보았다. numberOfItemsInSection 함수는 출력이 되나 cellForItemAt은 출력되지 않았다. 더미 데이터를 넣어보면서 테스트해도 에러도 발생하지 않았다. 무엇이 문제인 걸까? 고민하면서 돌고 돌아 레이아웃으로 돌아왔다. 설마설마하면서 collectoinView의 공간이 모자라서 셀들이 출력되지 않은 것일까! 하며 ..
3월 14일 (목) Iteration 3 中 1일 차 Enum 데이터 UserDefaults에 접근하기 사용자의 알레르기 정보를 받아서 Allergy 배열을 UserDefaults에 저장하고자 했다. 그래서 UserDefaults에 알러지 데이터를 담고자 아래와 같이 코드를 작성했는데.. 오류가 발생했다. 기억을 더듬어보니 UserDefaults에는 swift 기본 타입인 Bool , Int, Double, Float, String, URL 등...만 접근할 수 있다. 그런데 나는 Enum인 Allergy를 담으려 했던 것🚨 UserDefaults에 직접 만든 구조체나 열거형을 담을 수는 없을까? 여기서 DTO(Data Transfer Object)라는 개념을 학습했다. DTO는 데이터 전송 객체로, 데..
3월 13일 (수) Iteration 2 中 3일 차 Tag List 구현하기 오늘은 온보딩 화면을 구성하면서 Tag List를 구현했다. 이전에 미리알림 앱을 구현하면서 태그 추가뷰에서 이 뷰를 어떻게 구현해야할지 갈피를 못잡앗었는데, 이번 앱을 구현하면서 이 기능이 Tag List임을 알게됐다. 이 Tag List를 구현하는데 UICollectionViewFlowLayout를 사용했다. UICollectionViewFlowLayout를 상속시켜 LeftAlignedCollectionViewFlowLayout 클래스를 생성했다. 이 클래스는 컬렉션 뷰 아이템들을 왼쪽 정렬로 배치하는 레이아웃을 구현했다. 레이아웃 속성을 반환하는 layoutAttributesForElements(in:) 메서드를 오버라..
Iteration 2 中 2일 차 3월 12일 (화) 깃이그노어 이슈 발생 코코아팟을 추가하는 과정에서 Pods/ 이랑 *.xcworkspace 를 gitignore에서 적용시키려고 했다. 그런데 계속 적용이 안되고 있었다. # Pods/ 이렇게 있는 형태에서 #만 지우고 ( 공백 )Pods/ 이렇게 해서 적용이 안돼었던 것이다.... 그 결과는 이렇다....ㄱ- 이후 멘토님의 도움을 받아 과거 커밋 이력을 건드려 깃이그노어 처리와 쌓인 나의 바보 같은 잘못들을 지운 상태로 다시 작업을 할 수 있었다.... 깔끔해진 파일트리와 깃 내역을 보니 오늘의 일로하여금 깃 이그노어 처리 상황에서 다시는 실수를 안하겠다고 다짐했다. 정말로!!!!!!!!!!!! 그리고 이전에는 Xcode 내부의 commit & pu..
3월 10일 (일) 지도를 사용하는 뷰에서 기본 맵킷 말고 네이버 지도 API를 사용하기로 했다. 네이버 지도 API는 CocoaPods으로 설치해야했다. 이전까지 불러온 라이브러리는 모두 SMP로 불러올 수 있어서 처음 CocoaPods를 사용해보게 되었다. 가장 먼저 .gitignore 처리를 해주었다! 코코아팟 설치 튜토리얼과 네이버 지도 API 가이드에 따라 차근차근 문제상황을 해결해 나갔다. 네이버맵 라이브러리를 팟으로 설치 완료한 후, 테스트 파일에 맵뷰를 추가하고 실행하려는데 이런 오류가 발생했다. Build Options > User Script Sand Boxing 설정을 No로 변경한 뒤 다시 시뮬레이터를 구동하니 해결됐다! 라이브러리나 토큰 아이디를 사용할 때, 이의 보안성을 염려해 ..
3월 8일 (금) Iteration 1 中 2일 차 오늘은 처음 팀 스크럼을 가졌다. 오늘은 각자의 기획에 대해 소개하고 이번기간 동안 무엇을 할지 등 계획 및 한 일에 대하여 나눴다. 앞으로 출시까지 매일의 회고를 팀원과 함께 나눈다. 어제 무엇을 했는지, 오늘은 무엇을 할 건지의 계획 그리고 고민되는 점 등을 나눌 수 있다는 점에서 의미 있는 시간이다. 회의가 끝나고 문득 든 생각, 아차차! 어제 겪었던 SSL 오류에 대해 말할걸..! 회의 시간을 적극 활용하기 위해 준비를 철저히 해야겠다고 느꼈다. 오늘의 목표는 DiffableDataSource를 활용해서 검색 결과 저장 뷰 구현 (2H)이다. 그리고 남은 시간에는 부족한 기획을 점검하고 채우려 한다. 오늘 한 일 금일 학습한 modern cell..