Проблема с WKWebView в расширении миниатюр

#ios #swift #wkwebview #thumbnails

#iOS #swift #wkwebview #эскизы

Вопрос:

Разработка расширения миниатюр для пользовательского типа файла в моем приложении для iOS. Я использую WKWebView для отображения строки HTML, а затем делаю снимок WKWebView для использования в качестве уменьшенного изображения. Отлично работает на симуляторах. Однако не завершается при запуске на реальном устройстве.

Вот пример кода, который можно использовать для дублирования сбоя.

Вот код:

     let thumbFileView = WKWebView(frame: frame)
    thumbFileView.navigationDelegate = self
    thumbFileView.pageZoom = scale
    thumbFileView.layoutIfNeeded()
    thumbFileView.loadHTMLString(thumbFile.asHtml, baseURL: nil)
 

Изображение миниатюр идеально подходит для симулятора, но на реальном устройстве в журналах происходит сбой:

 2020-12-08 11:01:30.191156-0700 ThumbFileThumbnail[35519:906998] [] networkd_settings_setup_notify_watch notify_register_dispatch(com.apple.system.networkd.settings) [status 9] failed
2020-12-08 11:01:30.205445-0700 ThumbFileThumbnail[35519:906998] [] networkd_settings_setup_notify_watch notify_register_dispatch(com.apple.system.networkd.settings) [status 9] failed, dumping backtrace:
        [arm64] libnetcore-2288.42.1
    0   libnetwork.dylib                    0x00000001a2ce1658 __nw_create_backtrace_string   116
    1   libnetwork.dylib                    0x00000001a2c6ffdc C67A2D71-4415-3F82-9399-65C3956520AE   5832668
    2   libnetwork.dylib                    0x00000001a2c6f6c0 C67A2D71-4415-3F82-9399-65C3956520AE   5830336
    3   libnetwork.dylib                    0x00000001a2a777d0 C67A2D71-4415-3F82-9399-65C3956520AE   3766224
    4   libnetwork.dylib                    0x00000001a2c26408 nw_path_create_evaluator_for_endpoint_no_evaluate   544
    5   libnetwork.dylib                    0x00000001a2c25ee0 nw_path_create_evaluator_for_endpoint   84
    6   Network                             0x00000001b5a063e0 2FB89D76-EA38-3B43-BCD1-E0C7EE9B9012   1180640
    7   Network                             0x00000001b5a058b4 2FB89D76-EA38-3B43-BCD1-E0C7EE9B9012   1177780
    8   libdispatch.dylib                   0x00000001a18c0280 6C143C51-288F-3CD0-84DD-17B9A0AAEE62   397952
    9   libdispatch.dylib                   0x00000001a18642f4 6C143C51-288F-3CD0-84DD-17B9A0AAEE62   21236
    10  Network                             0x00000001b5a05888 2FB89D76-EA38-3B43-BCD1-E0C7EE9B9012   1177736
    11  NetworkExtension                    0x00000001b268a4e4 4F673F38-E238-37C5-9B26-2A540CB429B9   357604
    12  WebKit                              0x00000001ad9a8334 19789FD9-1098-37B7-B639-9E4F0EB867D6   2847540
    13  WebKit                              0x00000001ada0bdc8 19789FD9-1098-37B7-B639-9E4F0EB867D6   3255752
    14  WebKit                              0x00000001ada0ba20 19789FD9-1098-37B7-B639-9E4F0EB867D6   3254816
    15  WebKit                              0x00000001ad6fda9c 19789FD9-1098-37B7-B639-9E4F0EB867D6   51868
    16  ThumbFileThumbnail                  0x00000001044f4ee8 $s18ThumbFileThumbnail0abC9GeneratorC04loadaB4View3for2in5scaleSo05WKWebF0CAA0aB0V_So6CGRectV12CoreGraphics7CGFloatVtF   704
    17  ThumbFileThumbnail                  0x00000001044f42a4 $s18ThumbFileThumbnail0abC9GeneratorC20provideSnapshotImage3for5scale5frame10completionyAA0aB0V_12CoreGraphics7CGFloatVSo6CGRectVySo7UIImageCSgctFyycfU_   204
    18  ThumbFileThumbnail                  0x00000001044f44e0 $sIeg_IeyB_TR   52
    19  libdispatch.dylib                   0x00000001a18bf298 6C143C51-288F-3CD0-84DD-17B9A0AAEE62   393880
    20  libdispatch.dylib                   0x00000001a18c0280 6C143C51-288F-3CD0-84DD-17B9A0AAEE62   397952
    21  libdispatch.dylib                   0x00000001a186f05c 6C143C51-288F-3CD0-84DD-17B9A0AAEE62   65628
    22  CoreFoundation                      0x00000001a1c075d0 96F8386D-D88A-3C89-A323-A17975C3317F   632272
    23  CoreFoundation                      0x00000001a1c01a78 96F8386D-D88A-3C89-A323-A17975C3317F   608888
    24  CoreFoundation                      0x00000001a1c00b90 CFRunLoopRunSpecific   572
    25  Foundation                          0x00000001a2e1e7f8 F1BC26A1-F5BB-36F7-A65A-D5F232DBF902   30712
    26  Foundation                          0x00000001a2e4f964 F1BC26A1-F5BB-36F7-A65A-D5F232DBF902   231780
    27  libxpc.dylib                        0x00000001e76af1c4 E3552D23-ADFB-36FE-B7D0-B23090553C49   86468
    28  libxpc.dylib                        0x00000001e76b13bc xpc_main   176
    29  Foundation                          0x00000001a2e51b78 F1BC26A1-F5BB-36F7-A65A-D5F232DBF902   240504
    30  PlugInKit                           0x00000001cefc28c0 __PLUGINKIT_CALLING_OUT_TO_CLIENT_SUBSYSTEM_FOR_BEGINUSING__   35616
    31  PlugInKit                           0x00000001cefc2530 __PLUGINKIT_CALLING_OUT_TO_CLIENT_SUBSYSTEM_FOR_BEGINUSING__   34704
    32  PlugInKit                           0x00000001cefc2cb8 __PLUGINKIT_CALLING_OUT_TO_CLIENT_SUBSYSTEM_FOR_BEGINUSING__   36632
    33  ExtensionKit                        0x00000001a5f514e0 EXExtensionMain   80
    34  Foundation                          0x00000001a2f8d1cc NSExtensionMain   192
    35  libdyld.dylib                       0x00000001a18df588 E31C0887-C999-3047-9B80-203248EC2396   5512
 

Из-за установки точки останова проблем во время выполнения нарушающая строка кода:

     thumbFileView.loadHTMLString(thumbFile.asHtml, baseURL: nil)
 

проблемы с точкой останова во время выполнения

Поскольку html содержит URL-адрес изображения, это, по-видимому, указывает на некоторое ограничение, которое iOS накладывает на расширение миниатюр, блокируя его доступ к сети. Это видно из журнала сбоев и из стека на момент возникновения проблемы.

Я изучил документацию Apple по NSExtensionAttributes и не могу найти ничего, что могло бы решить эту проблему с разрешениями.

Вот атрибуты NSExtensionAttributes для расширения миниатюр:

     <key>NSExtension</key>
    <dict>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>QLSupportedContentTypes</key>
            <array>
                <string>com.raywenderlich.RazeThumb.ThumbFile</string>
            </array>
            <key>QLThumbnailMinimumDimension</key>
            <integer>0</integer>
        </dict>
 

Приветствуются любые идеи о том, как заставить это работать на реальных устройствах, а не только на симуляторе.

Комментарии:

1. Можете ли вы предоставить демонстрационный проект, включающий тестовые данные? Спасибо

2. Пример мог бы помочь. Я делаю что-то подобное, и это отлично работает для меня на устройствах.

3. Вы должны, по крайней мере, предоставить HTML-файл. По вашим словам, ваше приложение разбилось, потому что в HTML-файле была ссылка на изображение. Значит, файлы без ссылки на изображение работали?

4. Я добавил ссылку для скачивания, чтобы опробовать программу. Чтобы увидеть сбой, вы должны сначала запустить приложение, чтобы загрузить его на свое устройство, затем выбрать расширение миниатюр и запустить его. Прокрутите вниз до «greenthumb.thumb», пользовательского типа файла, чтобы увидеть сбой.