Расширение iOS Share не отображается на листе общего доступаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Расширение iOS Share не отображается на листе общего доступа

Сообщение Anonymous »

У меня есть приложение для iOS, которое запускается, когда пользователь нажимает на файл с расширением .csk. По сути, я связал свое приложение с этим расширением. Если выбрано несколько файлов .csk (щелкнув значок «...» в правом верхнем углу приложения «Файлы») и опубликовано, на листе общего доступа отображается мое приложение, и когда оно выбрано, в качестве параметра передается только первый файл. в onOpenUrl(perform:). Это видно из того факта, что onOpenURL(perform:) предоставляет в качестве параметра только один URL-адрес.

Код: Выделить всё

WindowGroup {
FileContentView()
.onOpenURL(perform: { (fileUrl: URL) in  // Only one URL can be delivered here

Log(String(format: "File Url = %@", fileUrl.absoluteString))
})
}

Код: Выделить всё

onOpenURL(perform:)
— это способ SwiftUI получить URL-адрес, с которого было запущено приложение. В UIKit URL-адреса доставляются в сцену(_:openURLContexts:). Если приложение UIKit запускается с несколькими файлами, предоставляется только первый файл, несмотря на то, что Scene(_:openURLContexts:) предоставляет массив URL-адресов. Это также подтверждает здесь инженер по платформам Apple.
Альтернативный способ принять несколько файлов — использовать расширение Share, как описано в этой публикации stackoverflow. Я создал ShareExtension и удалил стандартный SLComposeServiceViewController, так как хочу полностью настроить пользовательский интерфейс (как описано в этом посте stackoverflow). Я определил собственный ViewController следующим образом (на данный момент состоящий только из операторов журнала):

Код: Выделить всё

class ShareViewController: UIViewController {

override func viewDidLoad() {
log("ShareViewController.viewDidLoad()")

guard let extensionItem: NSExtensionItem = extensionContext?.inputItems.first as? NSExtensionItem,
let data: [AnyHashable:Any] = extensionItem.userInfo else {
log("Error in obtaining data!")
return
}

log("data = " + String(describing: data))
}

override func viewDidAppear(_ animated: Bool) {
log("ShareViewController.viewDidApper(_:)")
}

override func viewDidDisappear(_ animated: Bool) {
log("ShareViewController.viewDidDisappear(_:)")
}

deinit {
log("ShareViewController.deinit()")
}
}
Теперь мне нужно указать правила активации, т. е. мое расширение ShareExtension должно отображаться на листе общего доступа только тогда, когда выбран файл .csk.
У меня есть следующий файл info.plist:

Код: Выделить всё

NSExtension

NSExtensionAttributes

NSSExtensionActivationRule

NSExtensionActivationSupportsFileWithMaxCount
5


NSExtensionPrincipalClass
$(PRODUCT_MODULE_NAME).ShareViewController
NSExtensionPointIdentifier
com.apple.share-services



Я ожидаю, что мое приложение запустится, когда будет выбрано и опубликовано до 5 файлов любого расширения. Но я никогда не вижу расширения своего приложения. Если бы я выбрал 5 файлов .csk, я смог бы увидеть свое приложение, но не его расширение.
Итак, две проблемы:

[*]Что еще требуется в файле plist, чтобы показать мое ShareExtension на листе общего доступа?
[*]После того, как 1 разрешено, мне нужен только мой ShareExtension для запуска при выборе файла .csk. Как я могу этого добиться? Я использовал UIExportedTypesDeclaration и CFBundleDocumentTypes, чтобы связать свое приложение с файлом .csk, но как связать мое ShareExtension с этим конкретным типом файла?


Подробнее здесь: https://stackoverflow.com/questions/784 ... hare-sheet
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»