Răsfoiți Sursa

Improve Mac App Store compliance for privacy, metadata, and disclosures.

Add a privacy manifest and plist keys, align paywall and privacy policy copy with actual features, and stop spoofing Safari in the Reddit WebView.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 3 săptămâni în urmă
părinte
comite
97948a3359

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

@@ -257,7 +257,9 @@
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_KEY_CFBundleDisplayName = "App AI for Reddit";
 				INFOPLIST_KEY_CFBundleName = "App AI for Reddit";
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
+				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
+				INFOPLIST_KEY_NSHumanReadableCopyright = "© 2026 App AI for Reddit";
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
@@ -267,7 +269,6 @@
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = "com.app-for-reddit";
 				PRODUCT_NAME = "App AI for Reddit";
-				REGISTER_APP_GROUPS = YES;
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;
 				SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
@@ -291,7 +292,9 @@
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_KEY_CFBundleDisplayName = "App AI for Reddit";
 				INFOPLIST_KEY_CFBundleName = "App AI for Reddit";
-				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
+				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
+				INFOPLIST_KEY_NSHumanReadableCopyright = "© 2026 App AI for Reddit";
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
@@ -301,7 +304,6 @@
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = "com.app-for-reddit";
 				PRODUCT_NAME = "App AI for Reddit";
-				REGISTER_APP_GROUPS = YES;
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;
 				SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;

+ 1 - 1
App AI for Reddit/Managers/RedditWebViewManager.swift

@@ -61,7 +61,7 @@ enum RedditWebViewManager {
         let webView = WKWebView(frame: .zero, configuration: makeConfiguration())
         webView.allowsBackForwardNavigationGestures = true
         webView.allowsMagnification = true
-        webView.customUserAgent = RedditWebAuthHelper.safariUserAgent
+        // Use the default WKWebView user agent instead of spoofing Safari.
         let isDarkMode = AppearanceManager.shared.isDarkMode
         applyTheme(to: webView, isDarkMode: isDarkMode)
         return webView

+ 23 - 0
App AI for Reddit/PrivacyInfo.xcprivacy

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>NSPrivacyTracking</key>
+	<false/>
+	<key>NSPrivacyTrackingDomains</key>
+	<array/>
+	<key>NSPrivacyCollectedDataTypes</key>
+	<array/>
+	<key>NSPrivacyAccessedAPITypes</key>
+	<array>
+		<dict>
+			<key>NSPrivacyAccessedAPIType</key>
+			<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
+			<key>NSPrivacyAccessedAPITypeReasons</key>
+			<array>
+				<string>CA92.1</string>
+			</array>
+		</dict>
+	</array>
+</dict>
+</plist>

+ 0 - 3
App AI for Reddit/Utilities/RedditWebAuthHelper.swift

@@ -4,9 +4,6 @@ enum RedditWebAuthHelper {
     static let redditHomeURL = URL(string: "https://www.reddit.com")!
     static let redditLoginURL = URL(string: "https://www.reddit.com/login/")!
 
-    static let safariUserAgent =
-        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Safari/605.1.15"
-
     private static let oauthHosts = [
         "accounts.google.com",
         "appleid.apple.com",

+ 2 - 2
App AI for Reddit/paywall.json

@@ -7,7 +7,7 @@
     "Post Generator & Title Optimizer",
     "Comment Writer with smart replies",
     "Custom AI Prompts",
-    "Post Analytics",
+    "Embedded Reddit Browser",
     "Priority support"
   ],
   "trustItems": [
@@ -137,7 +137,7 @@
   "sidebar": {
     "unlockTitle": "Upgrade to Premium",
     "proTitle": "App AI for Reddit Premium",
-    "unlockDescription": "Unlock unlimited AI generations and advanced analytics",
+    "unlockDescription": "Unlock unlimited AI generations and embedded Reddit browsing",
     "proDescription": "You have unlimited AI generations and all premium features.",
     "upgradeAction": "Upgrade Now",
     "manageSubscriptionAction": "Manage Subscription",

+ 6 - 5
website/privacy/index.html

@@ -128,7 +128,7 @@
         <h2>1. Overview</h2>
         <p>App AI for Reddit provides AI tools to help you draft Reddit posts, optimize titles, and write comments. We do not sell your personal information.</p>
         <div class="callout">
-          Most data stays on your Mac. When you use live AI features as a premium subscriber, the text you submit is sent to OpenAI to generate a response.
+          Most data stays on your Mac. When you use live AI features, the text you submit is sent to OpenAI to generate a response.
         </div>
       </section>
 
@@ -162,7 +162,7 @@
         <p>The app uses information to:</p>
         <ul>
           <li>Provide Post Generator, Title Optimizer, and Comment Writer features</li>
-          <li>Send AI requests to OpenAI when you have premium access and trigger a generation</li>
+          <li>Send AI requests to OpenAI when you trigger a generation (premium subscribers, or up to 3 free trial generations)</li>
           <li>Verify premium subscription status through Apple</li>
           <li>Save AI History locally on your device</li>
           <li>Remember your in-app preferences</li>
@@ -172,10 +172,11 @@
 
       <section class="legal-section">
         <h2>4. AI Processing</h2>
-        <p>Premium subscribers can use live AI generation powered by OpenAI. When you submit a request, the relevant text from your input is transmitted to OpenAI to produce a response.</p>
+        <p>Live AI generation is powered by OpenAI. When you submit a request, the relevant text from your input is transmitted to OpenAI to produce a response.</p>
         <ul>
           <li>AI requests are sent only when you actively trigger a generation.</li>
-          <li>Without premium access, the app uses local sample responses instead of sending data to OpenAI.</li>
+          <li>Premium subscribers receive unlimited live AI generations.</li>
+          <li>Free users receive up to 3 live AI trial generations; after that, the app uses local sample responses instead of sending data to OpenAI.</li>
           <li>Generated responses may be saved in AI History on your Mac.</li>
         </ul>
         <p>Do not submit sensitive personal information, such as passwords, financial data, government IDs, or health information, into AI tools.</p>
@@ -204,7 +205,7 @@
         <h2>8. Sharing</h2>
         <p>We do not sell your personal information. Information may be shared only in these cases:</p>
         <ul>
-          <li><strong>OpenAI:</strong> AI inputs you submit as a premium subscriber when you generate content.</li>
+          <li><strong>OpenAI:</strong> AI inputs you submit when you trigger a live generation (premium or free trial).</li>
           <li><strong>Apple:</strong> Subscription verification through the Mac App Store.</li>
           <li><strong>Legal requirements:</strong> When required by law or to protect rights, safety, and security.</li>
         </ul>