Xcode 12 и SwiftUI: не удается выполнить предварительный просмотр в этом файле — не удалось обновить предварительный просмотр

#swift #swiftui #xcode12

#swift #swiftui #xcode12

Вопрос:

Похоже, предварительные просмотры перестали работать в Xcode 12! Попытка предварительного просмотра шаблона файла SwiftUI и получение ошибки ниже. Есть идеи, как это исправить? Пытался очистить папку сборки, удалить производные данные и перезапустить Xcode, но безрезультатно!

На Каталине 10.15.6.

 RemoteHumanReadableError: Failed to update preview.

The preview process appears to have crashed.

Error encountered when sending 'prepare' message to agent.

==================================

|  RemoteHumanReadableError: The operation couldn’t be completed. (BSServiceConnectionErrorDomain error 3.)
|  
|  BSServiceConnectionErrorDomain (3):
|  ==BSErrorCodeDescription: OperationFailed
  

Код, который я пытаюсь просмотреть (из нового шаблона файла SwiftUI):

 import SwiftUI

struct SwiftUIView: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}
  

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

1. Похоже на ошибку Xcode, может помочь очистка производных данных или просто перезапуск Xcode

2. Удалил все, что мог, производные данные, папку сборки. и перезапустил Xcode несколько раз, нет, все еще не работает!

3. Может быть, вы включили предварительный просмотр на устройстве? Я знаю, что это бесполезно, но ошибка Xcode может возникнуть по многим причинам

4. Я включил / выключил предварительный просмотр на устройстве, но все еще не могу заставить его работать. На самом деле, похоже, что это обычная проблема с Xcode 12, многие люди сообщают о проблемах с предварительным просмотром, но решения на горизонте нет!

5. Вы пытались стереть состояние приложения Xcode рядом с производными данными? Состояние приложения Xcode сохраняется в path ~/Library/Saved Application State/com.apple.dt.Xcode.savedState

Ответ №1:

Если вы SwiftUIView используете ObservableObject as environmentObject , попробуйте это:

 struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView().environmentObject(YourObservableObjectClass())
    }
}
  

Ответ №2:

По-видимому, это была ошибка с Firestore, которая, скорее всего, является причиной: сбой предварительного просмотра XCode 12 при добавлении Firebase SDK Swift UI 2.0. Лучшим решением на данный момент является вызов pod update, который должен решить проблему. Я проверил на Xcode 12, iOS 13 .

Ответ №3:

если вы используете SwiftUI (ObservableObject, @EnvironmentObject)

добавить в предварительные просмотры

 .environmentObject(ModelData())
  

 struct LandmarkDetail_Previews: PreviewProvider {
        static var previews: some View {
    
            LandmarkDetail(landmark: ModelData().landmarks[1])
                .environmentObject(ModelData())
        }
    }
  

мои модельные данные

 final class ModelData:ObservableObject
{
   @Published var landmarks: [Landmark] = load("landmarkData.json")
}
  

Ответ №4:

Ошибка: не удается выполнить предварительный просмотр в этом файле

Комментарий @kerim.ba сработало на меня:

Вы пытались стереть состояние приложения Xcode рядом с производными данными? Состояние приложения Xcode сохраняется в path ~/Library/Saved Application State/com.apple.dt.Xcode.savedState

Ответ №5:

Ошибка предварительного просмотра SwiftUI

Мне удалось решить эту проблему. Достаточно прокомментировать все в didFinishLaunchingWithOptions методе. Затем при предварительном просмотре SwiftUI он будет работать. Решение

Ответ №6:

У меня была такая же проблема, когда я обновлял Firebase Analytics (до версии 6.33.0). Закомментирование следующей строки исправило это.

 FirebaseApp.configure()
  

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

1. Нет. Это на 100% воспроизводимо с включенным вызовом Firebase. Скопируйте приведенный выше код в совершенно новый проект, это работает?

2. У меня не сработало, это очень странно. Теперь появляется ошибка, MessageSendingError: Connection interrupted: send previewInstances message to agent .

3. Как упоминалось Стэнфордом выше, это больше не проблема в Firebase версии 6.34.0.