Отсутствует WCSessionDelegate. Обратный вызов doFinish передает файл из WatchOS в iOS (iPhone) с помощью TransferFile(_:IOS

Программируем под IOS
Ответить
Anonymous
 Отсутствует WCSessionDelegate. Обратный вызов doFinish передает файл из WatchOS в iOS (iPhone) с помощью TransferFile(_:

Сообщение Anonymous »

Я использую WCSession.transferFile(_:metadata:) -> WCSessionFileTransfer для переноса некоторых файлов из WatchOS (10.5) на iPhone iOS 17.5.1
Подключение к часам WCSession.transferFile(_:metadata:)

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

let session: WCSession = WCSession.default
session.delegate = self
session.activate()
...
...
...
fileTransfer = session.transferFile(file.url, metadata: ["alternateId" : file.alternateId, "type" : file.type])
Следующий делегат обрабатывает результат передачи файла

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

func session(_ session: WCSession, didFinish fileTransfer: WCSessionFileTransfer, error: Error?) {
...
...
...
}
Проблема в том, что ответ DidFinish от WCSessionDelegate вообще не срабатывает.
При подключении консоли отладки мне удалось получить следующую ошибку:

[WCFileStorage persistOutgoingFileTransfer:] ошибка сериализации файла
передача из-за ошибки
Domain=NSCocoaErrorDomain Code=4866 «Обнаружено исключение во время архивирования:
Этот объект может быть закодирован только с помощью NSXPCCoder. ( 0 CoreFoundation
0x000000019b064f2c 00E76A98-210C-3CB5-930B-F236807FF24C + 540460 1
libobjc.A.dylib 0x0000000192ef6018 objc_Exception_throw + 60 2
Foundation 0x0000000199fe7778 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
1419128 3 Фонд 0x0000000199ea0e14
3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 81428 4 WatchConnectivity
0x000000021d055f60 1AB4DDD6-9238-3965-B744-819F2916C8CC + 126816 5
Основа 0x0000000199ea0e14 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
81428 6 WatchConnectivity 0x000000021d0567f0
1AB4DDD6-9238-3965-B744-819F2916C8CC + 129008 7 Фундамент
0x0000000199ea0e14 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 81428 8
Фундамент 0x0000000199f30628 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
669224 9 WatchConnectivity 0x000000021d0583ac
1AB4DDD6-9238-3965-B744-819F2916C8CC + 136108 10 Возможность подключения к часам
0x000000021d04390c 1AB4DDD6-9238-3965-B744-819F2916C8CC + 51468 11
WatchConnectivity 0x000000021d046640
1AB4DDD6-9238-3965-B744-819F2916C8CC + 63040 12 Фундамент
0x0000000199ea9be0 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 117728 13
Фундамент 0x0000000199ea9aa0 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
117408 14 Фундамент 0x0000000199ea98a0
3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 116896 15 Фундамент
0x0000000199ea7b40 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 109376 16
Фундамент 0x0000000199f2c558 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
652632 17 Фундамент 0x0000000199f2c1a4
3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 651684 18 libdispatch.dylib
0x0000000105ed7764 _dispatch_block_async_invoke2 + 148 19
libdispatch.dylib 0x0000000105ec67bc _dispatch_client_callout + 20 20
libdispatch.dylib 0x0000000105ec98e0 _dispatch_continuation_pop + 676
21 libdispatch.dylib 0x0000000105ec8bb8
_dispatch_async_redirect_invoke + 680 22 libdispatch.dylib 0x0000000105edaae4 _dispatch_root_queue_drain + 404 23
libdispatch.dylib 0x0000000105edb4d8 _dispatch_worker_thread2 + 188 24
libsystem_pthread.dylib 0x00000001f7ebb8f8 _pthread_wqthread + 228 25
libsystem_pthread.dylib 0x00000001f7eb80cc start_wqthread + 8 )"
UserInfo={NSDebugDescription=Обнаружено исключение во время архивирования: этот
объект может быть закодирован только с помощью NSXPCCoder. ( 0 CoreFoundation
0x000000019b064f2c 00E76A98-210C-3CB5-930B-F236807FF24C + 540460 1
libobjc.A.dylib 0x0000000192ef6018 objc_Exception_throw + 60 2
Фундамент 0x0000000199fe7778 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
1419128 3 Основание 0x0000000199ea0e14
3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 81428 4 WatchConnectivity
0x000000021d055f60 1AB4DDD6-9238-3965-B744-819F2916C8CC + 126816 5
Foundation 0x0000000199ea0e14 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
81428 6 WatchConnectivity 0x000000021d0567f0
1AB4DDD6-9238-3965-B744-819F2916C8CC + 129008 7 Foundation
0x0000000199ea0e14 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 81428 8
Фундамент 0x0000000199f30628 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
669224 9 WatchConnectivity 0x000000021d0583ac
1AB4DDD6-9238-3965-B744-819F2916C8CC + 136108 10 Возможность подключения к часам
0x000000021d04390c 1AB4DDD6-9238-3965-B744-819F2916C8CC + 51468 11
WatchConnectivity 0x000000021d046640
1AB4DDD6-9238-3965-B744-819F2916C8CC + 63040 12 Foundation
0x0000000199ea9be0 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 117728 13
Фундамент 0x0000000199ea9aa0 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
117408 14 Основание 0x0000000199ea98a0
3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 116896 15 Фундамент
0x0000000199ea7b40 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 109376 16
Фонд 0x0000000199f2c558 3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 +
652632 17 Основание 0x0000000199f2c1a4
3D3A12E3-F5E9-361F-B00A-4A5E8861AA55 + 651684 18 libdispatch.dylib
0x0000000105ed7764 _dispatch_block_async_invoke2 + 148 19
libdispatch.dylib 0x0000000105ec67bc _dispatch_client_callout + 20 20
libdispatch.dylib 0x0000000105ec98e0 _dispatch_continuation_pop + 676
21 libdispatch.dylib 0x0000000105ec8bb8
_dispatch_async_redirect_invoke + 680 22 libdispatch.dylib 0x0000000105edaae4 _dispatch_root_queue_drain + 404 23
libdispatch.dylib 0x0000000105edb4d8 _dispatch_worker_thread2 + 188 24
libsystem_pthread.dylib 0x00000001f7ebb8f8 _pthread_wqthread + 228 25
libsystem_pthread.dylib 0x00000001f7eb80cc start_wqthread + 8 )

К сожалению, эта ошибка не пересылается в WCSessionDelegate.
Ошибка выглядит связанной с NSXPCCoder, но я не нашел никакой конкретной документации по ней.

NSCocoaErrorDomain Code=4866 «Обнаружено исключение во время архивный: этот
объект может быть закодирован только с помощью NSXPCCoder.

Я также пытался вызвать WCSession.outstandingFileTransfers для получения файлов, которые поставлены в очередь для доставки, но еще не доставлены партнеру, и заметил, что WCSession сохраняет все outstandingFileTransfers.
Я делаю что-то не так? Как мне справиться с этим типом ошибки? Существует ли определенное ограничение на файл, который можно передать с помощью WCSessionFileTransfer?
ОБНОВЛЕНИЕ: Я нашел ветку обсуждения на форуме разработчиков Apple. Похоже, это ошибка последней версии watchOS/iOS.
https://developer.apple.com/forums/thread/751623
К сожалению, я не могу провести тщательное тестирование этой проблемы, поскольку приложение-симулятор не поддерживает метод TransferFile(_:metadata:).
Я надеюсь, что это будет исправлено в ближайшее время, но пока я ищу возможное решение. Есть совет?

Подробнее здесь: https://stackoverflow.com/questions/785 ... tchos-to-i
Ответить

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

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

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

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

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