我想以编程方式更新示例项目使用的Swift软件包的版本。
Xcode> 11提供了一个菜单选项:
文件> Swift软件包>更新到最新软件包版本
这将更新Package.resolved
文件以指向特定版本。
此文件位于:
MyProject.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
如何从命令行触发CI构建的此操作?
答案 0 :(得分:3)
尝试xcodebuild -resolvePackageDependencies
答案 1 :(得分:1)
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 会根据需要简单地重新生成它。
答案 2 :(得分:-1)
我相信您正在寻找swift package update
命令:
运行swift软件包更新会将所有依赖项更新为最新的 合格版本,并相应地更新Package.resolved文件。
请参阅Swift软件包管理器documentation。
答案 3 :(得分:-1)
放弃此路线,因为理想情况下CI会测试回购中的 GOING ,而不是回购中的 IS 。
最终解决方案是指向一个虚拟分支,然后强制将CI生成的合并提交推送到该分支。
有点笨拙,但可以提供有关合并后如何使用该软件包的准确反馈。
更新: 能够找到一种更好的解决方案。 https://stackoverflow.com/a/61110638/2565025