Я пытаюсь перенести 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).
Я только что запустил его на той же версии Xcode на моем Intel Mac, Catalina 10.15.5, и он отлично работает.
@WarrenBurton спасибо за предложение, но ничего не изменилось. скриншот
Отлично работает с Xcode 12.1/iOS 13.4. Какой из них вы использовали?
@Asperi У меня Xcode 12.2 (12B45b) и iOS 13.0. Также протестировано на iOS 13.1.
У кого-нибудь еще есть эта проблема снова на Xcode 13.3 и Mac Monterey? Я использую старый Mac с чипом Intel. Я запускаю на реальном устройстве 13.5.1, и он дает сбой. У меня также есть эти проблемы на Xcode 13.2.1. После этого я обновился до 13.3, но все еще сталкиваюсь с той же проблемой.
Ваш UIViewRepresentable должен быть struct
, а не class
struct WebViewWrapper: UIViewRepresentable {
^^^^^^
Я изменил его, но все равно получаю ошибку: скриншот
Как не воспроизводимый, просто догадываюсь... попробуйте разные конструкторы, например
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.
Проблема возникает из-за комбинации работы на M1 Mac и использования версии iOS до 14. Проблема известна Apple.
Хм, тогда ладно. Надеюсь, это скоро исправят!
Я тоже испытываю это. Есть ли у кого-нибудь ссылка на радар Apple или какое-либо место, где можно убедиться, что Apple знает и контролирует его разрешение?
Та же проблема, в бета-версии xCode версии 12.5 эта проблема не решена.
Не могу поверить, что купил новый M1, потому что волновался, что мой Macbook 2015 года вот-вот упакуется и не будет работать на симуляторах ios... ирония судьбы!
@BrandonMedenwald Кажется, это радар://FB8920323, но его нет на Open Radar, и я не знаю, как отслеживать прогресс.
Точно Эппл? и что теперь сказать моему клиенту? Мне нужно купить старый MacBook Pro?
Я нашел простой обходной путь.
Установка любого из следующих параметров диагностики в настройках схемы предотвратит сбой.
Я проверил это с помощью Xcode 12.4 (12D4e), iOS 13.7 Simulator, macOS Big Sur 11.2.3 (20D91) и M1 Apple Silicon Mac.
Хороший! Есть ли в этом недостатки? Например, скрытые консольные сообщения или что-то в этом роде?
@aheze Насколько я знаю, недостатков пока нет.
Звучит здорово. Я оставлю галочку на текущем ответе, потому что это, скорее всего, ошибка со стороны Apple. Я проголосовал за ваш ответ, хотя.
извините, я не понимаю, нам нужно проверить или снять галочку в настройках схемы?
@xhinoda Да, это так. Вы можете избежать сбоя, проверив любой из элементов в списке. Пожалуйста, обратитесь к связанному изображению «Параметры диагностики».
Спасибо @Koze, ошибка исчезла, но теперь отображается только черный экран :(
Как упомянул Норман, это правда, если вы используете xcode 12 и запускаете симулятор с версией ios ниже 14, это сломает приложение, это проблема с чипом M1. Я самостоятельно тестирую приложение на 2 системах: на старом Mac и на новом Mac с чипом m1.
Ага... M1 отлично подходит для скорости, но это головная боль для тестирования устройств
Даже вы не можете запустить версию xcode ниже 12 на чипах M1 из-за проблем с совместимостью.
Я думаю, что эта проблема решена с помощью Big Sur 11.3.
Я обновлю сегодня и посмотрю, работает ли он. Спасибо за публикацию ответа!
Что происходит, когда вы используете
init(frame: CGRect, configuration: WKWebViewConfiguration)
и ненулевой кадр. ?