Ver código fonte

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 1 semana atrás
pai
commit
bc3646141d
1 arquivos alterados com 30 adições e 4 exclusões
  1. 30 4
      meetings_app/ViewController.swift

+ 30 - 4
meetings_app/ViewController.swift

@@ -644,6 +644,33 @@ private extension ViewController {
644 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 674
     private func showSidebarPage(_ page: SidebarPage) {
648 675
         selectedSidebarPage = page
649 676
         updateSidebarAppearance()
@@ -744,10 +771,9 @@ private extension ViewController {
744 771
                 openInAppBrowser(with: url, policy: inAppBrowserDefaultPolicy)
745 772
             }
746 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 777
         case .upgrade:
752 778
             settingsPopover?.performClose(nil)
753 779
             settingsPopover = nil