如何屏蔽SPM第三方依赖警告但保留Swift主目标警告?
如何在Swift Package Manager(SPM)中屏蔽第三方依赖编译警告,保留主目标警告
大量通过SPM引入的第三方依赖会把构建日志堆满警告,这些警告大多没必要关注,也基本不会被修复。我们需要实现的是:只屏蔽第三方依赖的编译警告,同时保留主项目的警告。
你的当前脚本在依赖解析阶段加了OTHER_SWIFT_FLAGS="-Xfrontend -suppress-warnings",但这会全局屏蔽所有警告,包括主目标的。下面是几种更精准的实现方式:
方法1:直接在Xcode里配置(推荐)
不用写复杂脚本,直接在Xcode里做目标级配置:
- 打开项目的Build Settings,找到Other Swift Flags
- 点击
+号,添加:-Xfrontend -warn-on-swift-version-mismatch -Xcc -Wno-all - 再给主目标单独启用警告:
- 选中主目标的Build Settings
- 在Other Swift Flags里添加你需要的警告参数,比如
-Wall(开启所有警告)、-Werror(把警告当错误,可选)
方法2:修改xcodebuild脚本
如果必须用脚本,要把屏蔽警告的参数只限制在依赖解析阶段,主目标构建时不传递该参数。修改后的脚本如下:
#!/bin/bash -e SCHEME_NAME="NameOfTheScheme" WORKSPACE_NAME="NameOfTheWorkspace.xcworkspace" DERIVED_DATA="./DerivedData" rm -rf Package.resolved git clean -dxff # 解析依赖时屏蔽第三方警告 xcodebuild -resolvePackageDependencies \ -workspace $WORKSPACE_NAME \ -scheme $SCHEME_NAME \ -derivedDataPath $DERIVED_DATA \ OTHER_SWIFT_FLAGS="-Xfrontend -suppress-warnings" # 构建主目标时不传递屏蔽参数,保留主目标警告 xcodebuild -workspace $WORKSPACE_NAME \ -scheme $SCHEME_NAME \ -sdk iphoneos \ -destination 'generic/platform=iOS' \ -derivedDataPath $DERIVED_DATA xcodebuild -workspace $WORKSPACE_NAME \ -scheme $SCHEME_NAME \ -sdk iphonesimulator \ -destination 'generic/platform=iOS Simulator' \ -derivedDataPath $DERIVED_DATA
不过这种方式可能还是会有少量依赖警告在主构建阶段出现,结合Xcode的目标配置会更可靠。
方法3:通过Package.swift配置
如果你能修改项目的Package.swift,可以针对主目标和依赖分别设置编译参数:
dependencies: [ .package(url: "https://github.com/example/ThirdPartyLib.git", from: "1.0.0"), ], targets: [ .target( name: "YourMainTarget", dependencies: ["ThirdPartyLib"], swiftSettings: [ // 给主目标开启所有警告 .unsafeFlags(["-Wall"]) ] ), .testTarget( name: "YourMainTargetTests", dependencies: ["YourMainTarget"] ) ]
然后在Xcode里给第三方依赖单独加屏蔽参数:
- 打开Xcode的Package Dependencies列表
- 右键点击第三方依赖,选择Show in Project Navigator
- 选中依赖的目标,进入Build Settings,把
-Xfrontend -suppress-warnings添加到Other Swift Flags里
内容的提问来源于stack exchange,提问作者Richard Topchii
相关产品推荐
相关产品推荐

