Conversation
…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
donny-son
left a comment
There was a problem hiding this comment.
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
.onInAppPurchaseCompletionis much cleaner than manual purchase state management- Removed the manual
isPurchasing/errorMessagestate since StoreKit handles this internally - No more need for
scenePhaseobservation 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! 🚀
donny-son
left a comment
There was a problem hiding this comment.
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 리젝션 해결을 위한 적절한 수정입니다. 위 고려사항들 검토 후 머지해도 좋을 것 같습니다! 👍
donny-son
left a comment
There was a problem hiding this comment.
Code Review 🥟
깔끔한 수정입니다! App Store 리젝션 이슈를 잘 해결했네요.
✅ 좋은 점
PaywallView 단순화
- 139줄의 커스텀 paywall 코드를 Apple의
SubscriptionStoreView로 교체 - 가이드라인 3.1.2 준수를 시스템이 자동으로 처리
- 에러 핸들링, 로딩 상태 등 보일러플레이트 제거
.storeButton(.visible, for: .restorePurchases)로 복원 버튼 자동 제공
Watch Icon
- 검정 → 다크 그레이 (#2C2C2E) 변경으로 원형 아이콘 형태 가시성 확보
📝 확인 사항
- 테스트: StoreKit Configuration 또는 TestFlight에서 SubscriptionStoreView가 구독 가격/기간을 올바르게 표시하는지 확인 필요
- UI 일관성: 기존 커스텀 UI와 SubscriptionStoreView의 디자인 차이가 앱 전체 톤과 맞는지 체크
LGTM! 🚀
…al links
https://claude.ai/code/session_011hgrS3LLg6Sc5jC45Y7eK9