Procházet zdrojové kódy

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 před 1 týdnem
rodič
revize
bc3646141d
1 změnil soubory, kde provedl 30 přidání a 4 odebrání
  1. 30 4
      meetings_app/ViewController.swift

+ 30 - 4
meetings_app/ViewController.swift

@@ -644,6 +644,33 @@ private extension ViewController {
644
         openInDefaultBrowser(url: url)
644
         openInDefaultBrowser(url: url)
645
     }
645
     }
646
 
646
 
647
+    private func shareAppURL() -> URL? {
648
+        if let configured = Bundle.main.object(forInfoDictionaryKey: "AppShareURL") as? String {
649
+            let trimmed = configured.trimmingCharacters(in: .whitespacesAndNewlines)
650
+            if trimmed.isEmpty == false, let url = URL(string: trimmed) {
651
+                return url
652
+            }
653
+        }
654
+        return nil
655
+    }
656
+
657
+    private func shareAppFromSettingsMenu() {
658
+        let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String
659
+            ?? Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String
660
+            ?? "Meetings App"
661
+        let message = "Check out \(appName) for managing and joining meetings."
662
+        let appURL = shareAppURL()
663
+        let shareItems: [Any] = appURL.map { [message, $0] } ?? [message]
664
+
665
+        let picker = NSSharingServicePicker(items: shareItems)
666
+        let anchorView = sidebarRowViews[.settings] ?? view
667
+        picker.show(relativeTo: anchorView.bounds, of: anchorView, preferredEdge: .maxX)
668
+
669
+        let clipboardText = ([message, appURL?.absoluteString].compactMap { $0 }).joined(separator: "\n")
670
+        NSPasteboard.general.clearContents()
671
+        NSPasteboard.general.setString(clipboardText, forType: .string)
672
+    }
673
+
647
     private func showSidebarPage(_ page: SidebarPage) {
674
     private func showSidebarPage(_ page: SidebarPage) {
648
         selectedSidebarPage = page
675
         selectedSidebarPage = page
649
         updateSidebarAppearance()
676
         updateSidebarAppearance()
@@ -744,10 +771,9 @@ private extension ViewController {
744
                 openInAppBrowser(with: url, policy: inAppBrowserDefaultPolicy)
771
                 openInAppBrowser(with: url, policy: inAppBrowserDefaultPolicy)
745
             }
772
             }
746
         case .shareApp:
773
         case .shareApp:
747
-            let urlString = "https://example.com"
748
-            NSPasteboard.general.clearContents()
749
-            NSPasteboard.general.setString(urlString, forType: .string)
750
-            showSimpleAlert(title: "Share App", message: "Link copied to clipboard:\n\(urlString)")
774
+            settingsPopover?.performClose(nil)
775
+            settingsPopover = nil
776
+            shareAppFromSettingsMenu()
751
         case .upgrade:
777
         case .upgrade:
752
             settingsPopover?.performClose(nil)
778
             settingsPopover?.performClose(nil)
753
             settingsPopover = nil
779
             settingsPopover = nil