2

我正在创建一个 Swift 包,它本质上是从 Objective-C 框架生成的多个 XCFrameworks 的包装器,因此可以通过 SPM 安装它们。

就创建 SP 以及将其作为依赖项添加到应用程序的能力而言,一切正常。但是我在 SP 的存储库中包含了一堆非必要的文件,我不想将它们包含在实际的 SP 中——即当 SP 作为依赖项添加时,它们不应该出现在 Xcode 的导航器中。 (这些包括源 Obj-C 框架、自述文件、变更日志、用于演示应用程序的 Xcode 工作区、用于生成 XCFrameworks 的脚本文件等)

这甚至可能吗?或者 SPM 是否会始终检查整个 repo 并使所有文件对用户可见?

我尝试使用Target说明符的各种排列:source, path, exclude但无济于事。

这是我可以通过有效清单获得的最接近的值,但是当我在虚拟 Xcode 应用程序中检查 SP 时,我仍然可以看到包含的 repo 中的所有文件:

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "WrapperSwiftPackage",
    platforms: [.iOS(.v13)],
    products: [
        .library(name: "WrapperSwiftPackage", targets: ["WrapperSwiftPackage"])
    ],
    dependencies: [],
    targets: [
        .target(
            name: "WrapperSwiftPackage",
            dependencies: [
                "ObjCFramework1",
                "ObjCFramework2"
            ],
            path: "", // Set to root directory so we can exclude files below
            exclude: [
                "CHANGELOG.md",
                "Dangerfile.swift",
                "README.md",
                "Workspace.xcworkspace",
                "Scripts/generate-xcframework.sh",
                "Scripts/link_git_hooks.sh",
                "Objective-C Frameworks/"
            ],
            sources: [
                "Sources/WrapperSwiftPackage/main.swift",
                "XCFrameworks/ObjCFramework1.xcframework",
                "XCFrameworks/ObjCFramework2.xcframework"
            ]
        ),
        .binaryTarget(name: "ObjCFramework1", path: "XCFrameworks/ObjCFramework1.xcframework"),
        .binaryTarget(name: "ObjCFramework2", path: "XCFrameworks/ObjCFramework2.xcframework")
    ]
)
4

1 回答 1

1

不确定这是否不是一个错误,但我不小心想出了一个解决方案。

如果你放一个空的 Package.swift (我的意思是,像这样的):

// swift-tools-version:5.5

import PackageDescription

let package = Package()

进入项目子文件夹之一,然后即使 SPM 正在检查子文件夹,它也会从 Xcode 导航器中排除,因此从项目可见性中排除。

我想知道这是一个错误还是它记录在某个地方,每一个提示都表示赞赏。

适用于本地和远程依赖项。

于 2022-02-04T17:33:41.213 回答