如何从命令行触发Xcode的“更新到最新版本”?

jfewjypa  于 2023-02-05  发布在  其他
关注(0)|答案(5)|浏览(333)

目标:

我想以编程方式更新样例项目所使用的Swift Packages的版本。

问题:

Xcode〉11提供了一个菜单选项:
文件〉Swift软件包〉更新到最新软件包版本
这将更新Package.resolved文件以指向特定修订版本。
此文件位于:
MyProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
如何从配置项构建的命令行触发此操作?

iovurdzv

iovurdzv1#

试用xcodebuild -resolvePackageDependencies

nvbavucw

nvbavucw2#

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会根据需要重新生成它。

nwwlzxa7

nwwlzxa73#

如果您将规则设置为下一个次要版本,而下一个版本为主要版本,则单击更新将不起作用,您必须更改软件包设置。

jljoyd4f

jljoyd4f4#

在您的主Xcode项目中,在项目导航器的"Package dependencies"下:

  • 选择要更新的依赖项
  • 右键单击〉在查找器中打开(在派生数据下)
  • 在终端打开这个位置
  • 运行命令:swift package update

注意:您可以在此处了解有关SPM CLI的更多信息:https://github.com/apple/swift-package-manager

jucafojl

jucafojl5#

最后放弃了这条路线,因为理想情况下,CI测试回购协议中的GOING内容,而不是回购协议中的IS内容。
最终解决方案是指向一个伪分支,然后强制将CI生成的合并提交推送到该分支。
这是一个小的hacky,但提供了准确的反馈如何包将被消费后合并。

**更新:**能够找到更好的解决方案。https://stackoverflow.com/a/61110638/2565025

相关问题