Как включить расширение Objective-C в мой Swift ActivityViewController?

Я включил расширение 1Password в свое приложение для браузера, следуя этому вопрос.

Однако у меня уже есть общий лист iOS 8 (ActivityViewController) в моем приложении, и я хотел бы включить 1Password в этот общий лист внутри использования его собственного. Мое приложение на Swift, но 1Password на Objective-C.

Вот код, который я использую для ActivityViewController:

@IBAction func _shareButton(sender: UIButton) {

    var shareContent = _searchBar.text

    if let myWebsite = NSURL(string: "\(_searchBar.text)")
    {
        let objectsToShare = [myWebsite]
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
        if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
            // The app is running on an iPad, so you have to wrap it in a UIPopOverController
            var popOver: UIPopoverController = UIPopoverController(contentViewController: activityVC)
            let rect = CGRect(origin: CGPoint(x: 559, y: 44), size: CGSize(width: 38, height: 32))
            // if your "share" button is a UIBarButtonItem
            popOver.presentPopoverFromRect(rect, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)

        } else {
            self.presentViewController(activityVC, animated: true, completion: nil)

        }
    }
}

А вот как выглядит код расширения 1Password:

@IBAction func onePasswordButton(sender: AnyObject) {
    OnePasswordExtension.sharedExtension().fillItemIntoWebView(self._webView, forViewController: self, sender: sender, showOnlyLogins: false, completion: {(Bool) in
        // error handling
    })
}

Я попытался использовать код для расширения в части applicationActivities UIActivityViewController, но он не работает (сбой сборки).

Возможно ли иметь расширение 1Password внутри ActivityViewController?

Спасибо,

PastaCoder


person PastaCoder    schedule 03.05.2015    source источник


Ответы (1)


Я связался с Радом Аззоузом из службы поддержки AgileBits через Github (подробное описание проблемы можно найти здесь), и нам удалось решить проблему.

Вот код, используемый для ActivityViewController с расширением 1Password.

@IBAction func showShareSheet(sender: AnyObject) -> Void {
    var onePasswordExtension = OnePasswordExtension.sharedExtension()

    // Create the 1Password extension item.
    onePasswordExtension.createExtensionItemForWebView(self.webView, completion: {(extensionItem, error) -> Void in
        if extensionItem == nil {
            println("Failed to create an extension item: <%@>", error)
            return
        }
        // Initialize the 1Password extension item property
        self.onePasswordExtensionItem = extensionItem

        var activityItems: NSArray = [ self ]; // Add as many custom activity items as you please

        // Setting up the activity view controller
        var activityViewController = UIActivityViewController(activityItems: activityItems as [AnyObject], applicationActivities: nil)

        if sender.isKindOfClass(UIBarButtonItem) {
            self.popoverPresentationController?.barButtonItem = sender as! UIBarButtonItem
        }
        else if sender.isKindOfClass(UIView) {
            self.popoverPresentationController?.sourceView = sender.superview
            self.popoverPresentationController?.sourceRect = sender.frame
        }

        activityViewController.completionWithItemsHandler = {(activityType, completed, returnedItems, activityError) -> Void in
            if onePasswordExtension.isOnePasswordExtensionActivityType(activityType) {
                if (returnedItems.count > 0) {
                    onePasswordExtension.fillReturnedItems(returnedItems, intoWebView: self.webView, completion: { (success, returnedItemsError) -> Void in
                        if success == false {
                            println("Failed to fill login in webview: <%@>", returnedItemsError)
                        }
                    })
                }
                else {
                    // Code for other custom activity types
                }
            }
        }

        self.presentViewController(activityViewController, animated: true, completion: nil)
    })
}
person PastaCoder    schedule 24.05.2015