Przeglądaj źródła

Ignore App Store Connect assets and update Xcode/StoreKit project settings.

Stop tracking App Store Connect questionnaires and keep the local appsconnect tooling (API credentials, English listing metadata, and upload script) out of git so secrets and store copy stay on the machine. Also set the development team for signing, refresh the shared scheme format, and lower StoreKit Configuration test prices for the lifetime, weekly, and yearly products.

Co-authored-by: Cursor <cursoragent@cursor.com>
Uzair Tahir 1 tydzień temu
rodzic
commit
4b15a5fdda

+ 5 - 0
.gitignore

@@ -12,3 +12,8 @@ xcuserdata/
 # Swift Package Manager
 .build/
 .swiftpm/
+
+# App Store Connect (credentials, listing metadata, upload tooling, questionnaires)
+appsconnect/
+AppStoreConnect/
+*.p8

+ 4 - 2
App AI for Reddit.xcodeproj/project.pbxproj

@@ -252,6 +252,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				COMBINE_HIDPI_IMAGES = YES;
 				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = GYWNF5WK4J;
 				ENABLE_APP_SANDBOX = YES;
 				ENABLE_USER_SELECTED_FILES = readonly;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -260,8 +261,8 @@
 				INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "© 2026 App AI for Reddit";
-				INFOPLIST_KEY_NSPrivacyPolicyURL = "https://sites.google.com/view/appforreddit/privacy-policy";
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
+				INFOPLIST_KEY_NSPrivacyPolicyURL = "https://sites.google.com/view/appforreddit/privacy-policy";
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/../Frameworks",
@@ -288,6 +289,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				COMBINE_HIDPI_IMAGES = YES;
 				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_TEAM = GYWNF5WK4J;
 				ENABLE_APP_SANDBOX = YES;
 				ENABLE_USER_SELECTED_FILES = readonly;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -296,8 +298,8 @@
 				INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "© 2026 App AI for Reddit";
-				INFOPLIST_KEY_NSPrivacyPolicyURL = "https://sites.google.com/view/appforreddit/privacy-policy";
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
+				INFOPLIST_KEY_NSPrivacyPolicyURL = "https://sites.google.com/view/appforreddit/privacy-policy";
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/../Frameworks",

+ 1 - 1
App AI for Reddit.xcodeproj/xcshareddata/xcschemes/App AI for Reddit.xcscheme

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
    LastUpgradeVersion = "2650"
-   version = "1.7">
+   version = "1.8">
    <BuildAction
       parallelizeBuildables = "YES"
       buildImplicitDependencies = "YES"

+ 20 - 13
App AI for Reddit/Paywall.storekit

@@ -1,11 +1,21 @@
 {
+  "appPolicies" : {
+    "eula" : "",
+    "policies" : [
+      {
+        "locale" : "en_US",
+        "policyText" : "",
+        "policyURL" : ""
+      }
+    ]
+  },
   "identifier" : "Paywall",
   "nonRenewingSubscriptions" : [
 
   ],
   "products" : [
     {
-      "displayPrice" : "79.99",
+      "displayPrice" : "59.99",
       "familyShareable" : false,
       "internalID" : "6748291001",
       "localizations" : [
@@ -21,56 +31,53 @@
     }
   ],
   "settings" : {
+    "_askToBuyEnabled" : false,
+    "_billingGracePeriodEnabled" : false,
+    "_billingIssuesEnabled" : false,
+    "_disableDialogs" : false,
     "_failTransactionsEnabled" : false,
     "_locale" : "en_US",
+    "_renewalBillingIssuesEnabled" : false,
     "_storefront" : "USA",
     "_storeKitErrors" : [
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Load Products"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Purchase"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Verification"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "App Store Sync"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Subscription Status"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "App Transaction"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Manage Subscriptions Sheet"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Refund Request Sheet"
       },
       {
-        "current" : null,
         "enabled" : false,
         "name" : "Offer Code Redeem Sheet"
       }
-    ]
+    ],
+    "_timeRate" : 0
   },
   "subscriptionGroups" : [
     {
@@ -87,7 +94,7 @@
           "codeOffers" : [
 
           ],
-          "displayPrice" : "7.99",
+          "displayPrice" : "4.99",
           "familyShareable" : false,
           "groupNumber" : 1,
           "internalID" : "6748291002",
@@ -115,7 +122,7 @@
           "codeOffers" : [
 
           ],
-          "displayPrice" : "49.99",
+          "displayPrice" : "34.99",
           "familyShareable" : false,
           "groupNumber" : 2,
           "internalID" : "6748291003",

+ 0 - 35
AppStoreConnect/AgeRatingQuestionnaire.md

@@ -1,35 +0,0 @@
-# App Store Connect — Age Rating Questionnaire
-
-This app embeds Reddit (user-generated content + unrestricted web access) and supports NSFW post drafting. **Underrating is a common rejection reason for Reddit-related apps.** Target rating: **17+**.
-
-Complete the questionnaire in **App Store Connect → App Information → Age Rating**.
-
-## Required overrides (answer honestly)
-
-| Content descriptor | Recommended answer | Reason |
-|--------------------|-------------------|--------|
-| **Unrestricted Web Access** | **Yes** | Premium users browse `reddit.com` in an embedded web view with full site navigation. |
-| **User-Generated Content** | **Yes** | Reddit posts, comments, and media are user-generated. AI tools also produce user-directed draft content. |
-| **Mature/Suggestive Themes** | **Frequent/Intense** or **Infrequent/Mild** (minimum: Infrequent/Mild) | Reddit includes mature communities; the app can tag drafts as NSFW. |
-| **Sexual Content or Nudity** | **Infrequent/Mild** or higher | Reddit may display sexual content; NSFW drafting is supported. |
-| **Profanity or Crude Humor** | **Infrequent/Mild** or **Frequent/Intense** | Common on Reddit. |
-| **Realistic Violence** | **Infrequent/Mild** | Possible via Reddit UGC. |
-| **Horror/Fear Themes** | **Infrequent/Mild** | Possible via Reddit UGC. |
-| **Alcohol, Tobacco, or Drug Use** | **Infrequent/Mild** | Possible via Reddit UGC. |
-| **Medical/Treatment Information** | **None** or **Infrequent/Mild** | Only if shown on Reddit threads users open. |
-| **Gambling and Contests** | **None** | App does not include gambling. |
-| **Simulated Gambling** | **None** | — |
-| **Cartoon or Fantasy Violence** | **None** or **Infrequent/Mild** | — |
-| **Guns or Other Weapons** | **None** or **Infrequent/Mild** | Possible via Reddit UGC. |
-
-## Expected outcome
-
-With **Unrestricted Web Access** and **User-Generated Content** enabled, Apple typically assigns **17+**.
-
-Do **not** submit with **4+**, **9+**, or **12+** unless Apple’s computed rating still lands at 17+ after your answers.
-
-## App Store metadata alignment
-
-- **Category:** Social Networking (matches `LSApplicationCategoryType` in the project).
-- **App description:** Mention that the app provides access to Reddit user-generated content and is intended for users **17 and older**.
-- **Screenshots:** Avoid NSFW or profane content in marketing assets even if the app can access such material in-product.

+ 0 - 65
AppStoreConnect/AppPrivacyQuestionnaire.md

@@ -1,65 +0,0 @@
-# App Store Connect — App Privacy Questionnaire
-
-Use these answers in **App Store Connect → App Privacy**. They must match `PrivacyInfo.xcprivacy` and the live app behavior.
-
-> **Do not select “Data Not Collected.”** The app collects user-entered text for AI features and shares it with OpenAI when live generation runs.
-
-## Summary
-
-| Question | Answer |
-|----------|--------|
-| Do you or your third-party partners collect data from this app? | **Yes** |
-| Is data used to track users? | **No** |
-| Is data linked to the user’s identity? | **No** |
-
-## Data type: Other User Content
-
-Covers text the user enters in Post Generator, Title Optimizer, and Comment Writer (topics, titles, drafts, subreddit names, post URLs, parent comments, tone preferences, NSFW/spoiler tags) and AI responses saved locally in AI History.
-
-### For each purpose, answer:
-
-| Field | Value |
-|-------|-------|
-| Data type | **Other User Content** |
-| Collected | **Yes** |
-| Linked to identity | **No** |
-| Used for tracking | **No** |
-| Purpose | **App Functionality** |
-
-### Third-party sharing (critical)
-
-When App Store Connect asks whether this data is shared with third parties:
-
-| Third party | Shared? | Why |
-|-------------|---------|-----|
-| **OpenAI** (`api.openai.com`) | **Yes** | Live AI generation sends the user’s prompt text to OpenAI’s API. Applies to premium users and free-trial generations (up to 3 total). |
-| Apple (StoreKit) | No for this data type | Subscription checks do not send AI inputs to Apple. |
-| Reddit | No for this data type | Embedded Reddit browsing is direct user ↔ Reddit interaction; the app does not extract or transmit Reddit browsing data to its own servers. |
-
-For **OpenAI** sharing details:
-
-- **Shared for App Functionality** — generating post titles, bodies, optimized titles, and comments.
-- **Not used for tracking or advertising.**
-- **Not linked to user identity** — prompts are not accompanied by name, email, Apple ID, or a persistent user identifier.
-
-## What is NOT collected by the app
-
-Declare **only** what applies. Do **not** add these unless behavior changes:
-
-- Contact Info, Identifiers, Location, Browsing History, Purchases, Diagnostics, Usage Data, Sensitive Info
-- No third-party analytics SDKs (Amplitude, Firebase, etc.)
-- No advertising networks
-
-## After uploading a build
-
-1. Open **App Privacy** in App Store Connect.
-2. Confirm the privacy manifest from the build populated **Other User Content**.
-3. If answers were previously set to “Data Not Collected,” reset and re-answer using this guide.
-4. Under **Other User Content → App Functionality**, enable **third-party sharing** and list processing by OpenAI.
-5. Save and verify the App Privacy label preview shows **Data Not Linked to You → Other User Content**.
-
-## Privacy policy URL
-
-Set in App Store Connect and in the app Info.plist:
-
-`https://sites.google.com/view/appforreddit/privacy-policy`

+ 0 - 18
AppStoreConnect/README.md

@@ -1,18 +0,0 @@
-# App Store Connect Submission Notes
-
-Reference guides for App Review compliance. Complete these in App Store Connect before submitting.
-
-| Guide | Purpose |
-|-------|---------|
-| [AppPrivacyQuestionnaire.md](AppPrivacyQuestionnaire.md) | Privacy nutrition labels — must declare **Other User Content** shared with **OpenAI** |
-| [AgeRatingQuestionnaire.md](AgeRatingQuestionnaire.md) | Age rating — target **17+** for Reddit UGC and unrestricted web access |
-
-## Checklist before submit
-
-- [ ] App Privacy is **not** set to “Data Not Collected”
-- [ ] **Other User Content** → App Functionality → shared with **OpenAI**
-- [ ] Age rating questionnaire includes **Unrestricted Web Access** and **User-Generated Content**
-- [ ] Computed age rating is **17+**
-- [ ] Privacy Policy URL matches the app: `https://sites.google.com/view/appforreddit/privacy-policy`
-- [ ] App category is **Social Networking**
-- [ ] `PrivacyInfo.xcprivacy` is included in the app bundle (auto-included from the target folder)