如何仅为DEBUG构建添加Swift Package或在Release中排除它?
仅Debug配置引入Swift Package依赖的方法
方法一:通过Package.swift添加条件依赖(推荐,适用于SPM管理的项目)
如果你的项目用Swift Package Manager作为依赖管理工具,直接在Package.swift里给目标添加带条件的依赖即可,SPM会自动在对应配置下引入:
targets: [ .target( name: "YourAppTarget", dependencies: [ // 全配置都需要的依赖 .product(name: "CommonPackage", package: "CommonRepo"), // 仅Debug配置才引入的依赖 .product(name: "DebugTools", package: "DebugRepo", condition: .when(configuration: .debug)) ] ), ]
这样Release构建时,SPM会完全忽略这个Debug专属依赖,不会下载、编译或链接它。
方法二:Xcode界面配合编译条件控制
如果是传统Xcode项目(通过Xcode添加的SPM依赖),可以这么操作:
- 选中项目中的目标依赖包,进入它的Build Settings,在Debug配置的
Active Compilation Conditions里添加一个自定义标识,比如DEBUG_DEPENDENCY_ENABLED - 回到主项目目标的Build Settings,同样在Debug配置的
Active Compilation Conditions里添加相同的标识 - 在代码中所有用到该依赖包的地方,用编译条件包裹:
#if DEBUG_DEPENDENCY_ENABLED import DebugTools // 这里写使用DebugTools的代码 #endif
这样Release构建时,这段代码不会被编译,Xcode也不会尝试链接该依赖包。
方法三:通过链接器标记控制(适合特殊场景)
如果上述方法不适用,还可以通过修改链接器标记来控制:
- 进入主项目目标的Build Settings,找到
Other Linker Flags - 在Debug配置里添加
-lDebugOnlyPackage(替换成实际的包名) - 在Release配置里移除这个标记
- 同样要在代码里用
#if DEBUG包裹依赖相关代码,避免编译报错
为什么EXCLUDED_SOURCE_FILE_NAMES没用?
这个设置只针对你项目目录下直接关联的源文件,而Swift Package的源文件是由SPM独立管理的,不在你的项目文件列表中,所以对包的文件完全不起作用。
内容的提问来源于stack exchange,提问作者Geri Borbás
相关产品推荐
相关产品推荐

