使用 Swift 包管理器抑制来自依赖项的警告
Posted
技术标签:
【中文标题】使用 Swift 包管理器抑制来自依赖项的警告【英文标题】:Suppress warnings from dependencies with Swift Package Manager 【发布时间】:2018-04-30 04:30:57 【问题描述】:假设我有一个像下面这样的Package.swift
,并且来自依赖项的SomePackage
在swift 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 包管理器抑制来自依赖项的警告的主要内容,如果未能解决你的问题,请参考以下文章
如何让 CMake 创建一个 xcode 项目,其中警告在系统标头中被抑制?