Quellcode durchsuchen

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 vor 2 Monaten
Ursprung
Commit
3c31e5926b

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

@@ -257,6 +257,8 @@
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_KEY_AppStoreAppID = "$(APP_STORE_APP_ID)";
 				INFOPLIST_KEY_AppStoreDeveloperID = "$(APP_STORE_DEVELOPER_ID)";
+				INFOPLIST_KEY_CFBundleDisplayName = "App for Indeed";
+				INFOPLIST_KEY_CFBundleName = "App for Indeed";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
@@ -268,7 +270,7 @@
 				MARKETING_VERSION = 1.0;
 				OPENAI_API_KEY = "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";
 				PRODUCT_BUNDLE_IDENTIFIER = "MQL-DEV.App-for-Indeed";
-				PRODUCT_NAME = "$(TARGET_NAME)";
+				PRODUCT_NAME = "App for Indeed";
 				REGISTER_APP_GROUPS = YES;
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;
@@ -293,6 +295,8 @@
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_KEY_AppStoreAppID = "$(APP_STORE_APP_ID)";
 				INFOPLIST_KEY_AppStoreDeveloperID = "$(APP_STORE_DEVELOPER_ID)";
+				INFOPLIST_KEY_CFBundleDisplayName = "App for Indeed";
+				INFOPLIST_KEY_CFBundleName = "App for Indeed";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSMainStoryboardFile = Main;
 				INFOPLIST_KEY_NSPrincipalClass = NSApplication;
@@ -304,7 +308,7 @@
 				MARKETING_VERSION = 1.0;
 				OPENAI_API_KEY = "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";
 				PRODUCT_BUNDLE_IDENTIFIER = "MQL-DEV.App-for-Indeed";
-				PRODUCT_NAME = "$(TARGET_NAME)";
+				PRODUCT_NAME = "App for Indeed";
 				REGISTER_APP_GROUPS = YES;
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;

+ 1 - 1
App for Indeed/AppDelegate.swift

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

+ 4 - 1
App for Indeed/AppMarketingLinks.swift

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

+ 1 - 1
App for Indeed/ProSubscriptions.storekit

@@ -31,7 +31,7 @@
       "localizations" : [
 
       ],
-      "name" : "Indeed AI Pro",
+      "name" : "App for Indeed Pro",
       "subscriptions" : [
         {
           "adHocOffers" : [

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

@@ -14,7 +14,7 @@ enum AppLaunchCoordinator {
 
     /// Subscription refresh and product catalog load before the dashboard appears.
     static func performStartup(update: StatusUpdate) async {
-        update("Starting App for Indeed…", 0.12)
+        update("Starting \(AppMarketingLinks.displayName)…", 0.12)
         try? await Task.sleep(nanoseconds: 180_000_000)
 
         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
 
     private func installAssistantBubble(text: String, jobs: [JobListing]?, into host: NSView) {
         let avatar = makeAssistantAvatarView()
-        let nameLabel = NSTextField(labelWithString: "AI Job Finder")
+        let nameLabel = NSTextField(labelWithString: AppMarketingLinks.appDisplayName)
         nameLabel.font = .systemFont(ofSize: 11, weight: .semibold)
         nameLabel.textColor = Theme.secondaryText
         nameLabel.alignment = .left
@@ -2240,7 +2240,7 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
         let icon = NSImageView()
         icon.translatesAutoresizingMaskIntoConstraints = false
         icon.symbolConfiguration = NSImage.SymbolConfiguration(pointSize: 15, weight: .semibold)
-        icon.image = NSImage(systemSymbolName: "sparkles", accessibilityDescription: "AI Job Finder")
+        icon.image = NSImage(systemSymbolName: "sparkles", accessibilityDescription: AppMarketingLinks.appDisplayName)
         icon.contentTintColor = Theme.brandBlue
 
         view.addSubview(icon)
@@ -2362,12 +2362,11 @@ final class DashboardView: NSView, NSTextFieldDelegate, NSSharingServicePickerDe
             $0.removeFromSuperview()
         }
 
-        let brand = NSTextField(labelWithString: "Indeed AI\nJob Finder")
+        let brand = NSTextField(labelWithString: AppMarketingLinks.appDisplayName)
         brand.font = .systemFont(ofSize: 18, weight: .bold)
         brand.textColor = Theme.brandBlue
         brand.alignment = .left
         brand.maximumNumberOfLines = 2
-        // Tight multiline height in the sidebar stack (zero width makes intrinsic height unreliable).
         brand.preferredMaxLayoutWidth = 194
         sidebar.addArrangedSubview(brand)
         sidebar.setCustomSpacing(10, after: brand)

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

@@ -27,13 +27,13 @@ final class LoadingView: NSView {
     private let iconView = NSImageView()
     private let aiBadgeHost = NSView()
     private let aiBadgeLabel = NSTextField(labelWithString: "AI-POWERED")
-    private let titleLabel = NSTextField(labelWithString: "App for Indeed")
+    private let titleLabel = NSTextField(labelWithString: AppMarketingLinks.displayName)
     private let subtitleLabel = NSTextField(labelWithString: "Find your perfect job with the power of AI.")
     private let statusLabel = NSTextField(labelWithString: "Starting up…")
     private let progressBar = LoadingProgressBarView()
     private let thinkingIndicator = ChatThinkingIndicatorView(
         compact: false,
-        accessibilityLabel: "Loading App for Indeed"
+        accessibilityLabel: "Loading \(AppMarketingLinks.displayName)"
     )
 
     override init(frame frameRect: NSRect) {
@@ -66,7 +66,7 @@ final class LoadingView: NSView {
     func setStatus(_ message: String, progress: CGFloat) {
         statusLabel.stringValue = message
         progressBar.setProgress(progress, animated: true)
-        setAccessibilityLabel("Loading App for Indeed. \(message)")
+        setAccessibilityLabel("Loading \(AppMarketingLinks.displayName). \(message)")
     }
 
     func startAnimating() {
@@ -221,7 +221,7 @@ final class LoadingView: NSView {
         installPageGradient()
         setAccessibilityElement(true)
         setAccessibilityRole(.group)
-        setAccessibilityLabel("Loading App for Indeed")
+        setAccessibilityLabel("Loading \(AppMarketingLinks.displayName)")
     }
 
     private func installPageGradient() {