能否在SPM的Package.swift中引用其他服务器的源文件?
SPM引用外部服务器单个源文件的可行性
直接在SPM的Package.swift中引用外部HTTP/HTTPS地址的单个源文件(比如https://otherwebsite.com/MySwiftFile1.swift)是不支持的。SPM的target源文件配置仅允许指向:
- 当前Git仓库内的本地文件路径(比如
Sources/MyModule/MySwiftFile.swift) - 通过
.package()依赖引入的其他SPM包中的模块
替代解决方案
方案1:将外部文件封装为独立SPM包
把托管在外部服务器上的Swift文件封装成一个完整的SPM包,将这个包托管在外部服务器的Git仓库中。然后在主仓库的Package.swift中添加对该包的依赖:
let package = Package( name: "MainPackage", dependencies: [ .package(url: "外部服务器的Git仓库地址", from: "1.0.0"), ], targets: [ .target( name: "MainTarget", dependencies: ["外部包的模块名"]), ] )
方案2:构建前自动下载外部文件
在项目中添加构建脚本,在SPM开始构建前,从外部服务器下载目标文件到本地的Sources目录下,然后在Package.swift中引用这个本地路径的文件。例如:
- 在项目根目录添加一个
download_files.sh脚本,内容大致为:
#!/bin/bash mkdir -p Sources/ExternalFiles curl -o Sources/ExternalFiles/MySwiftFile1.swift https://otherwebsite.com/MySwiftFile1.swift
- 在
Package.swift中配置target引用本地下载后的文件:
let package = Package( name: "MainPackage", targets: [ .target( name: "MainTarget", path: "Sources/ExternalFiles"), ] )
- 确保构建环境能执行该脚本,并且有访问外部服务器的权限,同时可以添加文件校验(比如MD5校验)来保证文件完整性。
内容的提问来源于stack exchange,提问作者Isaaс Weisberg
相关产品推荐
相关产品推荐

