import SwiftUI import UIKit /// Presents a share sheet with a vCard file so the user can add to Contacts. /// App Clips cannot use CNContactStore; the share sheet's "Add to Contacts" option works instead. struct ClipShareSheet: UIViewControllerRepresentable { let vCardData: String let onDismiss: (() -> Void)? init(vCardData: String, onDismiss: (() -> Void)? = nil) { self.vCardData = vCardData self.onDismiss = onDismiss } func makeUIViewController(context: Context) -> UIActivityViewController { let tempURL = FileManager.default.temporaryDirectory .appendingPathComponent("contact-\(UUID().uuidString).vcf") let data = Data(vCardData.utf8) try? data.write(to: tempURL) let controller = UIActivityViewController( activityItems: [tempURL], applicationActivities: nil ) controller.completionWithItemsHandler = { _, _, _, _ in try? FileManager.default.removeItem(at: tempURL) onDismiss?() } return controller } func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {} }