Поделиться выделенным текстом - расширение iOS Share

Я хочу иметь возможность поделиться выделенным текстом, но мое расширение появляется только при нажатии на значок общего доступа (а затем оно заполняет поле заголовком страницы). Я хочу, чтобы мое расширение отображалось, когда пользователь выбирает текст и нажимает «Поделиться ...» (как на рисунке ниже), а затем я хочу, чтобы оно заполнило текстовую область выделенным текстом.

Я хочу, чтобы здесь было доступно расширение

Контроллер общего доступа:

override func viewDidLoad() {
        super.viewDidLoad()

        customPopup()

        let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
        let itemProvider = extensionItem.attachments?.first as! NSItemProvider
        let propertyList = String(kUTTypePropertyList)
        if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
            itemProvider.loadItem(forTypeIdentifier: propertyList, options: nil, completionHandler: { (item, error) -> Void in
                guard let dictionary = item as? NSDictionary else { return }
                OperationQueue.main.addOperation {
                    if let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary {
                            print("RESULTS: \n", results)
                    }
                }
            })
        } else {
            print("error")
        }
    }

Action.js (предварительная обработка JS)

var MyPreprocessor = function() {};

MyPreprocessor.prototype = {
run: function(arguments) {
    arguments.completionFunction({"URL": document.URL, "title": document.title, "selection": window.getSelection().toString()});
}
};

var ExtensionPreprocessingJS = new MyPreprocessor;

Info.plist


person connorvo    schedule 27.06.2018    source источник


Ответы (1)


Как и сейчас, ваш NSExtensionActivationRule явно запрашивает 1 веб-URL, так что это то, что вы получаете.

Вместо этого попробуйте изменить свой NSExtensionActivationRuleinfo.plist) на:

<dict>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
</dict>

Если это не сработает, попробуйте дольше:

<key>NSExtensionAttributes</key>
<dict>
    <key>NSExtensionActivationUsesStrictMatching</key>
    <integer>2</integer>
    <key>NSExtensionActivationRule</key>
    <dict>
        <key>NSExtensionActivationDictionaryVersion</key>
        <integer>2</integer>
        <key>NSExtensionActivationSupportsText</key>
        <true/>
    </dict>
</dict>

Вы можете прочитать больше в этом сообщении: Расширение iOS Share: как читать из заметок, посты.

person Daniel    schedule 27.06.2018
comment
Сработало изменение NSExtensionActivationRule на следующее. ‹Dict› ‹key› NSExtensionActivationSupportsText ‹/key› ‹integer› 1 ‹/integer› ‹/dict› - person connorvo; 27.06.2018
comment
Однако этот способ запуска расширения приложения обходит JavaScript препроцессора. Кто-нибудь понял это? - person ykonda; 16.06.2019