애플의 앱스토어 심사 - 앱 내부의 웹뷰 사용시 연령 등급 조절 이슈

cheshire0105·2025년 1월 1일

iOS

목록 보기
25/46
post-thumbnail

들어가며...

앱스토어에 앱을 배포하는 과정은 많은 개발자들에게 큰 도전이다. 나 역시 애플의 엄격한 심사 과정을 통과하지 못해 리젝을 당한 경험이 있다. 이번 글에서는 내가 겪은 리젝 사유와 이를 해결하기 위해 취한 조치들에 대해 자세히 설명하려 한다.

리젝 사유: 웹뷰 사용으로 인한 연령 제한 문제

내가 개발한 앱은 사용자들이 링크를 클릭하면 앱 내부에서 웹뷰(WebView)를 이용해 유튜브 링크를 띄우는 기능을 제공한다. 이 기능은 사용자들에게 원활한 동영상 시청 경험을 제공하기 위해 설계되었다. 그러나 애플의 심사 과정에서 다음과 같은 문제가 발견되었다.

애플은 앱 내부에서 웹뷰를 통해 외부 콘텐츠를 로드할 때, 해당 콘텐츠가 애플의 가이드라인에 맞지 않거나 제한된 콘텐츠를 포함할 경우 앱의 연령 등급을 높이도록 요구한다. 특히, 유튜브와 같은 외부 사이트를 웹뷰로 직접 띄우는 경우, 예상치 못한 콘텐츠 노출 가능성 때문에 앱의 최소 연령 등급을 12세 이상으로 높이라는 메시지가 전달되었다.

이러한 요구 사항은 앱스토어의 사용자 보호 정책에 따른 것이었지만, 내 앱의 주요 기능에 큰 영향을 미쳤다. 연령 등급이 높아지면 타겟 사용자층이 제한되고, 앱의 접근성이 떨어질 수 있기 때문에 이는 큰 문제로 다가왔다.

해결 방법: 스킴을 이용한 외부 앱 리디렉션

리젝 사유를 분석한 결과, 웹뷰를 사용하여 외부 콘텐츠를 로드하는 방식이 문제의 핵심임을 알게 되었다. 이를 해결하기 위해 나는 웹뷰 대신 URL 스킴을 활용하여 유튜브 앱이나 사파리로 직접 리디렉션하는 방법을 도입했다.

구체적인 개선 과정

  1. 웹뷰 제거: 앱 내에서 유튜브 링크를 웹뷰로 로드하는 코드를 제거했다. 이는 애플의 가이드라인에 어긋나는 웹뷰 사용을 피하기 위함이었다.

  2. URL 스킴 적용: 사용자가 유튜브 링크를 클릭하면, 앱은 유튜브 앱이 설치되어 있는지 확인한 후, 유튜브 앱으로 직접 연결하거나 사파리 브라우저를 통해 링크를 여는 방식으로 변경했다. 이를 위해 UIApplication.shared.open 메서드를 사용했다.

    @objc func openYouTubeLink() {
        guard let recipe = recipe, let youtubeLink = recipe.youtubeLink, let url = URL(string: youtubeLink) else {
            print("유효한 링크가 없습니다.")
            return
        }
    
        // 유튜브 링크인지 확인 (youtube.com 혹은 youtu.be가 포함되어 있는지 체크)
        let lowercasedLink = youtubeLink.lowercased()
        let isYouTubeLink = lowercasedLink.contains("youtube.com") || lowercasedLink.contains("youtu.be")
    
        if isYouTubeLink {
            // 유튜브 앱 스킴을 사용하여 유튜브 앱으로 열 수 있는지 확인
            let convertedLink = youtubeLink
                .replacingOccurrences(of: "https://", with: "")
                .replacingOccurrences(of: "http://", with: "")
            if let youtubeAppURL = URL(string: "youtube://\(convertedLink)"), UIApplication.shared.canOpenURL(youtubeAppURL) {
                // 유튜브 앱으로 열기
                UIApplication.shared.open(youtubeAppURL, options: [:], completionHandler: nil)
            } else {
                // 유튜브 앱이 없으므로 사파리(브라우저)로 열기
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            }
        } else {
            // 유튜브 링크가 아닐 경우, 바로 브라우저로 열기
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }
    }
  3. 테스트 및 검토: 변경된 기능이 정상적으로 동작하는지 여러 번 테스트했다. 유튜브 앱과 사파리에서 링크가 올바르게 열리는지 확인했으며, 웹뷰를 통한 로드가 제거되었는지 점검했다.

  4. 재심사 제출: 수정된 앱을 다시 애플에 제출했다. 이번에는 웹뷰를 사용하지 않기 때문에 이전과 같은 연령 등급 문제 없이 심사를 통과할 수 있을 것으로 기대했다.

결과 및 느낀 점

수정된 앱은 애플의 심사를 성공적으로 통과했다. 웹뷰 대신 외부 앱으로의 리디렉션을 통해 애플의 가이드라인을 준수할 수 있었기 때문이다. 이번 경험을 통해 얻은 교훈은 다음과 같다.

  • 가이드라인 철저 준수: 애플의 심사 가이드라인을 철저히 이해하고 준수하는 것이 중요하다. 작은 부분에서도 심사에 영향을 줄 수 있으므로 세심한 주의가 필요하다.
  • 유연한 문제 해결: 문제 발생 시 유연하게 대처하고, 대안을 모색하는 자세가 필요하다. 웹뷰 대신 URL 스킴을 사용하는 등 창의적인 해결책을 통해 문제를 극복할 수 있었다.
  • 철저한 테스트: 변경된 기능이 의도대로 동작하는지 충분히 테스트하는 것이 중요하다. 이는 재심사 과정에서 발생할 수 있는 추가적인 문제를 예방하는 데 도움이 된다.

앱스토어 배포 과정은 쉽지 않지만, 이번 리젝 경험을 통해 더욱 견고한 앱을 개발할 수 있는 기회로 삼았다. 앞으로도 애플의 가이드라인을 준수하며 사용자들에게 더욱 나은 경험을 제공하는 앱을 만들어 나가고자 한다.

애플 심사 리젝을 경험하며 얻은 교훈

앱스토어 배포는 단순히 기능을 구현하는 것을 넘어, 다양한 규제와 가이드라인을 준수해야 하는 복잡한 과정이다. 이번 리젝 경험을 통해 배운 점을 정리하면 다음과 같다.

  1. 심사 가이드라인 숙지: 애플의 최신 심사 가이드라인을 지속적으로 확인하고, 변경 사항에 맞춰 앱을 업데이트하는 것이 중요하다.

  2. 사용자 경험 최적화: 외부 앱으로의 리디렉션을 통해 사용자 경험을 최적화하면서도, 규정을 준수할 수 있는 방법을 찾는 것이 필요하다.

  3. 문제 해결 능력 강화: 예상치 못한 문제에 직면했을 때, 신속하고 효과적으로 대처할 수 있는 능력을 키우는 것이 중요하다.

마무리

애플 심사 과정을 통과하는 것은 쉽지 않지만, 철저한 준비와 문제 해결 능력을 통해 극복할 수 있다. 나의 애플 심사 리젝 경험이 다른 개발자들에게도 도움이 되기를 바라며, 앞으로도 지속적인 학습과 개선을 통해 더 나은 앱을 만들어 나가고자 한다.

0개의 댓글