Просмотр исходного кода

Unify app branding as App for Indeed across bundle metadata and UI.

Set explicit CFBundle display/name keys and route sidebar, loading, and share labels through AppMarketingLinks.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 недель назад: 3
Родитель
Сommit
3c31e5926b

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

@@ -257,6 +257,8 @@
257 257
 				GENERATE_INFOPLIST_FILE = YES;
258 258
 				INFOPLIST_KEY_AppStoreAppID = "$(APP_STORE_APP_ID)";
259 259
 				INFOPLIST_KEY_AppStoreDeveloperID = "$(APP_STORE_DEVELOPER_ID)";
260
+				INFOPLIST_KEY_CFBundleDisplayName = "App for Indeed";
261
+				INFOPLIST_KEY_CFBundleName = "App for Indeed";
260 262
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
261 263
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
262 264
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
@@ -268,7 +270,7 @@
268 270
 				MARKETING_VERSION = 1.0;
269 271
 				OPENAI_API_KEY = "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";
270 272
 				PRODUCT_BUNDLE_IDENTIFIER = "MQL-DEV.App-for-Indeed";
271
-				PRODUCT_NAME = "$(TARGET_NAME)";
273
+				PRODUCT_NAME = "App for Indeed";
272 274
 				REGISTER_APP_GROUPS = YES;
273 275
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
274 276
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;
@@ -293,6 +295,8 @@
293 295
 				GENERATE_INFOPLIST_FILE = YES;
294 296
 				INFOPLIST_KEY_AppStoreAppID = "$(APP_STORE_APP_ID)";
295 297
 				INFOPLIST_KEY_AppStoreDeveloperID = "$(APP_STORE_DEVELOPER_ID)";
298
+				INFOPLIST_KEY_CFBundleDisplayName = "App for Indeed";
299
+				INFOPLIST_KEY_CFBundleName = "App for Indeed";
296 300
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
297 301
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
298 302
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
@@ -304,7 +308,7 @@
304 308
 				MARKETING_VERSION = 1.0;
305 309
 				OPENAI_API_KEY = "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";
306 310
 				PRODUCT_BUNDLE_IDENTIFIER = "MQL-DEV.App-for-Indeed";
307
-				PRODUCT_NAME = "$(TARGET_NAME)";
311
+				PRODUCT_NAME = "App for Indeed";
308 312
 				REGISTER_APP_GROUPS = YES;
309 313
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
310 314
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;

+ 1 - 1
App for Indeed/AppDelegate.swift

@@ -15,7 +15,7 @@ enum AppWindowConfiguration {
15 15
     static func apply(to window: NSWindow) {
16 16
         window.minSize = minimumContentSize
17 17
         window.isRestorable = false
18
-        window.title = "App for Indeed"
18
+        window.title = AppMarketingLinks.appDisplayName
19 19
         window.styleMask.insert(.fullSizeContentView)
20 20
         window.titlebarAppearsTransparent = true
21 21
         window.titleVisibility = .hidden

+ 4 - 1
App for Indeed/AppMarketingLinks.swift

@@ -8,6 +8,9 @@ import Foundation
8 8
 /// Mac App Store URLs for Settings → Share App / More Apps.
9 9
 /// Override via build settings: `INFOPLIST_KEY_AppStoreAppID` and `INFOPLIST_KEY_AppStoreDeveloperID`.
10 10
 enum AppMarketingLinks {
11
+    /// Canonical app name; keep in sync with `INFOPLIST_KEY_CFBundleDisplayName` in the Xcode target.
12
+    static let displayName = "App for Indeed"
13
+
11 14
     /// Numeric App Store app ID from App Store Connect (e.g. `1234567890`).
12 15
     static var macAppStoreURL: URL? {
13 16
         guard let appID = resolvedAppStoreAppID else { return nil }
@@ -29,7 +32,7 @@ enum AppMarketingLinks {
29 32
            !name.isEmpty {
30 33
             return name
31 34
         }
32
-        return "App for Indeed"
35
+        return displayName
33 36
     }
34 37
 
35 38
     static var shareText: String {

+ 1 - 1
App for Indeed/ProSubscriptions.storekit

@@ -31,7 +31,7 @@
31 31
       "localizations" : [
32 32
 
33 33
       ],
34
-      "name" : "Indeed AI Pro",
34
+      "name" : "App for Indeed Pro",
35 35
       "subscriptions" : [
36 36
         {
37 37
           "adHocOffers" : [

+ 1 - 1
App for Indeed/Services/AppLaunchCoordinator.swift

@@ -14,7 +14,7 @@ enum AppLaunchCoordinator {
14 14
 
15 15
     /// Subscription refresh and product catalog load before the dashboard appears.
16 16
     static func performStartup(update: StatusUpdate) async {
17
-        update("Starting App for Indeed…", 0.12)
17
+        update("Starting \(AppMarketingLinks.displayName)…", 0.12)
18 18
         try? await Task.sleep(nanoseconds: 180_000_000)
19 19
 
20 20
         update("Checking your Pro subscription…", 0.38)

+ 3 - 4
App for Indeed/Views/DashboardView.swift

@@ -2143,7 +2143,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
2143 2143
 
2144 2144
     private func installAssistantBubble(text: String, jobs: [JobListing]?, into host: NSView) {
2145 2145
         let avatar = makeAssistantAvatarView()
2146
-        let nameLabel = NSTextField(labelWithString: "AI Job Finder")
2146
+        let nameLabel = NSTextField(labelWithString: AppMarketingLinks.appDisplayName)
2147 2147
         nameLabel.font = .systemFont(ofSize: 11, weight: .semibold)
2148 2148
         nameLabel.textColor = Theme.secondaryText
2149 2149
         nameLabel.alignment = .left
@@ -2240,7 +2240,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
2240 2240
         let icon = NSImageView()
2241 2241
         icon.translatesAutoresizingMaskIntoConstraints = false
2242 2242
         icon.symbolConfiguration = NSImage.SymbolConfiguration(pointSize: 15, weight: .semibold)
2243
-        icon.image = NSImage(systemSymbolName: "sparkles", accessibilityDescription: "AI Job Finder")
2243
+        icon.image = NSImage(systemSymbolName: "sparkles", accessibilityDescription: AppMarketingLinks.appDisplayName)
2244 2244
         icon.contentTintColor = Theme.brandBlue
2245 2245
 
2246 2246
         view.addSubview(icon)
@@ -2362,12 +2362,11 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
2362 2362
             $0.removeFromSuperview()
2363 2363
         }
2364 2364
 
2365
-        let brand = NSTextField(labelWithString: "Indeed AI\nJob Finder")
2365
+        let brand = NSTextField(labelWithString: AppMarketingLinks.appDisplayName)
2366 2366
         brand.font = .systemFont(ofSize: 18, weight: .bold)
2367 2367
         brand.textColor = Theme.brandBlue
2368 2368
         brand.alignment = .left
2369 2369
         brand.maximumNumberOfLines = 2
2370
-        // Tight multiline height in the sidebar stack (zero width makes intrinsic height unreliable).
2371 2370
         brand.preferredMaxLayoutWidth = 194
2372 2371
         sidebar.addArrangedSubview(brand)
2373 2372
         sidebar.setCustomSpacing(10, after: brand)

+ 4 - 4
App for Indeed/Views/LoadingView.swift

@@ -27,13 +27,13 @@ final class LoadingView: NSView {
27 27
     private let iconView = NSImageView()
28 28
     private let aiBadgeHost = NSView()
29 29
     private let aiBadgeLabel = NSTextField(labelWithString: "AI-POWERED")
30
-    private let titleLabel = NSTextField(labelWithString: "App for Indeed")
30
+    private let titleLabel = NSTextField(labelWithString: AppMarketingLinks.displayName)
31 31
     private let subtitleLabel = NSTextField(labelWithString: "Find your perfect job with the power of AI.")
32 32
     private let statusLabel = NSTextField(labelWithString: "Starting up…")
33 33
     private let progressBar = LoadingProgressBarView()
34 34
     private let thinkingIndicator = ChatThinkingIndicatorView(
35 35
         compact: false,
36
-        accessibilityLabel: "Loading App for Indeed"
36
+        accessibilityLabel: "Loading \(AppMarketingLinks.displayName)"
37 37
     )
38 38
 
39 39
     override init(frame frameRect: NSRect) {
@@ -66,7 +66,7 @@ final class LoadingView: NSView {
66 66
     func setStatus(_ message: String, progress: CGFloat) {
67 67
         statusLabel.stringValue = message
68 68
         progressBar.setProgress(progress, animated: true)
69
-        setAccessibilityLabel("Loading App for Indeed. \(message)")
69
+        setAccessibilityLabel("Loading \(AppMarketingLinks.displayName). \(message)")
70 70
     }
71 71
 
72 72
     func startAnimating() {
@@ -221,7 +221,7 @@ final class LoadingView: NSView {
221 221
         installPageGradient()
222 222
         setAccessibilityElement(true)
223 223
         setAccessibilityRole(.group)
224
-        setAccessibilityLabel("Loading App for Indeed")
224
+        setAccessibilityLabel("Loading \(AppMarketingLinks.displayName)")
225 225
     }
226 226
 
227 227
     private func installPageGradient() {