Por alguna razón que no entiendo, el botón de extensión de acción (en el menú Compartir) no responde. La extensión de acción, en este punto, captura la URL de Safari (desde donde se inició) para hacer algunas cosas después. Como una capa entre la Web y la extensión, hay un archivo JS (tal vez algo esté mal aquí, lo acabo de copiar)
Controlador de vista:
class ActionViewController: UIViewController { var SafariURL: NSURL! override func viewDidLoad() { super.viewDidLoad() let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem let itemProvider = extensionItem!.attachments?.first as? NSItemProvider let propertyList = String(kUTTypePropertyList) if itemProvider!.hasItemConformingToTypeIdentifier(propertyList) { print("I'm here2") itemProvider!.loadItem(forTypeIdentifier: propertyList, options: nil, completionHandler: { (item, error) -> Void in let dictionary = item as? NSDictionary OperationQueue.main.addOperation { let results = dictionary![NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary let urlString = results!["currentUrl"] as? String self.SafariURL = NSURL(string: urlString!) } }) } else { print("error") } } @IBAction func done() { // Return any edited content to the host app. // This template doesn't do anything, so we just echo the passed in items. self.extensionContext!.completeRequest(returningItems: self.extensionContext!.inputItems, completionHandler: nil) }Archivo JS:
var GetURL = function() {}; GetURL.prototype = { run: function(arguments) { arguments.completionFunction({ "currentUrl" : document.URL }); }, finalize: function(arguments) { var message = arguments["statusMessage"]; if (message) { alert(message); } } }; var ExtensionPreprocessingJS = new GetURL;Finalmente, debe cambiar el contenido de override func viewDidLoad a
super.viewDidLoad() if let inputItem = extensionContext?.inputItems.first as? NSExtensionItem { if let itemProvider = inputItem.attachments?.first { itemProvider.loadItem(forTypeIdentifier: kUTTypePropertyList as String) { [self] (dict, error) in guard let itemDictionary = dict as? NSDictionary else { return } guard let javaScriptValues = itemDictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary else { return } self.Pageurl = javaScriptValues["URL"] as? String ?? ""¡JS está bien!