使用 Swift 包管理器抑制来自依赖项的警告

Posted

技术标签:

【中文标题】使用 Swift 包管理器抑制来自依赖项的警告【英文标题】:Suppress warnings from dependencies with Swift Package Manager 【发布时间】:2018-04-30 04:30:57 【问题描述】:

假设我有一个像下面这样的Package.swift,并且来自依赖项的SomePackageswift build 期间会产生警告。

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "my-app",
    dependencies: [
        .package(url: "https://some-package.git", .upToNextMajor(from: "1.0"))
    ],
    targets: [
        .target(name: "Run", dependencies: ["SomePackage"]
    ]
)

如何抑制依赖项发出的警告,但保留来自我的代码的警告?

【问题讨论】:

我正在使用基于 CocoaPods 的 xcodeproj 工具的自定义脚本,我在生成 Xcode 项目后运行该工具。请参阅:gist.github.com/siemensikkema/57ef1ce3340e32b72dc59e44bc37b477 我对其进行了调整,以使生成我不关心的警告的框架例外(在我使用 Vapor 2 时)。 【参考方案1】:

使用 Swift 工具版本 5,您可以在包文件中定义编译器标志(请参阅 https://docs.swift.org/package-manager/PackageDescription/PackageDescription.html#swiftsetting)。这是Package.swift 的示例,它在构建期间抑制编译器警告:

// swift-tools-version:5.0

import PackageDescription

let package = Package(
    name: "Antlr4",
    products: [
        .library(
            name: "Antlr4",
            targets: ["Antlr4"]),
    ],
    targets: [
        .target(
            name: "Antlr4",
            dependencies: [],
            swiftSettings: [
                .unsafeFlags(["-suppress-warnings"]),
            ]),
        .testTarget(
            name: "Antlr4Tests",
            dependencies: ["Antlr4"]),
    ]
)

要仅在外部代码中禁止显示警告,您应该将代码分成两个包。

【讨论】:

【参考方案2】:

如果您使用的是 Xcode 10 项目文件:

    在 Xcode 中点击项目文件 选择依赖的目标 转到构建设置 搜索 Swift 编译器 - 警告策略 适当设置禁止警告标志

【讨论】:

在我看来这种方式是最正确和最简单的。 问题是如何抑制对 dependencies 的警告。所以,答案不是抑制 all 警告。【参考方案3】:

对于 Objective-C 模块,您可以使用以下命令禁用所有警告:

cSettings: [
   .unsafeFlags(["-w"])
]

【讨论】:

【参考方案4】:

我不知道如何仅抑制依赖项警告,但可以通过传递此选项在构建期间抑制所有警告:-Xswiftc -suppress-warnings。调用看起来像

swift build -Xswiftc -suppress-warnings

【讨论】:

中途解决方案,例如获取所有警告或不获取任何警告。谢谢。 问题是如何抑制对 dependencies 的警告。所以,答案不是抑制 all 警告。

以上是关于使用 Swift 包管理器抑制来自依赖项的警告的主要内容,如果未能解决你的问题,请参考以下文章

Swift 包管理器 - UIKit 依赖

如何让 CMake 创建一个 xcode 项目,其中警告在系统标头中被抑制?

Redis安装-使用包管理安装Redis

我可以在 SSIS 中抑制“对于每个文件的枚举器为空”警告吗?

抑制预期 Oracle 异常的 PHP 警告

抑制 Maven 依赖插件的“发现未使用的声明依赖项”警告