Невозможность общего доступа к файлу через расширение iOS Share
Я получил следующий журнал от клиента, который утверждает, что делится фотографиями из приложения для фотографий через Share Extension. Клиент полагает, что интернет-соединение с роутером плохое. Поведение, описанное клиентом, выглядит следующим образом:
- Загрузить файл через расширение общего доступа через плохое соединение
- Оставьте устройство в спящем режиме, в нашем случае соединение должно быть разорвано, а файл не загружен на наши серверы.
- Попытайтесь повторно загрузить тот же файл.
Ожидаемый результат: файл должен загружаться нормально.
Фактический результат: Share Extension никогда не загружается, это означает, что пользователь может бесконечно щелкать значок приложения без успеха при отображении представления.
Кроме того, нам никогда не удавалось воспроизвести такую проблему в доме. Однако клиент может делать это каждый раз, находясь в аэропорту.
Я заглянул в журналы его устройства, и я вижу следующее, не имея ни малейшего представления о том, что происходит. Начиная с исключений вне границ, которые я не могу объяснить из-за того, что представление никогда не загружалось.
Есть идеи или кто-нибудь еще сталкивался с такой же проблемой?
13 апреля 15:11:07 audi pkd[153]: назначение плагина (2.1.2) для песочницы плагина
13 апреля 15:11:07 audi pkd[153]: включение pid=386 для плагина (2.1.2) D89CEF37-B025-4C6F-A8B6-FBB6B4D94A84/private/var/container /Bundle/Application/AF69E215-04AE-4929-A8C8-51BE8FADF397/.app/Plugins/.appex
13 апреля 15:11:07 audi kernel[0]: xpcproxy[451] Контейнер: /private/var/mobile/ Контейнеры / Данные /PluginKitPlugin/669C0F52-1C21-441D-9906-E2EFBD8A7D00(песочница)
13 апреля 15:11:08 audi kernel[0]: LwVM::_generateMappedExtentsList - не удалось сопоставить диапазон unmap с разделом
13 апреля 15:11:08 audi backboardd[60]: невозможно загрузить порт начальной загрузки с именем.gsEvents: неизвестный код ошибки (1102) 13 апреля 15:11:08 audi [451]: * Завершение работы приложения из-за невыполненного исключения "NSRangeException", причина: '* - [__ NSArrayI objectAtIndex]: индекс 1 за пределами [0 .. 0] Первый стек бросить вызов: (0x18400ae38 0x18366ff80 0x183eeb158 0x1000e4a40 0x1000e4738 0x183a554bc 0x183a5547c 0x183a5ab84 0x183fc0dd8 0x183fbec40 0x183ee8d10 0x1857d0088 0x1891bdf70 0x183cacd74 0x183caea2c 0x184acbd30 0x18b2e2c48 0x18b2e28dc 0x18b2e2c6c 0x1848de058 0x183a868b8)
13 апреля 15:11:08 audi MobileSlideShow[386]: плагин прерван
13 апреля 15:11:08 audi MobileSlideShow[386]: плагин отключен
13 апреля 15:11:08 audi Diagnostic [84]: информация о процессе оценки ошибок - pid: 451, puniqueid: 451
13 апреля, 15:11: audi mediaserverd[28]: параметр '' (pid = 451) DiscoveryMode = DiscoveryMode_None, currentDiscoveryMode = DiscoveryMode_None
13 апреля 15:11:08 audi MobileSlideShow[386]: 2016-04-13 15:11:08.629|MobileSlideShow|0x14ce07cd0: HOST: не удалось загрузить контроллер удаленного просмотра с ошибкой: Ошибка Domain=NSCocoaErrorDomain Code=4099 "Соединение с служба с именем.viewservice была прервана, но сообщение было отправлено через дополнительный прокси, и поэтому этот прокси стал недействительным." UserInfo= {NSDebugDescription= Соединение со службой с именем.viewservice было прервано, но сообщение было отправлено через дополнительный прокси, и поэтому этот прокси стал недействительным.}
13 апреля 15:11:08 audi MobileSlideShow[386]: 2016-04-13 15:11:08.633|MobileSlideShow|0x14ce07cd0: лист не отображается, вызывая преждевременное завершение
13 апреля 15:11:08 audi com.apple.xpc.launchd[1] ([451]): служба закрыта из-за сигнала: прерывание прерывания: 6
13 апреля 15:11:08 audi ReportCrash[452]: Составление отчета для трупа [451]
13 апреля 15:11:08 audi ReportCrash[452]: отчет типа "109(109_)" не сохранен, так как достигнуто ограничение в 25 журналов.
13 апреля 15:11:08 audi ReportCrash[452]: Примечание. Этот отчет сокращен для включения в системный журнал, поскольку его невозможно сохранить на диск.
Символизация может быть возможна путем ручной очистки и включения в раздел "Бинарное изображение" полного отчета с этого же устройства - удачи!
13 апреля 15:11:08 audi ReportCrash[452]: процесс: [451] Путь: /private/var/containers/Bundle/Application/AF69E215-04AE-4929-A8C8-51BE8FADF397/.app/PlugIns/.appex/
0 ответов
Во многих случаях файл большой, и соединение освобождается перед завершением, или что-то в той же лопатке происходит, если это что-то в этой лопатке, возможный способ обойтись, сначала запишите свой файл в папку документов приложения, затем загрузите через URL-адрес из папки с документами в приложении, например: (пример с изображением)
let documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let path = documentsDirectoryPath.appending("/outImage.jpg")
let outURL = URL(fileURLWithPath: path)
try? FileManager.default.removeItem(at: outURL)
if let data2c = self.newImage.jpegData(compressionQuality:1.0)
{
do
{
try data2c.write(to: outURL)
DispatchQueue.main.async
{
var filesToShare = [Any]()
filesToShare.append(outURL)
let activityVC = UIActivityViewController(activityItems: filesToShare, applicationActivities: nil)
activityVC.excludedActivityTypes = [.print,.assignToContact,.copyToPasteboard,.addToReadingList,.markupAsPDF,.postToTencentWeibo,.postToTencentWeibo]
activityVC.popoverPresentationController?.sourceView = self.view
activityVC.preferredContentSize = CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height-60)
activityVC.modalPresentationCapturesStatusBarAppearance = true
self.present(activityVC, animated: true, completion: nil)
}
} catch {
print("Couldn't write file")
}
}