App Store submission blockers: project config, auth, paywall, privacy - #4
Open
astrayama wants to merge 5 commits into
Open
App Store submission blockers: project config, auth, paywall, privacy#4astrayama wants to merge 5 commits into
astrayama wants to merge 5 commits into
Conversation
- Pin bundle ID to com.screenseiji.anicca in project.yml (source of truth) and regenerate the pbxproj so setup.sh no longer reverts hand-edits; carry DEVELOPMENT_TEAM, automatic signing, and a shared scheme - Add Sign in with Apple entitlements file (was missing entirely; ASAuthorization fails with error 1000 without it) - Add PrivacyInfo.xcprivacy (UserDefaults CA92.1; declares email, name, user ID, journal content, and emotional-state data, no tracking) - Info.plist: drop unused UIBackgroundModes (remote-notification, bluetooth-peripheral — Guideline 2.5.4), drop bogus NSUserNotificationsUsageDescription, source version/build from MARKETING_VERSION/CURRENT_PROJECT_VERSION, clean empty UILaunchScreen keys - Flatten alpha channel out of the 1024px app icon (ITMS-90717) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Delete re-auth for Apple users no longer depends on a nonce captured during a same-process sign-in: the ASAuthorizationController delegate now serves only the delete flow and returns the identity token directly. Previously reauthenticateWithApple stored its nonce in deleteAccountNonce while the delegate guarded on appleNonce (nil after fresh launch), so Apple users could never delete their account (Guideline 5.1.1(v)) - Cancelling the re-auth sheet now resumes the pending continuation instead of leaking it and hanging the delete task forever - Sign in with Apple runs once through SignInWithAppleButton's own flow; the button previously discarded its result and launched a second ASAuthorizationController, showing the Apple sheet twice - Provider detection in restoreSession compared AnyJSON values with a cast that always fails, classifying every restored session as email — which routed Apple/Google users to the password prompt in the delete flow; read .stringValue instead - Drop unused response binding in deleteAccount Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Paywall footer now states each loaded subscription's title, length, and price plus Apple's auto-renewal terms (App Review subscription requirements) - Prices come only from loaded StoreKit products: when offerings fail to load the paywall shows a retry state instead of hardcoded fallback prices with buy buttons that cannot succeed - Reminders are no longer Pro-gated in Settings; onboarding already schedules them for free users, who previously could not turn them off (REMIND-01). Feature table updated to match - Hidden 5-tap developer_override_pro unlock now compiles out of Release (Guideline 2.3.1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Secrets.xcconfig.example now contains placeholders only. The previous file shipped real Supabase, Gemini, and RevenueCat values; those keys are in git history and must be rotated - Replace all 21 release print() calls (auth/profile/Gemini error bodies) with debugLog(), which compiles out of Release - EntitlementManager/UserProfile honor developer_override_pro only in DEBUG builds - SupabaseSetup.md: bundle ID corrected, explicit WITH CHECK on RLS policies, and a deploy + verify section for the delete-account edge function (undeployed function = automatic 5.1.1(v) rejection) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Phased, checkbox-driven checklist covering key rotation, Apple paperwork, backend switch-on, subscription setup, legal pages, first TestFlight, and listing/submission — everything left that needs Isa's accounts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
Everything code-side that blocked App Store submission, fixed in one reviewable branch. Companion doc: docs/app-store-launch-guide.md — the step-by-step launch checklist for the account-side work (key rotation, App Store Connect, Supabase, RevenueCat).
Fixes
Release engineering
project.ymlis now the single source of truth and matches the committed pbxproj: bundle ID pinned tocom.screenseiji.anicca, teamP788RWL6YN, automatic signing, shared scheme committed. Running./setup.shno longer silently reverts hand-edits.Anicca/Anicca.entitlementswith Sign In with Apple (was missing entirely — runtime error 1000, unprovisionable).Anicca/Resources/PrivacyInfo.xcprivacy(UserDefaults CA92.1; declares email, name, user ID, journal content, emotional-state data; no tracking).UIBackgroundModes(remote-notification,bluetooth-peripheral— Guideline 2.5.4), removed bogusNSUserNotificationsUsageDescription, version/build now come fromMARKETING_VERSION/CURRENT_PROJECT_VERSION(were hardcoded, which blocks every TestFlight upload after the first).Delete account / auth (Guideline 5.1.1(v))
reauthenticateWithApplestored its nonce indeleteAccountNoncewhile the delegate readappleNonce(nil after fresh launch), so Apple users could never delete their account.AnyJSONtoString(always fails), so every restored session was treated as email — routing Apple/Google users to a password prompt in the delete flow. Now reads.stringValue.SignInWithAppleButtonresult is now used instead of discarded and re-run through a secondASAuthorizationController.Paywall / monetization
developer_override_prounlock compiles out of Release (Guideline 2.3.1).Hygiene
Secrets.xcconfig.examplescrubbed to placeholders.print()calls (auth/profile/Gemini error bodies) replaced withdebugLog(), which compiles out of Release.SupabaseSetup.md: corrected bundle ID, explicitWITH CHECKon RLS policies, new deploy+verify section for thedelete-accountedge function.Verification
xcodegen generate+xcodebuild(iOS Simulator): build succeeded; the two always-failing-cast warnings in AuthService are gone; no new warnings introduced.com.screenseiji.anicca, 1.0.0 (1), no background modes,PrivacyInfo.xcprivacyembedded, icon 1024×1024 withhasAlpha: no, all three plistsplutil -lintclean.🤖 Generated with Claude Code