[object Object]

← back to Boomer Calculator

Correct App Store privacy submission guidance

450634435142c4cfd4cc4b4365a50b1d202123b2 · 2026-09-02 23:31:05 -0700 · Steve Abrams

Files touched

Diff

commit 450634435142c4cfd4cc4b4365a50b1d202123b2
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 2 23:31:05 2026 -0700

    Correct App Store privacy submission guidance
---
 APP_STORE_ASSETS_CHECKLIST.md |  7 +++++--
 APP_STORE_COPY_PASTE.txt      |  8 +++++---
 FINAL_STEPS_WHEN_READY.md     |  4 +++-
 FINAL_SUBMISSION_GUIDE.md     |  5 +++--
 verification/e2e-proof.json   | 45 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 61 insertions(+), 8 deletions(-)

diff --git a/APP_STORE_ASSETS_CHECKLIST.md b/APP_STORE_ASSETS_CHECKLIST.md
index 2ab6299..eaa87c9 100644
--- a/APP_STORE_ASSETS_CHECKLIST.md
+++ b/APP_STORE_ASSETS_CHECKLIST.md
@@ -122,9 +122,12 @@ For questions, contact: [your-email@example.com]
 ## 🔒 Privacy Information (Nutrition Label)
 
 For Boomer Calc, select:
-- [ ] **Data Not Collected**: This app does not collect any data
+- [ ] **Data is collected**
+- [ ] **Identifiers → Device ID** — Third-Party Advertising; used for tracking
+- [ ] **Usage Data → Product Interaction** — Third-Party Advertising; used for
+      tracking
 
-If your app doesn't collect data, that's it! Very simple.
+These answers match the native AdMob SDK and App Tracking Transparency prompt.
 
 ## 👤 App Review Information
 
diff --git a/APP_STORE_COPY_PASTE.txt b/APP_STORE_COPY_PASTE.txt
index 72b0c67..ec830cc 100644
--- a/APP_STORE_COPY_PASTE.txt
+++ b/APP_STORE_COPY_PASTE.txt
@@ -206,7 +206,8 @@ QUICK CHECKLIST BEFORE SUBMITTING
 □ Screenshots uploaded (staged in store-assets/screenshots/ — see below)
 □ Build uploaded and selected
 □ Age rating completed (4+)
-□ Privacy information set to "Data Not Collected" (after SDK check)
+□ Privacy information declares Identifiers → Device ID and Usage Data →
+  Product Interaction for Third-Party Advertising, with tracking = Yes
 □ Export compliance answered (No)
 □ Contact information filled out
 □ All required fields have green checkmarks (✓)
@@ -246,7 +247,8 @@ STEP-BY-STEP SUBMISSION ORDER
 2. Open the existing Boomer Calc app record (bundle com.boomercalc67.app)
 3. "App Information" tab — URLs + Category = Entertainment
 4. "Pricing and Availability" — Free
-5. "App Privacy" — Data Not Collected (after SDK check)
+5. "App Privacy" — declare Device ID + Product Interaction for Third-Party
+   Advertising, with tracking = Yes (matches AdMob + ATT)
 6. Complete Age Rating questionnaire (4+)
 7. Version 1.0.0 — paste Description, Keywords, upload the 2 screenshots
 8. Add the uploaded build
@@ -275,6 +277,6 @@ STATUS
 
 Copy + screenshots are prepped. Remaining before submit (all Steve's actions):
   • verify the 3 URLs return 200
-  • confirm no analytics/ads SDK (for the "Data Not Collected" claim)
+  • confirm the App Privacy answers match the native AdMob + ATT implementation
   • upload a build to the Boomer Calc ASC record
   • paste the fields above (esp. the Reviewer Note) + upload screenshots + Submit
diff --git a/FINAL_STEPS_WHEN_READY.md b/FINAL_STEPS_WHEN_READY.md
index d0cc45d..261f968 100644
--- a/FINAL_STEPS_WHEN_READY.md
+++ b/FINAL_STEPS_WHEN_READY.md
@@ -95,7 +95,9 @@ Go to: **https://appstoreconnect.apple.com**
 
 4. **Pricing**: Free
 
-5. **App Privacy**: Data Not Collected
+5. **App Privacy**: Data is collected. Declare **Identifiers → Device ID** and
+   **Usage Data → Product Interaction** for **Third-Party Advertising**, with
+   **Used for tracking = Yes** (matches the native AdMob + ATT implementation).
 
 6. **Version Information** (under your version 1.0.0):
    - Description: (copy from APP_STORE_COPY_PASTE.txt)
diff --git a/FINAL_SUBMISSION_GUIDE.md b/FINAL_SUBMISSION_GUIDE.md
index e99a037..389bfa7 100644
--- a/FINAL_SUBMISSION_GUIDE.md
+++ b/FINAL_SUBMISSION_GUIDE.md
@@ -100,8 +100,9 @@ Perfect for quick calculations without unnecessary complexity. Just a calculator
 
 #### App Privacy
 
-Select: **"Data Not Collected"**
-(Since the app doesn't collect any data)
+Select: **Data is collected**. Declare **Identifiers → Device ID** and
+**Usage Data → Product Interaction** for **Third-Party Advertising**, with
+**Used for tracking = Yes** (matches the native AdMob + ATT implementation).
 
 #### Category
 
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
new file mode 100644
index 0000000..55952e5
--- /dev/null
+++ b/verification/e2e-proof.json
@@ -0,0 +1,45 @@
+{
+  "intent": "Remove stale App Store privacy instructions that contradicted the native AdMob and ATT implementation while preserving the authenticated ASC submission gate.",
+  "risk_tier": "R0",
+  "environment": "local workspace /Users/macstudio3/Projects/boomer-calculator",
+  "baseline_commit": "9be1682",
+  "timestamp_utc": "2026-09-03T06:28:30Z",
+  "precondition": {
+    "verdict": "PASS",
+    "evidence": "Four local submission documents instructed Data Not Collected while components/Ads.tsx requests ATT and initializes a real, non-test AdMob unit."
+  },
+  "checks": [
+    {
+      "name": "Patch formatting",
+      "command": "git diff --check",
+      "verdict": "PASS",
+      "evidence": "No whitespace errors."
+    },
+    {
+      "name": "Stale privacy guidance removed",
+      "command": "rg -n -i 'data not collected|does not collect any data|no analytics/ads SDK' --glob '*.md' --glob '*.txt' .",
+      "verdict": "PASS",
+      "evidence": "Only the intentional warning 'NOT Data Not Collected' remains."
+    },
+    {
+      "name": "Correct privacy declaration present",
+      "command": "rg -n 'Data is collected|Device ID|Product Interaction|Third-Party Advertising|Used for tracking' APP_STORE_ASSETS_CHECKLIST.md APP_STORE_COPY_PASTE.txt FINAL_STEPS_WHEN_READY.md FINAL_SUBMISSION_GUIDE.md",
+      "verdict": "PASS",
+      "evidence": "All four submission documents now declare Device ID and Product Interaction for third-party advertising and tracking."
+    },
+    {
+      "name": "Implementation boundary matches documentation",
+      "command": "plutil -lint ios/App/App/Info.plist && rg -n 'requestTrackingAuthorization|isTesting: false' components/Ads.tsx",
+      "verdict": "PASS",
+      "evidence": "Info.plist parses; native code requests ATT and serves the real AdMob unit outside test mode."
+    },
+    {
+      "name": "App Store Connect privacy edit and resubmission",
+      "verdict": "SKIP",
+      "reason": "Authenticated external metadata and publish actions require Steve's explicit approval. Build 7 remains attached and the ticket remains blocked at this gate."
+    }
+  ],
+  "side_effects": "Local documentation and this proof artifact only. No Apple-account mutation, submission, upload, remote push, or spend.",
+  "cleanup_or_rollback": "No test state created. Local commit can be reverted normally if needed.",
+  "overall_verdict": "BLOCKED"
+}

← 9be1682 Boomer Calc: wire REAL AdMob ids (app ~7368317108, banner /7  ·  back to Boomer Calculator  ·  Record Boomer Calc App Review submission proof 94479b6 →