Xcode Debug构建时如何排除SPM引入的第三方框架以提升编译速度
SPM模式下Debug排除指定依赖的实现方案
方案1:Xcode项目适配方案(适用于Xcode原生管理SPM依赖的场景)
- 第一步 移除全局依赖:进入Xcode项目的
Project > Package Dependencies列表,删除之前全局引入的Amplitude、Sentry依赖 - 第二步 新建中间封装层:创建一个名为
OptionalAnalyticsWrapper的静态Framework Target,仅在该Target的Package Dependencies中引入Amplitude、Sentry依赖 - 第三步 配置中间层编译规则:在
OptionalAnalyticsWrapper的Build Settings中找到EXCLUDED_SOURCE_FILE_NAMES配置项,仅给Debug模式赋值为*,实现Debug模式下该中间层不编译任何内容、不关联第三方依赖 - 第四步 配置主Target链接规则:在主App Target的
Build Phases > Link Binary With Libraries中添加OptionalAnalyticsWrapper,将Status设置为Optional;同时在Other Linker Flags配置中,仅给Release模式添加-framework OptionalAnalyticsWrapper参数 - 第五步 补充代码条件判断:所有调用Amplitude、Sentry的代码外层包裹编译条件,示例如下:
#if RELEASE import Amplitude import Sentry #endif func initAnalyticsService() { #if RELEASE // 原有Amplitude、Sentry初始化逻辑 Amplitude.instance().initializeApiKey("你的Amplitude密钥") SentrySDK.start { options in options.dsn = "你的Sentry DSN" } #endif }
方案2:Package.swift适配方案(适用于SwiftPM管理整个项目的场景)
直接在Package.swift的依赖声明中添加编译条件,即可实现仅Release模式引入对应依赖,示例配置如下:
let package = Package( name: "你的项目名", dependencies: [ // 先正常声明两个依赖的源地址和版本要求 .package(url: "https://github.com/amplitude/Amplitude-iOS.git", from: "8.0.0"), .package(url: "https://github.com/getsentry/sentry-cocoa.git", from: "8.0.0"), ], targets: [ .target( name: "你的主Target名", dependencies: [ // 给两个依赖添加仅Release生效的条件 .product(name: "Amplitude", package: "Amplitude-iOS", condition: .when(configuration: .release)), .product(name: "Sentry", package: "sentry-cocoa", condition: .when(configuration: .release)), ] ), ] )
配置完成后按
Command+Shift+K清理Xcode缓存后重新构建即可生效,Debug模式下完全不会编译、链接两个第三方框架,构建速度可恢复到引入框架前的水平,Release模式下所有统计、崩溃上报功能不受任何影响。
内容的提问来源于stack exchange,提问作者nathan
相关产品推荐
相关产品推荐

