具有多个目标和共享源的框架

Mar*_*inh 9 ios swift swift-package-manager swiftpm

A我有一个包含两个目标(和)的框架,B其文件结构如下:

FooFramework
|__ A
     |__ Foo.swift
     |__ Bar.swift
     |__ Foobar.swift
|__ B
     |__ Barfoo.swift
Run Code Online (Sandbox Code Playgroud)

BA基本上有的源的子集(其中B被设置为目标),例如B仅使用Foo.swift和Bar.swift,但不使用Foobar.swift。

现在我有一个应用程序需要框架A和B(在单独的目标中)。

此时我不确定如何设置Package.swift文件以使此设置起作用。每当我打开Package.swiftinXcode并尝试构建框架时B,编译器都会抱怨 in 中缺少类型Barfoo.swift,因为它们包含在Bar.swift.

这就是我设置Package.swift文件的方式:

// swift-tools-version:5.3

import PackageDescription

let package = Package(
    name: "Framework",
    platforms: [
        .iOS(.v11),
        .macOS(.v10_15)
    ],
    products: [
        .library(
            name: "A",
            targets: ["A"]),
        .library(
            name: "B",
            targets: ["B"]),
    ],
    dependencies: [
        .package(name: "Dependency", url: "https://github.com/...", .exact("1.0.0"))
    ],
    targets: [
        .target(
            name: "A",
            dependencies: [
                "Dependency",
            ],
            path: "A",
            exclude: [
                "Info.plist",
            ],
            resources: [
                .process("fonts"),
            ]
        ),
        .target(
            name: "B",
            dependencies: ["A"],
            path: "B",
            exclude: [
                "Info.plist",
            ],
            resources: [
                .process("../A/fonts"),
            ]),
        .testTarget(
            name: "ATests",
            dependencies: ["A"],
            path: "ATests",
            exclude: [
                "Info.plist"
            ]
        )
    ]
)
Run Code Online (Sandbox Code Playgroud)

相关来源,但不幸的是没有帮助: