SwiftUI — iOS 13 UIViewRepresentable of WKWebView получает Thread 1: сбой EXC_BREAKPOINT

Я пытаюсь перенести WKWebView на SwiftUI. Вот мой код:

import SwiftUI
import WebKit

struct ContentView: View {
    var body: some View {
        WebViewWrapper()
    }
}

/**
 WKWebView ported over to SwiftUI with `UIViewRepresentable`.
 */
final class WebViewWrapper: UIViewRepresentable {
    
    /// `UIViewRepresentable` required function #1.
    func makeUIView(context: Context) -> WKWebView  {
        print("make")
        let webView = WKWebView() /// EXC_BREAKPOINT error here
        return webView
    }
      
    /// `UIViewRepresentable` required function #2
    func updateUIView(_ uiView: WKWebView, context: Context) {
    }
}

Вот и все. Я создал новый проект SwiftUI и вставил его. Однако я получаю эту ошибку:

Тема 1: EXC_BREAKPOINT (код = EXC_I386_BPT, субкод = 0x0)

... ничего не напечатано в консоли. Это произошло как для iOS 13.0, так и для iOS 13.1.

Но на iOS 14.2 работает нормально. Сбой также, кажется, происходит только для WKWebView. Например, если я заменю его на UITextView, он запустится без проблем.

import SwiftUI
import WebKit

struct ContentView: View {
    var body: some View {
        TextViewWrapper()
    }
}

/**
 UITextView ported over to SwiftUI with `UIViewRepresentable`.
 */
final class TextViewWrapper: UIViewRepresentable {
    
    /// `UIViewRepresentable` required function #1.
    func makeUIView(context: Context) -> UITextView  {
        print("make")
        let textView = UITextView() /// no error, works fine
        return textView
    }
      
    /// `UIViewRepresentable` required function #2
    func updateUIView(_ uiView: UITextView, context: Context) {
    }
}

Я использую Big Sur 11.0.1 на Mac M1, но я не думаю, что это должно быть проблемой. Моя версия Xcode 12.2 (12B45b).

Редактировать: Big Sur / M1 может быть проблемой.

Я только что запустил его на той же версии Xcode на моем Intel Mac, Catalina 10.15.5, и он отлично работает.

Что происходит, когда вы используете init(frame: CGRect, configuration: WKWebViewConfiguration) и ненулевой кадр. ?

Warren Burton 11.12.2020 20:46

@WarrenBurton спасибо за предложение, но ничего не изменилось. скриншот

aheze 11.12.2020 20:56

Отлично работает с Xcode 12.1/iOS 13.4. Какой из них вы использовали?

Asperi 12.12.2020 05:21

@Asperi У меня Xcode 12.2 (12B45b) и iOS 13.0. Также протестировано на iOS 13.1.

aheze 12.12.2020 06:00

У кого-нибудь еще есть эта проблема снова на Xcode 13.3 и Mac Monterey? Я использую старый Mac с чипом Intel. Я запускаю на реальном устройстве 13.5.1, и он дает сбой. У меня также есть эти проблемы на Xcode 13.2.1. После этого я обновился до 13.3, но все еще сталкиваюсь с той же проблемой.

Hien.Nguyen 23.03.2022 16:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
5
3 084
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ваш UIViewRepresentable должен быть struct, а не class

struct WebViewWrapper: UIViewRepresentable {
^^^^^^

Я изменил его, но все равно получаю ошибку: скриншот

aheze 10.12.2020 17:13

Как не воспроизводимый, просто догадываюсь... попробуйте разные конструкторы, например

let wkWebConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: wkWebConfiguration)

или даже с некоторым определенным фреймом (в любом случае это не имеет значения позже для иерархии представлений SwiftUI)

let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100), 
                        configuration: wkWebConfiguration)

Спасибо за предложения! Я уже попробовал их, с комментарием @Warren Burton . Я также только что протестировал на своем Intel Mac, и мой исходный код работает. Я думаю, что проблема, вероятно, в Big Sur или Apple Silicon.

aheze 12.12.2020 19:15
Ответ принят как подходящий

Проблема возникает из-за комбинации работы на M1 Mac и использования версии iOS до 14. Проблема известна Apple.

Хм, тогда ладно. Надеюсь, это скоро исправят!

aheze 18.12.2020 02:56

Я тоже испытываю это. Есть ли у кого-нибудь ссылка на радар Apple или какое-либо место, где можно убедиться, что Apple знает и контролирует его разрешение?

Brandon Medenwald 24.01.2021 03:24

Та же проблема, в бета-версии xCode версии 12.5 эта проблема не решена.

Isabella Monza 05.02.2021 11:07

Не могу поверить, что купил новый M1, потому что волновался, что мой Macbook 2015 года вот-вот упакуется и не будет работать на симуляторах ios... ирония судьбы!

Charlie S 08.02.2021 12:42

@BrandonMedenwald Кажется, это радар://FB8920323, но его нет на Open Radar, и я не знаю, как отслеживать прогресс.

Norman 09.02.2021 00:47

Точно Эппл? и что теперь сказать моему клиенту? Мне нужно купить старый MacBook Pro?

xhinoda 26.02.2021 00:18

Я нашел простой обходной путь.
Установка любого из следующих параметров диагностики в настройках схемы предотвратит сбой.

  • Дезинфицирующее средство для адресов
  • Дезинфицирующее средство для нитей
  • Маллок Скриббл
  • Кромки Malloc Guard
  • Охранник Маллок
  • Ведение журнала стека Malloc

Опции диагностики

Я проверил это с помощью Xcode 12.4 (12D4e), iOS 13.7 Simulator, macOS Big Sur 11.2.3 (20D91) и M1 Apple Silicon Mac.

Хороший! Есть ли в этом недостатки? Например, скрытые консольные сообщения или что-то в этом роде?

aheze 09.03.2021 17:11

@aheze Насколько я знаю, недостатков пока нет.

Koze 10.03.2021 15:46

Звучит здорово. Я оставлю галочку на текущем ответе, потому что это, скорее всего, ошибка со стороны Apple. Я проголосовал за ваш ответ, хотя.

aheze 10.03.2021 17:21

извините, я не понимаю, нам нужно проверить или снять галочку в настройках схемы?

xhinoda 11.03.2021 15:23

@xhinoda Да, это так. Вы можете избежать сбоя, проверив любой из элементов в списке. Пожалуйста, обратитесь к связанному изображению «Параметры диагностики».

Koze 11.03.2021 17:41

Спасибо @Koze, ошибка исчезла, но теперь отображается только черный экран :(

xhinoda 11.03.2021 18:40

Как упомянул Норман, это правда, если вы используете xcode 12 и запускаете симулятор с версией ios ниже 14, это сломает приложение, это проблема с чипом M1. Я самостоятельно тестирую приложение на 2 системах: на старом Mac и на новом Mac с чипом m1.

Ага... M1 отлично подходит для скорости, но это головная боль для тестирования устройств

aheze 16.04.2021 18:30

Даже вы не можете запустить версию xcode ниже 12 на чипах M1 из-за проблем с совместимостью.

Geetanshu Gulati 16.04.2021 18:39

Я думаю, что эта проблема решена с помощью Big Sur 11.3.

Я обновлю сегодня и посмотрю, работает ли он. Спасибо за публикацию ответа!

aheze 28.04.2021 16:39

Другие вопросы по теме