Skip to content

fix: resolve App Store rejections for Watch icon and subscription leg…#13

Merged
donny-son merged 1 commit intomainfrom
claude/fix-appstore-rejections-jDoqp
Mar 7, 2026
Merged

fix: resolve App Store rejections for Watch icon and subscription leg…#13
donny-son merged 1 commit intomainfrom
claude/fix-appstore-rejections-jDoqp

Conversation

@donny-son
Copy link
Copy Markdown
Contributor

…al links

  • Watch icon: change background from black to dark gray (#2C2C2E) so the circular icon shape is visible on Apple Watch (Guideline 4)
  • PaywallView: replace custom paywall with Apple's SubscriptionStoreView which properly displays subscription title, price, duration, and functional links to Terms of Use and Privacy Policy (Guideline 3.1.2c)

https://claude.ai/code/session_011hgrS3LLg6Sc5jC45Y7eK9

…al links

- Watch icon: change background from black to dark gray (#2C2C2E) so the
  circular icon shape is visible on Apple Watch (Guideline 4)
- PaywallView: replace custom paywall with Apple's SubscriptionStoreView
  which properly displays subscription title, price, duration, and
  functional links to Terms of Use and Privacy Policy (Guideline 3.1.2c)

https://claude.ai/code/session_011hgrS3LLg6Sc5jC45Y7eK9
Copy link
Copy Markdown
Contributor Author

@donny-son donny-son left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: App Store Compliance Fixes 👍

Great refactor! The switch to SubscriptionStoreView is the right approach.

What's Good

Architecture

  • Using Apple's native SubscriptionStoreView(groupID:) — this automatically handles guideline 3.1.2 compliance (price prominence, trial disclosure, etc.)
  • Removed ~120 lines of custom pricing UI that was error-prone from a compliance perspective
  • .storeButton(.visible, for: .restorePurchases) ensures the restore button is always visible

Cleaner Code

  • .onInAppPurchaseCompletion is much cleaner than manual purchase state management
  • Removed the manual isPurchasing / errorMessage state since StoreKit handles this internally
  • No more need for scenePhase observation for status updates

Compliance

  • Legal links retained with clearer labeling ("Terms of Use (EULA)")
  • The subscription title, price, length, and intro offer display are now Apple's responsibility

Minor Notes

  • The Watch icon update looks good (binary diff) — make sure it meets the 1024×1024 requirement without alpha/transparency issues

LGTM! 🚀

Copy link
Copy Markdown
Contributor Author

@donny-son donny-son left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: PaywallView Refactor

좋은 리팩토링입니다! 🎯

✅ 긍정적인 변경사항

1. SubscriptionStoreView 채택
Apple의 네이티브 SubscriptionStoreView를 사용하는 것은 App Store 가이드라인 3.1.2 준수를 위한 올바른 접근입니다. 이렇게 하면:

  • 가격 표시가 Apple 표준을 자동으로 따름
  • 평가판/인트로 가격 표시가 가이드라인에 맞게 처리됨
  • 향후 App Store 정책 변경에도 자동 대응

2. 코드 단순화

  • ~150줄의 커스텀 구매 로직 제거
  • 에러 처리가 Apple의 built-in 처리로 대체됨
  • isPurchasing, errorMessage 등 상태 관리 불필요

3. 필수 요소 유지

  • Legal links (Terms of Use, Privacy Policy) 유지 ✓
  • Restore purchases 버튼 유지 (.storeButton(.visible, for: .restorePurchases)) ✓

💡 고려사항

1. 커스터마이징 제한
SubscriptionStoreView는 Apple 디자인을 따르므로, 기존 커스텀 UI의 브랜딩이 일부 손실될 수 있습니다. 이것이 의도된 트레이드오프인지 확인해주세요.

2. 에러 핸들링
커스텀 에러 메시지가 제거되었습니다. onInAppPurchaseCompletion에서 실패 케이스 처리가 필요할 수 있습니다:

.onInAppPurchaseCompletion { _, result in
    switch result {
    case .success(.success(_)):
        await subscriptionManager.updateSubscriptionStatus()
        dismiss()
    case .success(.userCancelled):
        break // 사용자 취소
    case .success(.pending):
        // 보류 중 상태 처리
        break
    case .failure(let error):
        // 에러 로깅
        break
    }
}

3. scenePhase 감지 제거
기존에는 앱이 active 상태로 돌아올 때 구독 상태를 업데이트했는데, 이 로직이 제거되었습니다. SubscriptionStoreView가 이를 자동으로 처리하는지 확인이 필요합니다.

Watch Icon

바이너리 변경이라 코드 리뷰 범위 밖이지만, App Store 요구사항(원형, 투명 배경 없음 등)을 충족하는지 확인해주세요.


전반적으로 App Store 리젝션 해결을 위한 적절한 수정입니다. 위 고려사항들 검토 후 머지해도 좋을 것 같습니다! 👍

Copy link
Copy Markdown
Contributor Author

@donny-son donny-son left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review 🥟

깔끔한 수정입니다! App Store 리젝션 이슈를 잘 해결했네요.

✅ 좋은 점

PaywallView 단순화

  • 139줄의 커스텀 paywall 코드를 Apple의 SubscriptionStoreView로 교체
  • 가이드라인 3.1.2 준수를 시스템이 자동으로 처리
  • 에러 핸들링, 로딩 상태 등 보일러플레이트 제거
  • .storeButton(.visible, for: .restorePurchases)로 복원 버튼 자동 제공

Watch Icon

  • 검정 → 다크 그레이 (#2C2C2E) 변경으로 원형 아이콘 형태 가시성 확보

📝 확인 사항

  1. 테스트: StoreKit Configuration 또는 TestFlight에서 SubscriptionStoreView가 구독 가격/기간을 올바르게 표시하는지 확인 필요
  2. UI 일관성: 기존 커스텀 UI와 SubscriptionStoreView의 디자인 차이가 앱 전체 톤과 맞는지 체크

LGTM! 🚀

@donny-son donny-son merged commit 81c2ffb into main Mar 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants