// import UIKit // import MobileCoreServices // import UrlEscaping // @objc(SGActionRequestHandler) // class SGActionRequestHandler: NSObject, NSExtensionRequestHandling { // var extensionContext: NSExtensionContext? // func beginRequest(with context: NSExtensionContext) { // // Do not call super in an Action extension with no user interface // self.extensionContext = context // let itemProvider = context.inputItems // .compactMap({ $0 as? NSExtensionItem }) // .reduce([NSItemProvider](), { partialResult, acc in // var nextResult = partialResult // nextResult += acc.attachments ?? [] // return nextResult // }) // .filter({ $0.hasItemConformingToTypeIdentifier(kUTTypePropertyList as String) }) // .first // guard let itemProvider = itemProvider else { // return doneWithInvalidLink() // } // itemProvider.loadItem(forTypeIdentifier: kUTTypePropertyList as String, options: nil, completionHandler: { [weak self] item, error in // DispatchQueue.main.async { // guard // let dictionary = item as? NSDictionary, // let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary // else { // self?.doneWithInvalidLink() // return // } // if let url = results["url"] as? String, let escapedUrl = url.addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) { // self?.doneWithResults(["openURL": "sg://parseurl?url=\(escapedUrl)"]) // } else { // self?.doneWithInvalidLink() // } // } // }) // } // func doneWithInvalidLink() { // doneWithResults(["alert": "Invalid link"]) // } // func doneWithResults(_ resultsForJavaScriptFinalizeArg: [String: Any]?) { // if let resultsForJavaScriptFinalize = resultsForJavaScriptFinalizeArg { // let resultsDictionary = [NSExtensionJavaScriptFinalizeArgumentKey: resultsForJavaScriptFinalize] // let resultsProvider = NSItemProvider(item: resultsDictionary as NSDictionary, typeIdentifier: kUTTypePropertyList as String) // let resultsItem = NSExtensionItem() // resultsItem.attachments = [resultsProvider] // self.extensionContext!.completeRequest(returningItems: [resultsItem], completionHandler: nil) // } else { // self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil) // } // self.extensionContext = nil // } // }