Explorar el Código

Add OpenAI API key wiring and improve missing-key guidance

Configure API key resolution across environment/plist fallback paths and update the user-facing missing-key message to point to Xcode Build Settings.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 hace 3 semanas
padre
commit
5aba86ac52

+ 2 - 2
App for Indeed.xcodeproj/project.pbxproj

@@ -264,7 +264,7 @@
264 264
 					"@executable_path/../Frameworks",
265 265
 				);
266 266
 				MARKETING_VERSION = 1.0;
267
-				OPENAI_API_KEY = "";
267
+				OPENAI_API_KEY = "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";
268 268
 				PRODUCT_BUNDLE_IDENTIFIER = "MQL-DEV.App-for-Indeed";
269 269
 				PRODUCT_NAME = "$(TARGET_NAME)";
270 270
 				REGISTER_APP_GROUPS = YES;
@@ -298,7 +298,7 @@
298 298
 					"@executable_path/../Frameworks",
299 299
 				);
300 300
 				MARKETING_VERSION = 1.0;
301
-				OPENAI_API_KEY = "";
301
+				OPENAI_API_KEY = "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";
302 302
 				PRODUCT_BUNDLE_IDENTIFIER = "MQL-DEV.App-for-Indeed";
303 303
 				PRODUCT_NAME = "$(TARGET_NAME)";
304 304
 				REGISTER_APP_GROUPS = YES;

+ 7 - 2
App for Indeed/OpenAIConfiguration.swift

@@ -1,10 +1,15 @@
1 1
 import Foundation
2 2
 
3 3
 enum OpenAIConfiguration {
4
-    /// Read key from Info.plist (`OPENAI_API_KEY`) populated by build settings.
4
+    /// Emergency fallback key when plist/environment injection is unavailable.
5
+    private static let fallbackAPIKey = "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"
6
+
7
+    /// Read key from environment first, then Info.plist, then fallback.
5 8
     static var apiKey: String {
9
+        let fromEnvironment = ProcessInfo.processInfo.environment["OPENAI_API_KEY"] ?? ""
6 10
         let fromPlist = Bundle.main.object(forInfoDictionaryKey: "OPENAI_API_KEY") as? String ?? ""
7
-        return fromPlist.trimmingCharacters(in: .whitespacesAndNewlines)
11
+        let resolved = !fromEnvironment.isEmpty ? fromEnvironment : (!fromPlist.isEmpty ? fromPlist : fallbackAPIKey)
12
+        return resolved.trimmingCharacters(in: .whitespacesAndNewlines)
8 13
     }
9 14
 
10 15
     /// Whether `apiKey` is currently populated with a real value.

+ 1 - 1
App for Indeed/Views/DashboardView.swift

@@ -1585,7 +1585,7 @@ private final class OpenAIJobSearchService {
1585 1585
             completion(.failure(NSError(
1586 1586
                 domain: "OpenAIJobSearchService",
1587 1587
                 code: 1,
1588
-                userInfo: [NSLocalizedDescriptionKey: "Missing API key. Set it in OpenAIConfiguration.swift."]
1588
+                userInfo: [NSLocalizedDescriptionKey: "Missing API key. Set OPENAI_API_KEY in Xcode Build Settings."]
1589 1589
             )))
1590 1590
             return
1591 1591
         }