애플 앱 스토어 심사 한 번에 통과하기
애플은 너무 까다로워 😵
하지만 나쁘지 않을지도?
거부하는 것에 대한 거부를 거부한다!
첫번째 iOS앱을 큰 문제 없이 만들었는데 심사에서 자꾸 거부 당했습니다.
이것도 해야 돼? 하는 거절 사유가 계속 나오고 출시일은 계속 밀렸습니다 😭
앱 심사는 한국 시간으로 저녁에서 새벽 시간대에 했습니다.
일어나면 거부 사유 고치고, 다음날 일어나면 또 거부 사유 고치고 하는 걸 반복했습니다.
빠른 실행을 위하여
그러다보니 제가 받은 심사 거부 사유들을 공유하면 다른 메이커 분들이 더 빠르게 제품을 런칭할 수 있지 않을까? 하는 생각이 들더라구요.
그래서 제가 받은 심사 거부를 모아서 상황, 거부 사유, 대처, 생각을 모아봤습니다.
테스트 계정 정보 제출 안 됨.
제 앱은 SMS 인증 로그인이 꼭 필요한 서비스 였습니다.
심사에 관련된 걸 적는 화면에 테스트 계정 정보 입력칸이 있길래 알아서 로그인 해서 쓰겠지 하는 마음으로 무심코 넘어갔습니다.
심사관은 앱 심사 시 앱을 직접 들어가서 앱 설명에 적어놓은 기능들이 정상 동작하는지 테스트 했습니다.
모든 기능을 테스트 할 수 있는 테스트 계정을 만들어 제출하는게 좋습니다.
다른 유저와 다른 유저가 생산한 컨텐츠 에 대한 신고와 차단 기능 누락
제 앱은 다른 유저가 생산한 컨텐츠를 볼 수 있는 페이지가 있습니다.
심사관은 다른 유저의 데이터를 볼 수 있는 기능이 있는 경우, 해당 유저 자체와 생산된 컨텐츠를 신고할 수 있고 차단할 수 있는 기능을 요구했습니다.
특히 차단 기능의 경우 데이터를 안 보이게 해야 하기 때문에 앱의 정책에 중요한 부분을 차지할 수 있습니다.
클라이언트 (앱) 에서는 예외 처리와 UI 수정 있을 수 있을 수 있고. 서버 (백) 에서는 차단된 유저와 컨텐츠를 안 보이게 처리해야 하기에 공수가 많이 들어갈 수 있습니다.
꼭 처음부터 차단에 대해 고려한 후 구현하고 차단된 유저의 데이터를 섞어서 바로 확인하며 개발하는걸 추천합니다.
계정 삭제 기능 누락
앱에 유저의 로그인과 회원 가입이 된다면 계정 삭제 기능도 있어야 합니다.
“유저와 컨텐츠 에 대한 신고와 차단 기능 누락” 과 같은 이유로 꼭 처음부터 구현하고 차단된 유저의 데이터를 섞어서 바로 확인하며 개발하는걸 추천합니다.
제 앱은 타인의 컨텐츠가 노출되는 것에 대한 기능과 구조가 조금 복잡했고 대부분의 비즈니스 로직이 엮여있었기 때문에 DB 구조 변경하고 기능을 다시 새로 만드는 수준 이였습니다.
정책 고민하고 구현하고 테스트 하는데 다른 작업들보다 몇 배로 시간을 소요했네요 😭
기능 안 됨
앱 초기 개발을 끝내고 서버를 배포했습니다. 그러다보니 서버 안정성이 조금 문제가 있었고 하필 심사관이 앱을 테스트 할 때 서버가 내려가 있었습니다
심사관은 앱 설명과 앱의 페이지 하나 하나 들어가서 잘 돌아가는지 테스트를 진행했습니다.
테스트 후 이상하다 싶으면 바로 심사를 거절하는 경우도 있었습니다.
심사 요청하기 전에 꼭 기능 잘 되는지 확인하고 테스트 계정도 문제 없나 충분한 테스트를 하는 것을 추천드립니다.
기능 못 찾겠음
제 앱은 특정 조건을 달성하지 못 하면 앱 설명에 있는 기능 전부를 이용하는 걸 막아놓았습니다.
심사관은 앱 설명의 기능들을 하나하나 찾고 테스트 했습니다.
만약 설명에는 있는데 해당 기능을 찾을 수 없거나 테스트 할 수 없다면 거부 사유입니다.
꼭 모든 기능이 다 되는 테스트 계정을 제출하는걸 권장드립니다.
무슨 기능을 하는 페이지 인지 모르겠음.
다른 유저들이 얻은 반응을 보여주는 페이지가 있었습니다.
거부 사유에는 이 페이지가 무슨 기능을 하는지 모르겠고, 해당 페이지의 기능과 보여지는 컨텐츠에 대해 설명해돌라는 말과 함께 심사를 거부 당했습니다.
그래서 저는 심사관이 들어간 페이지에 컨텐츠들을 더욱 추가하고 명확하게 했습니다. 그리고 심사처에 메세지로 해당 기능과 보여지는 컨텐츠에 대해 상세히 설명해주었습니다.
지역화 덜 됨
제 앱은 해외의 앱스토어에 출시할 예정입니다. 빠르게 앱을 출시하려고 하다보니 한국어로 표기된 UI 가 남아있었습니다.
심사관은 출시할 국가의 언어와 앱의 언어 사이에 문제가 없는지 까지 파악했습니다.
꼭 지역화를 빼먹지 말고 하도록 합시다.
사용자에게 충분한 설명과 동의 없이 연락처(개인 정보) 수집을 요청하고 거부 시 앱의 권한 관리 설정으로 리다이렉트 함.
제 앱은 사용자의 연락처 정보를 가져오는 권한을 사용자가 주지 않으면 안 되는 앱 입니다.
최소한의 설명을 앱 UI 에 적어놓았고, 권한을 거부하면 권한 설정 부분으로 리다이렉트 해서 꼭 권한을 받게 만들어놓았습니다.
심사관은 앱 권한을 요청할 시 충분한 설명과 동의를 얻어야 할 것을 요구했습니다. 그리고 권한을 거부하더라도 권한 설정으로 리디렉션을 하지 않고 앱을 사용할 수 있게 하길 권장했습니다.
그리고 개인정보 관련된 것들은 더욱 엄격했습니다.
외부로 데이터가 보내지고 활용될 시 사용자에게 용도에 대해 명확히 설명하고 앱 설명에도 더욱 명확히 설명을 기재하길 요구했습니다.
그래서 저는 연락처 정보를 수집하는 앱 UI 페이지에 권한을 받는 이유와 수집한 연락처 정보로 정확히 어떤 기능을 수행한다는 설명을 적어놓았습니다.
그리고 해당 문구를 어디에 정확히 기재해놓았다고 심사처에 메시지를 보냈습니다.
추가적으로 해당 정보들이 적힌 개인정보 처리 방침 페이지를 Notion 으로 만들었습니다.
테스트 데이터 넣음
테스트 계정에서 보이는 데이터들을 Test 1, Test 2 이런 식으로 대충 넣어 놓았습니다.
심사관은 모든 컨텐츠가 완성되고 최종적인 것으로 보이도록 수정하길 요구했습니다.
그래서 저는 모든 컨텐츠를 실제로 운영되는 것 처럼 꾸몄고, 특히 테스트 계정에 보일 수 있는 데이터는 전부 잘 꾸며놓았습니다.
오히려 좋아
생각해보니 애플 측에서 사실상 QA 를 대신 해주는 수준이였고, 유저 입장에서는 필수적이라고 생각하는 기능들이 빠져있었기 때문에 그리 나쁘지만도 않았던 것 같습니다.
고맙다! 애플아!
아직도 안 끝났다고?
이제 거의 다 반영한거 같지만 아직도 제 앱은 심사가 안 끝났습니다 😌
새로운 거부 사유가 나오면 공유하도록 하겠습니다.
더 많은 심사 조건이 있습니다.
제가 받은 심사 거부 사유들 외에도 많은 조건들이 있습니다.
정확하지 않을 수 있습니다
인간이 하는 일이고 플랫폼 정책 특성 상 정책이 변경되어 위의 설명과 해결책이 정확하지 않거나 틀릴 수 있습니다.
혹시 잘못된 내용이나 더 추가됐으면 하는 내용이 있으면 댓글로 남겨주면 감사 드리겠습니다 😀