3연속 리젝을 받고 저번주에 드디어 배포를 완료하였다! 1번째 리젝 사유가 3가지였다면 2번째는 그 중 1가지가 충족되지 못해 리젝을 받았었다. 그런데 3번째에는 또다른 1가지의 리젝을 얘기하더라,, 그냥 2번째에 2가지를 얘기해줬으면 얼마나 좋아ㅠ 아무튼 이렇게 지연이 되고 여차저차 배포를 끝마쳤다.
깃허브에 앱에 대한 기능을 따로 정리해서 올릴 것이므로 여기서는 이전 회고시점에서의 다른 점을 정리하겠다.
우선 제일 크게 바뀐 점은 '즐겨찾기' 기능을 추가하였다. 애플 측에서는 불러온 데이터들을 지도에 표시하고 해당 장소를 웹뷰로 정보제공하는 것이 최소한의 기능도 못하는 걸로 본 모양이다. 그래서 쥐어짜낸 것이 마음에 드는 장소를 저장하고 관리할 수 있는 것이였다. 그래서 '즐겨찾기'탭을 추가해 개발을 진행한 것!
| 즐겨찾기 추가, 해당장소 지도검색, 장소 상세정보 웹뷰, 주소 공유하기, 즐겨찾기 삭제 순서 | ![]() | ![]() |
|---|---|---|
![]() | ![]() | ![]() |
눈치챈 사람도 있겠지만 혹시나 싶어 '목록'탭에서도 주소 공유하기 기능을 넣었다. gif로 보여주는 주소 공유하기와 똑같은 기능이므로 사진은 생략하나, 장소이름과 주소, 도로명 주소를 공유한다.
그리고 즐겨찾기에서 해당장소로 이동하는 기능은 지도에서 구분할 수 있도록 따로 마크 색상을 바꿔주었다.
또한 해당장소의 정보를 보여주는 웹뷰 모달에서도 약간의 변화가 있다. 원래는 map.naver.com에서 해당장소를 검색어로 넣은 웹뷰를 띄웠는데 네이버에서 모바일 웹앱 형식으로 만들었는지, '지도에서 열기'라는 기능이 나온다. 그 버튼을 누르면 네이버 지도로 연결되게끔 하는데 이 부분이 리젝을 안겨주었다. 아래에서 자세히 다루겠지만 쨋든, 이의신청을 할 것인가 리젝사유와 함께오는 가이드대로 진행할 것인가 다른 방법으로 할 것인가 고민하다가 다른 방법을 택했다. 원래 띄우고 싶은 웹도 저 부분이기도 하다.

위치 권한 요청을 할 때 어떠한 이유에서, 무슨 기능 때문인지 구체적으로 적어줘야하는 모양이다. 사실 처음 리젝 받았을 때는 그 문구를 테스트용으로 적어놔서 '지도 권한 요청'만 달랑 적어놨다. 아차 싶었고 두번째는 나름 제대로 적었다 싶었는데 그래도 충족이 되지 못했던 지 또 리젝을 받았다. 결국엔 다른 앱들은 어떻게 적었는지 카카오, 네이버 지도를 참고해서 신중하게 적었더니 패스!
![]() | ![]() |
|---|
위에서 말한 해당장소 정보를 보여주는 웹뷰에서 '지도에서 열기'가 서드파티 앱(네이버 지도)으로 제한한다고 애플 지도에서 실행할 수 있도록 제공하라고 한다. 그런데 이건 네이버가 웹앱으로 만들어서 내가 그 버튼을 지울 수도 없는 상황이라서 머리가 아팠다,, 이의신청을 할 것인가, 다른 방법을 할 것인가 고민하던 중 원래 원하던 그림이 있어서 다른 방법으로 하기로 했다. 이 방법도 머리가 아팠지만 ㅠ

원래 띄우려던 웹은 일반적인 웹 주소와 다르게(ex: path, query등) 네이버가 따로 정한 해당장소의 식별값이 웹 주소안에 들어가있어 처음엔 포기했다. 그래서 map.naver.com에 해당 장소를 쿼리로 넣어 결과를 보여준 웹을 띄웠던 것이였다. 리젝 받은 김에 하려던거 제대로 해보자! 하고 찾아본 것은 크롤링이였다.

네이버 검색 API를 활용했기때문에 검색 키워드를 그대로 넣으면 똑같은 장소이름이라도 최상단에 있는 것이 해당장소의 정보일 것이라고 확신을 가지고, 최상단의 정보를 크롤링하면 되겠다 싶었다. 그래서 크롬의 개발자 도구로 확인해본 결과 data id라고 되어있는 변수?가 식별값이라는 것을 확인했고, SwiftSoup를 이용해 진행하였다. 그런데 원하는대로 값이 나오지않았다. 몇시간을 붙잡고 씨름을 했는데 디버깅으로 map.naver.com 에서 쿼리를 넣은 검색 결과 주소를 찍어본 결과 개발자 도구에서 보이는 것이랑 달랐던 것이다. 그래도 그 안에 js로 무언가를 요청하는 부분인지 그 내부에 식별값이 존재해 그 값을 가져올 수 있었다. 정확하진 않은데 검색 결과처럼 쿼리나 패스를 지정해주어 보여주는 정적 페이지와 지도처럼 계속해서 좌표값이 바뀌어 그에 맞게 요청해 불러오는 동적 페이지가 있나보더라. 이것도 그럼 동적 페이지에 해당하나?했다.

이 사유는 읽어보자마자 정말 머리가 아팠다,, 내가 생각한 기능과 애플에서 요구하는 앱의 최소한의 기능이 다른가보다. 준비한 기능은 이게 다인데 뭘 더 넣어야하지? 하는 막막함에 말이다. 그나마 떠오른 것이 장소를 저장하는 것인데 내가 가고싶은 장소를 넣을까, 갔다와서 맘에 드는 장소를 넣을까하다가 둘의 의미가 통하는 즐겨찾기로 만들었다. 그리고 혹시나 싶어 추가한 것이 장소 공유하기, 이것도 서드파티앱으로 연결하는 것을 넣으면 또 리젝될까봐 그냥 장소와 주소를 복사하는 기능으로 만족했다.
즐겨찾기 기능은 디스크에 저장하는 FileManager를 이용했다. 이전 '타이머 노트'앱을 만들때 데이터베이스처럼 이용할 수 있는 CoreData는 써봤기 때문에 새롭게 FileManager를 써보고 싶었다. 마찬가지로 앱을 삭제하지 않는 이상 데이터가 유지되기 때문에 즐겨찾기한 장소의 데이터를 저장하기에 적합하다고 판단했다.
그리고 즐겨찾기 리스트만 보여주기엔 너무나 심심해서 탭을 하면 주소정보와 간단하게 보여주는 지도, 그리고 해당장소를 지도탭에서 볼 수 있도록 이동하는 기능, 주소 공유, 삭제 기능을 넣었다. 이동과 주소공유는 앞에서 개발한 기능들과 똑같아서 간단하게 만들었고, 삭제도 해당장소를 빼고 디스크에 저장하면 되기 때문에 어렵지 않게 구현했다. 이 과정을 생각하기 까지가 좀 오래 걸렸을 뿐이다,,
우여곡절 끝에 무사히 앱을 출시했지만 이번에도 짧게 빠르게 앱을 만들고 싶었던 것과 달리, 계획대로 되는 것이 참으로 힘든 것 같다. 정리하면서 앱스쿨에서 짧게 프로젝트할 때 완성을 일주일 정도 여유두고 하라고했던 말이 생각난다. 예상치 못한 버그나 이번 프로젝트에 있었던 리젝을 받는 일이 생각보다 시간소모가 크다.
그리고 UIKit을 책으로 따라해보거나, 앱스쿨 수업 때 맛뵈기로 접해봤기 때문에 'UIKit으로 내가 앱을 만들 수 있을까?'라는 생각이 맴돌았었다. 이런 찝찝함을 시원하게 해소하여 기분이 좋았따. 그래도 아직 부족한 점이 많다. 이번에는 StoryBoard와 CodeBase를 섞어 뷰를 그렸지만, 완전하게 코드로만 뷰를 그리는 CodeBase(programmatic), 대부분 기업에서 사용하는 Reactive Programming(Rxswift, Combine) 등 갈길이 멀다. 아마 다음 프로젝트에는 앞에 말한 두 가지를 활용해 진행하지 않을까 싶다.
쨋든 이번 프로젝트는 끝!