티스토리 뷰
https://apps.apple.com/ph/app/besteats/id1618130833
앱 개발자분들이 앱 배포를 해보라는 이유를 알것 같습니다.
기획부터 개발까지
그리고 앱 등록 과정에서
개인정보처리방침, 앱 과금설정, 스크린샷 미리보기, 앱 설명, 앱 빌드 파일등록 등등
준비해야될게 너무 많았습니다.
시간 짬내서 어떻게든 내용 채운다음에
첫 심사제출!!
99.99% 리젝 당할것만 같지만
기능이 많지 않아서일까 배포까지 바로 완료 !!
배포해보고나니 고쳐야할게 너무 많아.. 이제 시작인것 같은 느낌..
그동안 이론만 공부하다가 내가 필요한 앱을 만들며 느낀점들을 적어보려고 합니다.
왜 만들었나?
어딜가서 음식을 먹을때 여러 음식점, 같은 프랜차이즈라 해도 지점마다 맛은 다 달랐고,
특히 저는 매운음식을 좋아 하진 않는편인데 맛있게 매운 음식은 또 좋아하는 편 입니다.
하지만 각 음식점 별 매운 강도가 다 달랐고, 내게 맞는 맛을 찾아도 다음에 방문하면 또 까먹게 되고,
다른테이블에서 많이 시키는 음식도 다음 방문에 기억해뒀다가 먹어보고 싶었고,
다른사람들은 맛있다고 먹지만 나한테는 극불호였던 음식도 메모 해두고 싶었습니다.
위의 상황들을 기록하고 나중에 찾아보게 하기 위해 이 앱을 만들어 보게 되었습니다.
개발 기간
2022. 01 ~ 2022. 04 (약 3개월)
피드백을 반영하면서 조금씩 업데이트 하는중입니다.😅
적용해본 스킬
- Swift
- Storyboard (메인화면), Snapkit
- UserDefault
- CollectionView, TableView
- UIAlert
- SearchBar
tool
- Github
- Figma (앱 스크린샷 미리보기 작업)
개발하면서 느낀점
들어가기전에 iOS 커뮤니티 분들에게 정말 많은 도움을 받았었습니다. 찾아보고 답이 안나온다 싶을때 질문을 하면 피드백도 해주고 좋은 방향으로 공부할 수 있게 조언도 많이 해줬고, 다들 각자의 시간도 있었을텐데 시간내서 도와준다는게 죄송하면서도 감사했습니다.
1) 기획, 디자인
어떻게 만들어나갈지 시작이 정말 어려웠습니다.
하루에도 구상이 몇번씩 바뀌고 기획과 디자인이 개발로 이어졌을때 어려움이 있진 않을지 고려해야 했고, 막상 고려한다음 개발로 이어져도 어려움은 있었습니다. 그렇게 생각만 하다가 말기를 여러번 반복했던것 같습니다. 그중에서도 괜찮았던 아이디어는 시간이 지나면 까먹었고, 결국 내용을 (발그림이지만) 그려나가면서 버전관리를 나름대로 하게 되니 직관적으로 볼 수 있게 되면서 작업에 갈피를 잡을 수 있게 되었습니다.
초기 메인화면 | Model 구조 | 초기 디자인 (메뉴상세, 수정) | 초기 메뉴상세 페이지 |
2) UI
iOS 공부를 처음시작했을 때, UI를 구현하는 방법이 다양해서 놀랐습니다..
마우스로 드래그앤 드랍을해 UI를 완성하는 Storyboard 방식은 (아니 앱 개발이 이렇게 쉽다고?) 라는 오만함을 불러오게 했으며,
(아주 반성해..) 잠깐의 기쁨은 git conflict를 내고나서 xib 코드를 보고는 소름이 돋았습니다... (저게 내가 한거라고..? 나도 모르겠는데?)
만약 Storyboard로 협업을 하게 됐을때 코드 가독성이나 충돌이 났을경우 복구하기가 힘들어 보였습니다.
그렇게 UI를 코드로도 구현할 수 있다는 방법도 알게되었고, 몇번 따라하다 보니 예전 React를 했을때 CSS를 했던것과 비슷한 느낌이어서 조금 어려웠지만 적응할 수 있었습니다.
사용하다보니 Snapkit이라는 코드를 더 간결하게 해주는 라이브러리를 알게되어 코드로 UI를 구현하는데 속도가 좀더 붙었습니다.
3) 구조의 중요성
현재 앱의 구성은 아래와 같습니다.
맛집 등록 | 메인화면 | 선택된 맛집의 타입별 메뉴들 | 선택된 맛집의 선택된 메뉴 |
세번째 그림에 타입별 메뉴들에서 추가되는 모든 메뉴들은 타입에 구분없이 한 array에 추가 하고 있었습니다.
아래 Model을 보면
수정전
초기 Model의 모습입니다.
메뉴별로 3가지 타입이 있는데 (좋아요, 먹어볼래요, 별로에요)
메뉴가 추가 되면 어떤 타입이던지 menus.append를 해서 그냥 추가를 했습니다. (삽질의 시작)
filter 메소드로 어떻게든 걸러내보려고 했지만,
즐겨찾기의 경우는 '좋아요' 타입에만 나타나게 해야했고,
cell 삭제시 out of range 에러가 빈번하게 발생했습니다.
(remove(at:) 메소드로 적절한 index를 찾아야하는데 filter로 걸러낸 index와 menus의 전체 index를 일치 시키는데 어려움이 있었습니다.)
수정 후
수정 후 Model은 filter로 더이상 걸러내지 않고,
타입별로 [Menu] 를 만들어줘서 각 타입별 index를 보장할 수 있게 구현을 했습니다.
이후 선택된 메뉴 삭제 또는 새 메뉴 추가 구현에 에러 발생을 없앴습니다.
마무리
앱을 배포하고 지인에게 소개도 해보고 피드백도 굉장히 많이 받았던것 같습니다.
글씨가 많아지면 cell을 넘어가기도하고, 즐겨찾기 하려고 별표를 누르면 앱이 꺼지고.. (최악..)
지금은 수정해서 다시 올렸지만, 새로운 기능을 만들기보다 좀더 안정적이게 구조를 잡게되고 불필요한 코드나 반복되는 코드들을 조금이라도 줄여보려고 하게 되던 계기가 됐던것 같습니다.
무엇보다 프로젝트를 진행하면서 필요한 부분을 찾아서 공부하게 되었던점이 개인적으로 너무 좋았습니다.
앞으로 앱의 기능을 하나둘 씩 추가해보면서 앱과 같이 성장해갔으면 좋겠습니다.
'Story' 카테고리의 다른 글
2022 회고 (2) | 2023.01.02 |
---|---|
[프리온보딩 iOS] 두번째 프로젝트 - CustomKeyboard 회고 (0) | 2022.07.24 |
프리온보딩 iOS (0) | 2022.07.01 |
2021 회고 (4) | 2022.01.09 |
호텔리어에서 개발자가 되기까지 걸어온 길 (0) | 2022.01.01 |
- Total
- Today
- Yesterday
- swift property
- Swift init
- Swift 프로퍼티
- Swift ModernRIBs
- swift reduce
- CS 네트워크
- Swift joined
- swift programmers
- 2023년 회고
- swift protocol
- Swift 알고리즘
- 원티드 프리온보딩
- Class
- Swift
- RIBs tutorial
- Combine: Asynchronous Programming with Swift
- Swift inout
- Swift joined()
- removeLast()
- swift 고차함수
- Swift Error Handling
- swift (programmers)
- Swift Leetcode
- RTCCameraVideoCapturer
- Swift 내림차순
- Swift RIBs
- Swift final
- Swift 프로그래머스
- ios
- iOS error
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |