Swift 包预览中的主包资源

Szy*_*n W 7 swift swift-package-manager swiftui

在此输入图像描述

我有以下(屏幕截图)项目设置。基本上是简单的应用程序,其中一些SwiftUI 视图放置在本地 SPM 包中

当我为真实设备/模拟器构建应用程序时,一切都很好,所有资源都已正确加载。位于本地包中的SwiftUI预览无法显示主包中的图像 (屏幕截图)

我想知道是否有某种方法可以将主捆绑包资源加载到 SwiftUI 预览中。

Fab*_*b1n 1

您需要将资产添加到包库而不是主要目标中。

注意bundle: .module中的参数Image。这是必要的,以便系统知道您的目标目标是哪个目标,在本例中是库包(模块)。

这适用于设备和预览。

对我来说,当您从单独的库访问应用程序包中的资产时,这有点深奥。

库资源应该真正存在于库本身中,否则库与应用程序就没有完全分离。

如果您曾经在不同的目标或应用程序中使用该库,则需要确保该资源也被复制到那里。

这就是它的工作原理

这就是Package.swift必须的样子:

import PackageDescription

let package = Package(
    name: "MyLibrary",
    platforms: [.iOS(.v13)],
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .library(
            name: "MyLibrary",
            targets: ["MyLibrary"]),
    ],
    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 this package depends on.
        .target(
            name: "MyLibrary",
            dependencies: [],
            resources: [.copy("Assets.xcassets")]
        )
    ]
)
Run Code Online (Sandbox Code Playgroud)

  • 我知道我可以将我的资产保留在包本身中,但由于我使用它们来构建单个应用程序的模块,所以我很乐意分享主包中的所有资产。请记住,此解决方案在设备/模拟器上运行良好,该问题仅在 Xcode 预览中出现。 (3认同)