如何从命令行触发 Xcode 的 'Update to Latest Package Versions'?
How to trigger Xcode's 'Update to Latest Package Versions' from command line?
目标:
我想以编程方式更新示例项目使用的 Swift 个包的版本。
问题:
Xcode > 11 提供菜单选项:
File > Swift Packages > Update to Latest Package Versions
这将更新 Package.resolved
文件以指向特定修订版。
此文件位于:
MyProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
如何从命令行为 CI 构建触发此操作?
最终放弃了这条路线,因为理想情况下 CI 测试 GOING 在 repo 中的内容而不是 IS 中的内容回购协议。
最终解决方案是指向一个虚拟分支,然后强制将 CI 生成的合并提交推送到该分支。
它有点老套,但提供了有关如何使用包的准确反馈post-merge。
更新:
能够找到更好的解决方案。
试用xcodebuild -resolvePackageDependencies
xcodebuild -resolvePackageDependencies
似乎不能可靠地工作。它通常会顽固地拒绝更新到最新版本,特别是当 SPM 依赖项指向分支而不是版本标记时。显然 Xcode 正在某处缓存此信息,但我无法弄清楚它到底是哪个文件。即使核对派生数据中的 SourcePackages
文件夹也没有成功。
我发现可靠地执行此操作的唯一方法是核对 Xcode 项目的整个 DerivedData
子文件夹。
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
删除项目的 DerivedData 子文件夹是完全安全的。 Xcode 将根据需要简单地重新生成它。
如果您将规则设置为下一个次要版本并且下一个版本是主要版本,则单击更新将不起作用,您必须更改程序包设置。
目标:
我想以编程方式更新示例项目使用的 Swift 个包的版本。
问题:
Xcode > 11 提供菜单选项:
File > Swift Packages > Update to Latest Package Versions
这将更新 Package.resolved
文件以指向特定修订版。
此文件位于:
MyProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
如何从命令行为 CI 构建触发此操作?
最终放弃了这条路线,因为理想情况下 CI 测试 GOING 在 repo 中的内容而不是 IS 中的内容回购协议。
最终解决方案是指向一个虚拟分支,然后强制将 CI 生成的合并提交推送到该分支。
它有点老套,但提供了有关如何使用包的准确反馈post-merge。
更新:
能够找到更好的解决方案。
试用xcodebuild -resolvePackageDependencies
xcodebuild -resolvePackageDependencies
似乎不能可靠地工作。它通常会顽固地拒绝更新到最新版本,特别是当 SPM 依赖项指向分支而不是版本标记时。显然 Xcode 正在某处缓存此信息,但我无法弄清楚它到底是哪个文件。即使核对派生数据中的 SourcePackages
文件夹也没有成功。
我发现可靠地执行此操作的唯一方法是核对 Xcode 项目的整个 DerivedData
子文件夹。
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
删除项目的 DerivedData 子文件夹是完全安全的。 Xcode 将根据需要简单地重新生成它。
如果您将规则设置为下一个次要版本并且下一个版本是主要版本,则单击更新将不起作用,您必须更改程序包设置。