BusinessCard/BusinessCardClip/Views/Components/ClipShareSheet.swift

34 lines
1.2 KiB
Swift

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) {}
}