Explorar el Código

Add native share sheet support for Share App action.

Replaces the placeholder URL copy flow with macOS sharing and keeps clipboard content as a fallback for quick sharing.

Made-with: Cursor
huzaifahayat12 hace 3 meses
padre
commit
bc3646141d
Se han modificado 1 ficheros con 30 adiciones y 4 borrados
  1. 30 4
      meetings_app/ViewController.swift

+ 30 - 4
meetings_app/ViewController.swift

@@ -644,6 +644,33 @@ private extension ViewController {
         openInDefaultBrowser(url: url)
     }
 
+    private func shareAppURL() -> URL? {
+        if let configured = Bundle.main.object(forInfoDictionaryKey: "AppShareURL") as? String {
+            let trimmed = configured.trimmingCharacters(in: .whitespacesAndNewlines)
+            if trimmed.isEmpty == false, let url = URL(string: trimmed) {
+                return url
+            }
+        }
+        return nil
+    }
+
+    private func shareAppFromSettingsMenu() {
+        let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String
+            ?? Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String
+            ?? "Meetings App"
+        let message = "Check out \(appName) for managing and joining meetings."
+        let appURL = shareAppURL()
+        let shareItems: [Any] = appURL.map { [message, $0] } ?? [message]
+
+        let picker = NSSharingServicePicker(items: shareItems)
+        let anchorView = sidebarRowViews[.settings] ?? view
+        picker.show(relativeTo: anchorView.bounds, of: anchorView, preferredEdge: .maxX)
+
+        let clipboardText = ([message, appURL?.absoluteString].compactMap { $0 }).joined(separator: "\n")
+        NSPasteboard.general.clearContents()
+        NSPasteboard.general.setString(clipboardText, forType: .string)
+    }
+
     private func showSidebarPage(_ page: SidebarPage) {
         selectedSidebarPage = page
         updateSidebarAppearance()
@@ -744,10 +771,9 @@ private extension ViewController {
                 openInAppBrowser(with: url, policy: inAppBrowserDefaultPolicy)
             }
         case .shareApp:
-            let urlString = "https://example.com"
-            NSPasteboard.general.clearContents()
-            NSPasteboard.general.setString(urlString, forType: .string)
-            showSimpleAlert(title: "Share App", message: "Link copied to clipboard:\n\(urlString)")
+            settingsPopover?.performClose(nil)
+            settingsPopover = nil
+            shareAppFromSettingsMenu()
         case .upgrade:
             settingsPopover?.performClose(nil)
             settingsPopover = nil