如何在代码中获取Swift Package Manager(SPM)依赖包的版本号
SPM 引入第三方依赖后运行时获取版本号的可行方案
以下是三种常用的落地方案,你可以根据自己的项目情况选择:
- 方案1:直接调用依赖库暴露的版本属性
大部分主流SPM开源库会主动对外暴露版本常量,比如Alamofire可以直接调用Alamofire.version获取版本号。你可以先查看对应依赖库的公开API文档,确认是否有提供现成的版本属性,这种方式成本最低。 - 方案2:手动维护版本映射表
如果依赖库没有对外暴露版本信息,可以手动把用到的依赖版本存在项目配置里:- 在项目的
Info.plist中新增一个字典类型的配置项,命名为SPMDependencyVersions,内部按照依赖库名称: 版本号的格式填写你引入的所有依赖的版本,比如Alamofire: 5.8.1 - 运行时读取配置即可,参考代码:
guard let infoDict = Bundle.main.infoDictionary, let versionMap = infoDict["SPMDependencyVersions"] as? [String: String], let targetVersion = versionMap["你要查询的依赖库名称"] else { return } print("依赖版本:\(targetVersion)") - 在项目的
- 方案3:构建阶段自动生成版本代码
依赖数量多不想手动维护的话,可以通过构建脚本自动解析SPM的版本文件生成代码:- SPM会把所有依赖的准确版本、分支、Commit哈希信息存在项目根目录的
Package.resolved文件中,本质是JSON格式 - 在Xcode的「Build Phases」中新增一个Run Script,放到「Compile Sources」阶段之前,脚本逻辑负责解析
Package.resolved提取所有依赖的版本信息,自动生成包含版本常量的Swift文件,加入项目编译 - 运行时直接调用自动生成的常量就能拿到对应依赖的版本
- SPM会把所有依赖的准确版本、分支、Commit哈希信息存在项目根目录的
注意:如果你引入依赖时用的是分支名、Commit哈希而非正式版本号,解析出来的结果就是对应的分支名/哈希值。
内容的提问来源于stack exchange,提问作者MendyK
相关产品推荐
相关产品推荐

