4월 20일부터 5월 27일까지 개발한 iOS 앱이 6번의 리젝만에 앱스토어에 올라갔다..!

앱스토어 링크
https://apps.apple.com/kr/app/gri-g/id1622010590


GRIG?

  • Github Rank In GSM를 줄인말로 광주소프트웨어마이스터고등학교 학생들의 Github 활동을 활성화시키기 위해서 만들어졌습니다.
  • GSM 학생들의 깃허브 랭킹을 보여줍니다.

만들게된 계기

학교 디코 홍보방에 선배 한 분이 GRIG의 Open API를 사용해 만든 웹페이지 GRIG를 홍보했다. 이때 GRIG API가 Open API인것을 알았고 사이드 프로젝트로 하기 좋을것 같아서 시작했다.


  • iOS 개발자
  • 디자이너

로 작성자 포함 총 2명이서 진행했다.


기획

사실 기획이라고 할 만한게 없었다. 이미 있는 서비스를 그대로 모바일로 만드는 것이기에 바로 디자인에 들어갔다.


디자인

1차적으로는 이렇게 완성이 되었다.
웹같은 경우 bio도 유저 리스트에 같이 나오는데 모바일은 아무래도 화면이 작다보니 셀을 터치하면 디테일 정보가 보이게 하는 식으로 진행되었다.


개발

개발을 시작하기 전에 무슨 스택을 쓸지 고민을 해보았다.

Xcode 프로젝트 관리 도구 선정

전부터 Tuist를 쓰기도 했고 다른 관리 툴인 XcodeGen은 yml또는 json을 쓰고 Tuist는 Swift를 쓰기에 언어부터가 더 익숙하기도 하기에 Tuist를 쓰기로 했다. (v3.4.0)

아키텍쳐, 프레임워크 선정

아키텍쳐같은 거는 전처럼 ReactorKit에 RxFlow를 쓸까 하다가 이미 이를 쓴 프로젝트가 여럿 있기도하고 새로운걸 써보고 싶기도 해서 이건 슬쩍 접어두기로 했다.

그래서 SwiftUI를 쓸까 뭘 쓸까 하다가 며칠전에 한 선배가 와서는 RIBs로 뭐 만들었다면서 'RIBs ㄱ?' 라는식으로 말했었는데, 이전에 콴다 팀 블로그라든지 민소네님의 준 Clean Architecture With RIBs같은 글들을 보면서 RIBs에 흥미가 있었기에 바로 RIBs를 하기로 결정했다!

모듈화

Tuist로 모듈화를 진행했다. 기본적으로 Clean Architecture를 기반으로 둔다. Feature를 Root -> Main -> About, Sort, User로 뒀는데.. 지금와서 보면 굳이 왜 이렇게 만들었지 싶다. RxFlow의 느낌이 조금 묻은거같다.

2022-04-20 ~ 2022-05-12

약 3주동안의 기간만에 개발이 끝났다. RIBs는 처음이기에 여러 깃허브 코드나 글을 보면서 공부했는데 빠르게 익숙해질 수 있었다. 물론 사용할 수 있을 정도의 언저리로 공부했다.


배포

그렇다. 이제 개발이 끝나고 앱스토어에 런칭할 단계에 왔다. 여러가지 설정을 해줘야하는데,

앱 미리보기

앱 미리보기는 아이폰 6.5인치, 5.5인치, 아이패드 12.9인치로 전부 제작해야하는데 디자이너가 제작해주었다.

앱 정보

앱 이름은 GRIG - Github Rank In GSM 으로 설정해두었고, 부제는 비워두었다.

가격 및 사용 가능 여부

가격은 당연하게도 0원 무료이고, 앱이 사용자에게 배포되는 방법은 일단은 교내 랭킹 앱이긴한데 외부의 접근이 제한되어야할 이유도 없기에 전체 공개로 설정했다.

앱이 수집하는 개인정보

랭킹에 등록을 할 때 정보를 수집하긴 하지만 이건 앱에서 수집하는 것이 아니였기에 앱에서 수집하는 개인정보는 없었다.

이 정도만 하면 심사에 올리기 전 정보는 다 입력했다!


심사

이제 앱스토어에 심사를 받을 차례다. 설레는 마음과 함께 심사에 추가해놓았는데 메일로 이런게 왔다.

위 메일로 봤을때 리뷰에 하루이틀정도 걸릴거 같아 다른 일을 하고 있었다. 그런데 5월 13일 2시에 올려놨는데 당일 7시에 리뷰중이라는 메일이 왔다!

그리고는 기쁘게도 11시 52분에

라는 2개의 메일이 왔다. 2번째의 your App Review Feedback은 처음 리젝당할때 빼고는 보내주지 않았는데

  • Understand the Review
  • Address the Issue
  • Resubmit Your App

라는 글자가 강조된채로 내용을 알려주는걸 보니 대충 리젝당했을 때 가이드라인 비스무리한거같았다.

1번째의 We noticed an issue with your submission은 리젝당했다고 알려주고 메일 내의 App Review Page을 리젝 사유를 볼 수 있는 심사 페이지가 나온다.
이번 심사에서는 1.5, 2.3.7, 4.2.2 3개의 가이드라인을 기준으로 거절했다고 나왔다.


리젝 히스토리

리젝 히스토리 중 디자인 관련된 리젝은 GRIG iOS앱 디자이너님이 작성하신 글
에서 상세하게 다룹니다!

1번째

  • 1.5 - Safety - Developer Information
  • 2.3.7 - Performance - Accurate Metadata
  • 4.2.2 - Design - Minimum Functionality

위 3개의 이유로 리젝을 받았다.

1.5 - Safety - Developer Information

의도한 대상으로 제대로 이동하지 않았다는 메세지가 왔다. Next Steps로 URL을 확인해보라는 식으로 왔다.
-> 의도한 대상으로 이동되지 않았다기에 혹시 몰라 영문으로 작성한 버전도 만들고 URL을 재확인하면서 올렸다.

2.3.7 - Performance - Accurate Metadata

앱 이름에 상표 용어, 인기 있는 앱 이름이 포함되어 있다고 한다. 'GRIG - Github Rank In GSM'에서 Github가 걸린거 같다.
-> 'GRI-G'로 이름을 변경했다.

4.2.2 - Design - Minimum Functionality

-> https://velog.io/@rlawns1235/App-Store-Reject-대응기 에서 자세하게 확인할 수 있습니다


2번째

  • 1.5.0 Safety - Developer Information
  • 4.2.2 Design - Minimum Functionality

1.5 - Safety - Developer Information

이번 문구에 강조체로 "Specifically, link does not provide support contact information."이 달려있었다.
-> 지원 URL의 내용에 메일과 깃허브 링크를 삽입했다.

4.2.2 - Design - Minimum Functionality

-> https://velog.io/@rlawns1235/App-Store-Reject-대응기 에서 자세하게 확인할 수 있습니다


3번째

  • 4.2.2 Design - Minimum Functionality

4.2.2 Design - Minimum Functionality

-> https://velog.io/@rlawns1235/App-Store-Reject-대응기 에서 자세하게 확인할 수 있습니다.


4번째

  • 2.1.0 Performance - App Completeness

2.1 - Performance - App Completeness

아이패드에서 경쟁 페이지의 공유 버튼을 누르면 앱이 꺼지는 현상이 일어났다.
-> UIActivityViewController의 sourceView를 view로, sourceBarButton은 shareButton으로 두어서 해결했다.

2.1 - Information Needed

  • 어떻게 앱에 로그인 하느냐?
  • '유저 정보를 가져오는데 실패했습니다' 라는 내용의 Alert를 받았는데 왜 이 문구가 나왔냐?

라는 답을 받았습니다.

-> https://velog.io/@rlawns1235/App-Store-Reject-대응기 에서 자세하게 확인할 수 있습니다!

5번째

  • 2.1.0 Performance - App Completeness

2.1 - Information Needed

  • 어떻게 앱에 로그인 하느냐?

라는 답을 받았는데 대충 우리 서비스에는 로그인이 없다. 랭킹에 등록된 유저는 특정 URL을 통해서 등록했고, 등록은 GSM학생만 된다. 라는 내용으로 회신을 보냈다. 그리고 추가적으로 앱에서 등록하는 URL로 가는 방법도 스크린샷과 함께 보냈다.

6번째

  • 4.0.0 Design: Preamble

4.0 - Design

랭킹에 등록하는 웹페이지로 갈 때 걸린 문제다.
->

UIApplication.shared.open() 

으로 사파리에서 열게 했던걸

let vc = SFSafariViewController(url: url)
present(vc, animated: true)

SFSafariViewController로 열게 했다.

출시

심사넣고 4시간 뒤에 축하 메일이 왔다. 앱스토어에 릴리즈가 허가되었고 축하한다는 뜻이였다! 당일에는 앱스토어에 검색은 안됐지만 다음날에는 검색이 되었다.

최종 모듈화

느낀점

앱스토어에 처음으로 올려보는 앱이다. 처음으로 RIBs를 써보기도 했고, 모듈화를 이렇게 본격적으로 넣은거도 처음이였다. 물론 모듈화를 잘 한거지는 모르겠다.
분명 단순히 리스트만 띄워주는 거였는데.. 어느순간 분석페이지도 생기고 온보딩페이지도 생겨버렸다.
나중에는 SwiftUI를 써서 만든 앱도 출시해보고 싶다.

관련

GRIG 웹사이트에서 보기

https://grig.gsm.dev
https://sunrabbit123.github.io/GRIG/

관련 Github

https://github.com/sunwoo0706/Grig
https://github.com/GRI-G/GRIG-API
https://github.com/baekteun/GRIG-iOS

디자이너 시점

https://velog.io/@rlawns1235/App-Store-Reject-대응기

profile
으악

11개의 댓글

comment-user-thumbnail
2022년 6월 9일

축하드립니다! 🎉

1개의 답글
comment-user-thumbnail
2022년 6월 12일

RIBs를 2주만에 하시다니 대단하십니다!

1개의 답글
comment-user-thumbnail
2022년 6월 14일

비교기능은 API 서버에 없던거같은데, 직접 구현하신건가요 오오

1개의 답글
comment-user-thumbnail
2022년 6월 14일

축하해요 !!

1개의 답글
comment-user-thumbnail
2022년 6월 28일

역시 GSM 최고의 아웃풋...

1개의 답글
comment-user-thumbnail
2022년 7월 5일

🎉🎉🎉

답글 달기