Ошибка noWorkspaceArena с горячей перезагрузкой SwiftUI в пакете Swift - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь создать пакет Swift, который использует SwiftUI для создания визуализаций данных диаграммы. Насколько я понимаю, я смогу использовать горячую перезагрузку SwiftUI в XCode для предварительного просмотра компонентов в моем пакете во время разработки, однако, когда я пытаюсь возобновить предварительный просмотр, я получаю сообщение об ошибке "Невозможно просмотреть в этом файле - произошла непредвиденная ошибка ». Диагностика показывает следующую ошибку.

Ошибка:

UVKit.XcodeWorkspaceBuildEnvironment. (неизвестный контекст в $ 141a48360). (неизвестный контекст в $ 141a48368) .ValidationError. noWorkspaceArena)


GenericHumanReadableError: произошла непредвиденная ошибка

noWorkspaceArena

Это мой взгляд.

PieChartView.swift:

import SwiftUI

public struct PieChartView : View {
    public var data: [(Double, Color)]
    public var title: String

    public init(data: [(Double, Color)], title: String) {
        self.data = data
        self.title = title
    }

    public var body: some View {
        Text(title)
    }

}

#if DEBUG
struct PieChartView_Previews : PreviewProvider {
    static var previews: some View {
        PieChartView(data:[(56.0, Color.red),(78, Color.blue),(53, Color.green)], title: "Title")
    }
}
#endif

Вот мой пакет

Package.swift:

import PackageDescription

let package = Package(
    name: "MesmerCharts",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "MesmerCharts",
            targets: ["MesmerCharts"]),
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "MesmerCharts",
            dependencies: []),
        .testTarget(
            name: "MesmerChartsTests",
            dependencies: ["MesmerCharts"]),
    ]
)

1 Ответ

1 голос
/ 18 марта 2020

Чтобы решить мою проблему, я создал .xcworkspace для моего «тестового приложения» и пакета Swift. Чтобы сделать это, вы можете выполнить следующие шаги:

  1. Создать новое рабочее пространство и открыть его в Xcode.
  2. В рабочем пространстве создайте новый проект, выбрав File> New > Project ...
  3. Создайте приложение для одного представления и добавьте его в созданное вами рабочее пространство.
  4. После того, как тестовое приложение будет добавлено в вашу рабочую область, вам нужно будет добавить пакет Swift, вы можете сделать это, выбрав File> New> Swift Package ...
  5. Еще раз добавьте пакет Swift в рабочее пространство, которое вы создали, как вы делали с тестовым приложением, как показано в шаге 3.
  6. Теперь вы увидите и приложение, и пакет в вашем рабочей области, однако нам все еще нужно изменить .xcodeproj приложения для использования пакета.

enter image description here.

Для этого выберите свое приложение, и под целями на вкладке Общие вы увидите Frameworks, Библиотеки и встроенный контент, щелкните символ +, и вам будет предложено указать рамки и библиотеки, которые можно добавить в проект. выберите свой пакет Swift.

enter image description here

Теперь вы увидите пакет Swift в качестве добавленной библиотеки.

enter image description here

Side Note

При каждом обновлении пакета Swift вам необходимо будет пересобрать его перед использованием в тестовом приложении.

...