Joe*_*ick 11 xcode continuous-integration swift swift-package-manager
我想以编程方式更新示例项目使用的 Swift 包的版本。
Xcode > 11 提供了一个菜单选项:
文件 > Swift 包 > 更新到最新的包版本
这将更新Package.resolved文件以指向特定修订。
该文件位于:
MyProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
如何从 CI 构建的命令行触发此操作?
xcodebuild -resolvePackageDependencies似乎工作不可靠。它通常会顽固地拒绝更新到最新版本,特别是当 SPM 依赖项指向分支而不是版本标记时。显然 Xcode 正在某处缓存此信息,但我无法确定它到底是哪个文件。即使对SourcePackages派生数据中的文件夹进行攻击也没有达到目的。
我发现可靠地执行此操作的唯一方法是删除DerivedDataXcode 项目的整个子文件夹。
derived=$(xcodebuild -showBuildSettings | grep -m 1 BUILD_DIR | grep -oE "\/.*" | sed 's|/Build/Products||')
# The above will return a folder with a name like /Users/you/Library/Developer/Xcode/DerivedData/MyProject-ehdkocavaenextdcrsaszjdmyssx
rm -rf "$derived"
xcodebuild -resolvePackageDependencies
Run Code Online (Sandbox Code Playgroud)
删除项目的 DerivedData 子文件夹是完全安全的。Xcode 将根据需要简单地重新生成它。
Joe*_*ick -5
最终放弃了这条路线,因为理想情况下 CI 测试存储库中的内容而不是存储库中的内容。
最终解决方案是指向一个虚拟分支,然后强制将 CI 生成的合并提交推送到该分支。
它有点 hacky,但提供了有关合并后如何使用包的准确反馈。
更新: 能够找到更好的解决方案。 /sf/answers/4277744691/
| 归档时间: |
|
| 查看次数: |
3553 次 |
| 最近记录: |