VcfShare.swift
34 lignes · 1319 octets
import CoreTransferable import Foundation import UniformTypeIdentifiers // Port of contact/VcfShare.kt — slugged file name + temp .vcf file, exposed as // a `Transferable` so `ShareLink` writes the file lazily on share. enum VcfShare { static func fileName(_ card: ContactCard) -> String { let base = card.displayName().nilIfBlank ?? "contact" let slug = KotlinRegex("[^a-z0-9]+") .replace(base.lowercased(), with: "-") .trimmingCharacters(in: CharacterSet(charactersIn: "-")) return "\(slug.nilIfBlank ?? "contact").vcf" } static func writeTempFile(_ card: ContactCard) throws -> URL { let dir = FileManager.default.temporaryDirectory.appendingPathComponent("vcf", isDirectory: true) try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) let url = dir.appendingPathComponent(fileName(card)) try VCardSerializer.toVCard3(card).write(to: url, atomically: true, encoding: .utf8) return url } } struct VcfShareFile: Transferable { let card: ContactCard static var transferRepresentation: some TransferRepresentation { FileRepresentation(exportedContentType: .vCard) { file in SentTransferredFile(try VcfShare.writeTempFile(file.card)) } } }
GitRust