이번 포스팅에서는 앱스토어 심사 기준을 상세히 알아보고자 한다. 모바일 시장이 앞으로도 지속적으로 커짐에 따라 앱의 사용은 증가할 것이고, 그에 따라 앱을 개발하려는 사람도 많아지고 있다. 나는 Flutter를 이용해 안드로이드앱, iOS앱을 모두 배포하고 있기 때문에 이번에 앱스토어의 까다로운 심사 기준을 다시 한 번 되짚고 넘어가보고자 해당 내용을 상세히 정리해 보겠다.
심사를 하는 이유
앱스토어의 기본 원칙은 사용자에게 안전한 앱을 이용하도록 하고, 개발자에게는 뛰어난 앱을 개발할 기회를 제공한다는 데 있다. 이 때문에 애플에서는 모든 콘텐츠에 대해 엄선한 앱에 대해 앱스토어에 배포를 허용하고 있다. 심사 기준에는 5가지의 섹션에 대해 명확하게 정리된 애플의 지침이 제공되기에 해당 지침을 잘 지키고 심사를 넣는다면 앱스토어에 배포하는 데 어려움은 있겠지만 불가능하진 않을 것이다.
주요 5가지 섹션을 둘러보기 전 최근에 달라진 요점에 대해 짚어보겠다.
- 수많은 아이들이 앱스토어에서 앱을 다운받아 쓰고 있는데, 유해 콘텐츠 차단 기능으로도 아이들을 보호할 순 있으나 개발자가 직접 이 역할을 수행해야 할 수도 있다. 애플은 아이들에게 지속적인 관심을 두고 있다는 점을 유념해야 한다.
- 앱스토어는 수억 명 사용자에게 앱을 소개할 수 있는 시장이다. 단순하게 가족 또는 친구에게 보여주기 위한 앱을 만드는 경우, 앱스토어를 이용하는 것보다 XCode를 이용하여 기기에 앱을 직접 설치하거나, Apple Developer Program 회원에게 부여되는 Ad Hoc 배포를 사용하는 것을 권장하고 있다. 3개월의 기간이긴 하지만 TestFlight를 이용해 앱을 테스트하는 기능도 있기 때문에, 이러한 기능을 잘 이용하는 것을 추천하고 있다.
- 애플은 앱 경험을 제공하며 서로 다른 의견을 가진 사용자를 존중한다. 단, 애플이 정해 놓은 선을 넘거나 그러한 행위를 하는 앱은 반드시 거절을 당한다. 아마도 많은 개발자들이 심사 거절을 당하며 메일을 통해 Guideline을 받아보기에 굳이 더 설명하지 않아도 될 것 같다.
- 심사 절차에서의 부정행위, 사용자의 데이터를 도용하는 행위, 다른 개발자의 작업물을 표절한 행위, 등급을 조작하는 행위 등 앱스토어 시스템을 교란시키는 많은 부정적인 행위들에 대해서는 해당 앱은 앱스토어에서 삭제되고 해당 개발자는 Apple Developer Program에서 제명이 될 수 있으니 반드시 주의해야 한다.
이런 기본적인 절차들과 아래의 주요 5가지 섹션을 주의하여 앱스토어에 배포를 위한 심사를 내야 한다.
앱스토어 심사 제출하기 전 주의사항
원활한 앱 승인절차를 진행하기 위해선 보통의 개발자들이 하는 흔한 실수에 대해서는 사전에 필수로 확인해보고 심사를 넣는 것이 좋다. 단순하고 가벼운 실수일 수 있으나 이 것 때문에 심사 절차가 지연되거나 거부될 수 있기 때문이다. 앱이 개발가 의도한 대로 작동되지 않거나 개발자가 적극적으로 앱에 대한 지원을 하지 않는다면, 해당 앱은 불시에 앱스토어에서 삭제될 수도 있다.
확인해볼 주의사항
- 앱에 충돌 및 버그가 발생하지 않는지 테스트하기
- 앱의 정보와 메타데이터가 정확한지 확인하기
- 앱 스토어 심사팀에서 연락을 하게되는 경우를 대비해 연락처 정보 업데이트 해놓기
- 심사팀에서 시연할 수 있는 로그인정보, 기타 앱을 심사하는데 필요한 리소스 준비해놓기 (사용자 계정, 관리자 계정, 샘플QR코드 등)
- 심사 중에도 직접 서비스에 접근할 수 있도록 백엔드 활성화 해놓기
- 명확하지 않은 기능 또는 인앱결제에 관련된 내용은 자세한 설명을 심사 메모에 기록해놓기
주의사항에 대해 어느정도 인지했다면 이제 본격적으로 5가지 주요 섹션에 대해 알아보도록 하자.
1. 안전성
2. 성과
3. 비즈니스
4. 디자인
5. 법적 요구 사항
안전성 (애플 주요 5가지 심사지침 중 1번째)
앱스토어에서 앱을 다운받고자 할 때 사용자는 앱을 설치해도 안전하다는 확신을 갖고 싶어한다. 앱에 불쾌한 콘텐츠가 있거나 성적인/모욕적인 단어들은 배제해야 하고, 앱이 기기에 어떠한 손상도 입혀선 안된다. 아래의 경우는 흔히 저지르기 쉬운 실수이다.
- 부적절한 콘텐츠
앱에 모욕적이고 사람의 기분을 무시하거나, 의도적으로 혐오감을 주는 등의 콘텐츠가 있어서는 안 된다.- 종교, 인종, 성, 성별, 민족/인종차별 또는 특정 단체에 대한 언급이나 설명을 포함한 명예 훼손 소지가 있는 악의적인 콘텐츠.
- 살해/고문/학대를 받는 사람이나 동물에 대한 묘사, 폭력을 조장하는 콘텐츠는 사용해선 안 된다.
- 무기/위험물/불법 총기 또는 탄약 구입 등을 묘사해서는 안 된다.
- 부정확한 기기 데이터, 가짜 위치 추적기, 속임수/장난용 기능 등의 거짓정보 및 기능 등을 사용해서는 안 된다.
- 사용자가 생성한 콘텐츠
사용자가 생성한 콘텐츠나 소셜 네트워크 서비스의 기능을 하는 앱이라면 다음의 내용을 추가해야 한다.
- 부적절한 자료가 앱에 게시되지 않도록 필터링하는 방법에 대해 설명해야 한다.
- 모욕적인 콘텐츠를 캐치하고 적시에 대응할 수 있는 메커니즘이 있어야 한다.
- 폭언하는 사용자에 대해 신고하는 기능 등 서비스를 차단할 수 있어야 한다.
- 사용자들이 쉽게 컨택할 수 있도록 개발자 연락처 정보가 게시되어 있어야 한다.
- 어린이 카테고리
어린이 카테고리 사용은 어린이에게 적합한 앱을 효과적으로 찾을 수 있게 한다. 어린이 콘텐츠에선 구입 기회 또는 아이들 주의를 분산하는 등의 다른 내용이 없어야 한다.
온라인에서 어린이들로 데이터 수집시 개인정보 보호법을 준수해야 한다. 자세한 내용은 애플 심사 지침의 개인정보보호섹션 을 검토하도록 하자. - 신체적인 손상
앱이 신체적인 손상을 입힐 위험이 있다고 판단되면 해당 앱을 거부할 수 있다.- 부정확한 정보를 제공하거나 환자를 진단 또는 치료하는 데 사용할 수 있는 의학앱은 철저하게 심사될 수 있다.
- 약물 투여량 계산기는 제약업체, 병원, 대학교, 의료보험회사, 약국 혹은 승인된 기관에서만 만들거나 국제적인 기관 중 하나의 승인 등을 받아야 할 수 있다.
- 담배 및 전자담배, 불법 약물 또는 과도 음주를 조장하는 등의 앱은 앱스토어에 등록될 수 없다.
- 음주운전, 과속운전 등의 무분별한 행동을 조장하지 말아야 한다.
- 개발자 정보
사용자는 궁금한게 생기거나 문제가 있다면 개발자에게 연락할 방법을 알아야 한다. 앱 그리고 지원 URL에 개발자의 연락처를 명시해야 한다. - 데이터 보안
앱은 수집한 사용자의 개인정보 등을 적절히 취급하고, 이에 대한 제3자의 무단 사용, 공개 및 접근을 방지하도록 보안 조치를 갖추어야 한다. - 범죄 행위 신고하기
범죄로 추정되는 행위에 대해 신고하는 데 사용되는 앱은 반드시 현지 사법 기관과 협의가 되어 있어야 하고 사법기관의 개입이 활성화된 국가에서만 제공이 가능하다.
성과 (애플 주요 5가지 심사지침 중 2번째)
- 앱 완전성
앱스토어 심사를 제출하는 앱은 필요한 메타데이터가 모두 있어야 하고 URL이 모두 정상적으로 동작하는 버전이어야 한다. PlaceHolder Text, 빈 화면, 임시 콘텐츠 등은 제출하기 전에 반드시 삭제해야 한다. 앱을 제출 전 기기에서 버그 또는 안정성에 대한 테스트를 했는지, 로그인이 필요하다면 로그인 정보가 있는지 (백엔드 서비스가 활성화되어 있는지) 확인해야 한다. 앱에서 인앱결제를 제공하는 경우 완전하게 작동하며 심사 팀에서 볼 수 있도록 해야 하며, 그렇지 못한 경우엔 심사 메모에 해당 사유에 대해 상세히 설명해야 한다. - 베타 테스트
시연, 베타 버전의 앱은 앱스토어에 등록하지 못하므로 TestFlight를 사용해야 한다. 단, TestFlight를 통해 베타 배포용으로 공개한 앱이라면 앱 심사 지침을 준수해야 하며, TestFlight를 사용하는 테스터에게 어떠한 보상이나 대가도 제공해서는 안 된다. - 정확한 메타데이터
사용자는 다운로드하거나 구입하려는 앱이 어떤 앱인지 알아야 한다. 따라서 개인정보 비롯한 앱의 메타데이터, 앱 설명 및 스크린샷과 미리보기에 앱의 주요 기능을 보여주도록 반영해야 하며 항상 최신 버전에 맞게 업데이트 해야 한다.- 인앱결제 기능이 있는 경우 홍보에 사용된 항목, 단계, 구독 등이 추가 구입 필요여부에 대한 설명, 스크린샷과 미리보기에 명확하게 설명해야 한다. 앱스토어에서 인앱결제를 홍보하기 위해선 인앱결제 표시이름, 그리고 출시 이후 문제없이 구입을 완료할 수 있도록 처리되어야 한다.
- 스크린샷에는 사용중인 앱의 내용이 표시되어야 한다. 제목아트, 로그인페이지 또는 스플래시 화면만 보여지면 안 된다.
- 미리보기는 사용자가 앱의 내용과 기능을 확인하는 효과적인 방법 중 하나이다. 미리보기는 앱 자체 동영상 화면 캡처만 사용할 수 있다. 스티커와 iMessage 확장프로그램은 메시지 앱에서 보여줄 수 있다. 동영상만으로 명확한 설명이 불가능하다면 나레이션과 텍스트 오버레이를 추가할 수도 있다.
- 앱은 iOS, iPadOS, macOS, tvOS, watchOS 서비스 경험에 중점을 두어야 하며 특별한 대화 기능이 없다면 앱 또는 메타데이터에 다른 모바일 플랫폼의 이름, 아이콘, 이미지 등을 추가해서는 안 된다.
- 하드웨어 호환성
- 앱을 최대한 활용하게 하기 위해서는 가능한 iPhone 앱은 iPad에서 실행할 수 있어야 한다. 애플은 사용자가 모든 기기에서 사용할 수 있도록 범용 앱 제작하는 것을 권장하고 있다.
- 전원을 효율적으로 사용하고 기기에 손상을 입힐 위험이 없는 방식으로 앱을 설계해야 한다. 앱때문에 배터리가 빨리 소모되거나 불필요한 리소스를 잡아먹는 등의 무리가 가해지면 안 된다.
- 소프트웨어 요구 사항
- 앱은 공용 API만 사용해야 하며 최신 버전의 OS에서 실행이 되어야 한다.
- 앱은 번들에서 독립적이어야 한다. 데이터를 지정된 범위 안에서만 읽거나 써야 하며, 앱의 자체 기능을 변경할 수 있는 코드를 다운로드, 설치, 실행 등이 되어서는 안 된다.
- 웹을 탐색하는 앱이라면 해당 WebKit 프레임워크와 WebKit Javascript를 사용해야 한다.
- 셀룰러 네트워크로 재생되는 동영상 스트리밍 콘텐츠의 경우 HTTP 라이브 스트리밍을 사용해야 하고, 기준치 192kbps HTTP 라이브 스트림이 포함되어야 한다.
- 볼륨조절, 벨소리/무음 스위치 등 표준 스위치 기능이나 기본 사용자 인터페이스 요소, 동작에 대해 변경하거나 비활성화 하는 앱은 거부된다.
- 앱을 빈 광고배너나 테스트광고와 함께 제출해서는 안 된다.
- 사용자 활동을 기록하거나 로그 수집등의 행위를 진행하는 경우 반드시 사용자에게 명시적인 동의를 얻어야 하고 눈에 띄거나 귀에 들리는 방식으로 해당 사항을 인지시켜 주어야 한다. 기기 카메라, 마이크, 화면녹화 등이 이에 포함된다.
- 사용자가 파일조회 또는 선택이 필요한 경우 파일 앱의 항목과 사용자의 iCloud 문서를 포함해야 한다.
- 앱 클립, 위젯, 확장프로그램, 알림 등은 앱의 콘텐츠 및 기능과 관련이 있어야 한다. 앱 클립은 광고가 포함될 수 없다.
비즈니스 (애플 주요 5가지 심사지침 중 3번째)
앱으로 수익을 창출하는 방법은 다양하게 존재한다. 비즈니스 모델이 명확하지 않다면 메타데이터와 앱 심사 메모에 이에 해당하는 설명을 기재해야 한다. 앱이 어떻게 작동하는지 파악이 힘들거나 인앱결제 기능을 바로 이해할 수 없다면 심사가 지연되거나 거부될 수 있다. 앱 가격은 개발자가 정하지만, 그 가격이 지나치게 높다고 판단될 경우 심사에 거절될 수 있다.
- 지불
- 인앱결제 (앱 내 구입)
- 앱 내 기능을 잠금해제하려는 경우 (구독, 게임 내 화폐, 게임 단계, 프리미엄 콘텐츠 접근하기 등) 인앱결제를 사용해야 한다. 인앱결제 이외에 구입 메커니즘으로 안내하는 버튼, 외부링크 등의 동작을 유도해서는 안 된다.
- 사용자가 개발자 또는 디지털 콘텐츠 제공자에게 '사례'할 수 있도록 앱 내에서 구입용 화폐를 사용할 수 있다.
- 인앱결제를 통해 구입한 크레딧이나 화폐는 사용 기한이 없어야 하고 복원할 수 있는 복원 메커니즘을 반드시 갖고 있어야 한다.
- 인앱결제 항목을 다른 사람에게 선물로 보낼 수 있다. 이러한 선물은 최초 구입한 사용자에게만 환불이 가능하다.
- 랜덤박스 등 무작위 가상항목을 구매하게 하는 경우 구입 전 사용자에게 각 항목의 수령 확률을 공개 해야 한다.
- 디지털 상품 또는 서비스로 교환할 수 있는 기프트 카드, 상품권, 바우처, 쿠폰 등은 인앱결제를 통해서만 판매할 수 있다.
- 비 구독형 앱의 경우 전체 잠금 해제옵션을 제시하기 전 0원 가격대로 설정하고 'XX일 무료 체험' 등의 명명규칙을 따라 무료 체험 기간을 제공할 수 있다. 단, 체험 시작 전 해당 기간이 끝나면 전체 기능을 사용하기 위해 지불해야 하는 비용을 앱에 명확히 표시해야 한다. 더 자세한 사항은 영수증
- 구독
인앱결제 구독을 자동으로 갱신하는 기능을 제공할 수 있다. 앱에 자동갱신 구독을 추가하는 경우 아래의 지침을 따라야 한다.- 자동 갱신 구독을 제공하는 경우, 지속적으로 동일한 상품을 제공해야 한다. 구독 기간은 최소 7일이어야 하고, 사용자의 모든 기기에서 사용할 수 있어야 한다.
- 구독은 단품 서비스 유형으로도 제공될 수 있어야 한다. 예를 들어 영화 전체에 대한 구독 서비스가 있고 한 편의 영화만을 구입하거나 일정 기간만 볼 수 있는 단품 서비스를 모두 제공할 수 있다.
- 해당 앱이 설치된 사용자의 모든 기기에서 구독을 사용할 수 있어야 한다.
- 사용자에게 해당 앱을 평가하거나 후기를 작성하거나 다른 앱을 다운받도록 강요해서는 안 된다.
- 구독을 구입한 사용자는 소셜 미디어에 게시물 올리기, 연락처 업로드, 지정된 횟수 이상으로 앱 사용하기 등 추가 작업을 수행하지 않고도 사용자가 구입한 콘텐츠를 이용할 수 있어야 한다.
- 구독 기반의 앱이 아니었는데 구독 기반의 비즈니스 모델로 변경하는 경우 이미 결제를 완료한 기존 사용자에게는 주요 기능을 계속 제공해야 한다.
- 업그레이드/다운그레이드 : 사용자의 부주의로 같은 항목을 여러 번 구독하게 되지 않도록 해야 한다.
- 구독 정보 : 사용자에게 구독을 요청하기 전 사용자에게 월별 발행 횟수 정보, 클라우드 저장 공간 정보, 서비스 접근 방법 등 같은 구입 항목에 대해 명확하게 설명해줘야 한다.
- 기타 구입 방법 : 인앱결제 이외의 구입방법을 제공해도 되는 경우도 있다. (PG결제 등) 해당 섹션의 앱은 인앱결제 이외의 구입방법을 사용하도록 권장할 수는 없다. 앱 외부에서 별도의 이메일을 보내는 행위 등 다른 구입 방법에 대해 안내해서는 안 된다.
- '읽기 도구'앱 : 잡지, 신문, 책, 오디오, 음악, 비디오 등의 콘텐츠 구독에 대해서는 인앱결제 외의 구입방법을 사용할 수 있다.
- 기업 서비스 : 앱이 직원 또는 학생용으로 해당 조직 또는 그룹에만 직접 판매하는 경우 인앱결제 외의 구입방법을 사용할 수 있다. 단, 소비자/단일 사용자나 가족 판매에서는 인앱결제를 사용해야 한다.
- 개인간 서비스 : 앱에서 두 사용자 사이에 실시간으로 개인 간 구입 서비스를 지원하는 상황(예: 개인과외, 의료상담, 부동산 둘러보기, 헬스 관련 상담 등)에서도 인앱결제 외에 구입방법을 사용할 수 있다. 단, 1대1의 상황에 한하며 다대1인 경우는 인앱결제를 사용해야 할 수 있는 등의 심사 절차가 있으니 주의해야 한다.
- 자동 갱신 구독을 제공하는 경우, 지속적으로 동일한 상품을 제공해야 한다. 구독 기간은 최소 7일이어야 하고, 사용자의 모든 기기에서 사용할 수 있어야 한다.
- 인앱결제 (앱 내 구입)
디자인 (애플 주요 5가지 심사지침 중 4번째)
애플 사용자는 심플하고 세련된 앱을 높이 평가하고, 애플이 기대하는 바도 동일하다. 훌륭한 디자인의 앱을 출시하는 것은 개발자의 역할이지만, 최소한 다음의 기준 등을 충족해야 승인이 가능하다.
- 모방
본인의 아이디어로 앱을 제작해야 한다. 다른 앱을 모방하는 것은 지적 재산권 침해 등의 소송을 당할 수도 있고 앱스토어에서 제명될 수 있다. - 최소한의 기능
웹사이트를 단순히 바꾼 웹뷰의 형태가 아닌 명확하게 동작하는 기능, 콘텐츠, UI가 있어야 한다. - 애플로 로그인
앱에서 사용자 기본계정을 설정하기 위해 타사 또는 소셜 로그인 서비스(Google, Facebook, Twitter 등)를 사용하는 앱은 반드시 Apple로 로그인 역시 동등한 옵션으로 제공해야 한다. 사용자의 기본 계정은 사용자 식별, 로그인, 앱의 기능 및 연결된 서비스에 접근하기 위해 앱에 설정한 계정을 의미한다. 애플로 로그인은 다음 경우에 필요하지 않다.- 회사의 자체 계정설정 및 로그인 시스템을 전용으로 사용하는 앱
- 앱사용자가 기존 교육/기업 계정을 사용해 로그인해야 하는 경우
- 정보 또는 업계 지원 주민 확인 시스템이나 전자ID를 사용해 사용자를 인증하는 앱인 경우
- 특정 타사 서비스 클라이언트 앱으로 메일, 소셜 미디어 또는 기타 타사 계정에 직접 로그인해야 하는 경우 (인스타그램 등)
법적 요구 사항 (애플 주요 5가지 심사지침 중 5번째)
앱은 모든 법적 요구 사항을 준수해야 한다. 해당 과정은 꽤나 복잡하지만 이를 준수하여 앱을 만드는 것은 개발자의 책임이다. 또한 불법 행위나 위험행동을 요구하고 조장하는 앱은 무조건 거부된다.
- 개인 정보 보호호사용자의 개인정보를 보호하는 것은 애플에겐 그 무엇보다 중요하다. 개발자는 개인 정보를 처리할 때 신중을 기하여 고객의 기대치 뿐만 아니라 관련법률, 약관 등을 반드시 준수해야 한다.
- 데이터 수집 및 보관
- 개인정보 처리 방침 : 모든 앱에는 App store connect 메타데이터 영역 및 앱 내부에 쉽게 볼 수 있도록 개인정보 처리방침 관련 링크가 포함되어야 한다. 개인정보 처리방침은 분명하고 명식적으로 아래의 요건을 준수해야 한다.
- 앱/서비스가 수집하는 대상 정보, 수집 방법, 수집 정보의 사용 목적 정의
- 본 지침을 준수하여 앱을 통해 사용자 정보를 공유하는 타 회사는 앱의 개인정보 처리방침에 명시되고 본 지침에서 요구하는 것과 동일 혹은 동등한 수준으로서 사용자 정보 보호를 제공하고 있음을 확인해야 한다.
- 정보 보유/삭제 관련 정책이 설명되어야 하며 사용자가 동의를 철회하고 정보 삭제 요구가 가능하도록 방법이 명시되어야 한다.
- 허가 : 사용자 데이터와 사용내역을 익명의 데이터로 간주하더라도 사용자에게 정보 수집에 대한 동의를 얻어야 한다.
- 데이터 최소화 : 앱은 최소한의 데이터만 접근하도록 요청해야 한다. 사진 또는 연락처와 같이 보호가 필요한 리소스에 대해서는 완전한 접근 권한 요청보다는 독립적인 선택방법을 사용하는 것을 권장한다.
- 접근 : 불필요한 데이터 접근에 대한 동의를 부당한 방법으로 유도하거나 조작, 강요해서는 안 된다. 가능하다면 동의를 거부하는 사용자에게는 대체 솔루션을 제공하는 것도 방법이다. 가령, 사용자가 위치 정보 공유를 거부한다면 수동으로 주소를 입력할 수 있도록 기능을 제공해야 한다.
- 계정 로그인 : 앱에서 소셜 로그인 등을 통해 계정 생성을 지원하는 경우 앱 내에서 계정 삭제 기능도 제공해야 한다.
- 사용자 몰래 암호나 기타 개인 정보를 알아내는 데 앱을 악용한 개발자는 반드시 Apple Developer Program에서 제명된다.
- 개인정보 처리 방침 : 모든 앱에는 App store connect 메타데이터 영역 및 앱 내부에 쉽게 볼 수 있도록 개인정보 처리방침 관련 링크가 포함되어야 한다. 개인정보 처리방침은 분명하고 명식적으로 아래의 요건을 준수해야 한다.
- 데이터 수집 및 보관
댓글