gpt4 book ai didi

swift - Travis CI - Swift 包管理 - 结账已经存在?

转载 作者:行者123 更新时间:2023-12-01 18:03:36 24 4
gpt4 key购买 nike

尝试在配置为使用 Swift 包管理器的项目中设置示例项目并收到奇怪的错误。

项目结构:

MyProject/
- Package.swift
MyProject/
- etc...
Samples/
- MySampleProject/

Swift 包存储库设置:

MySampleProject 设置为使用 travis 作业中应存在的本地 Swift 包:

file:///Users/travis/build/MyProject/MyProject <- 指向分支:HEAD

Travis 构建命令:

travis 脚本 cd 到 Sample/MySampleProject 并运行:

xcodebuild clean build -target MySampleProject -sdk iphonesimulator

错误:

在运行期间,travis 声称包的 checkout 已经存在。

来自日志:

Resolve Package Graph

Fetching /Users/travis/build/<namespace>/MyProject

Cloning /Users/travis/build/<namespace>/MyProject

xcodebuild: error: Could not resolve package dependencies:

An unknown error occurred. '/Users/travis/Library/Developer/Xcode/DerivedData/MySampleProject-agdvdspgtwakvignsmkkrkoxijnm/SourcePackages/checkouts/MyProject' exists and is not an empty directory (-4)

这在本地有效。为什么 checkout 已经存在于 travis 构建的派生数据中?我没有运行任何特殊命令来修改有关 SPM 的任何内容。

最佳答案

需要意识到的两件事:

  1. 该错误消息非常具有误导性。如果实际上没有要拉取的提交,您将收到此错误消息。

  2. 一位同事指出 Travis 实际上使用 refs/pull/$TRAVIS_PULL_REQUEST/merge 来获取 $TRAVIS_COMMIT

完整解决方案:

在 plist 中查找与 XCRemoteSwiftPackageReference 对应的对象您可以通过在文本编辑器中打开 YourProject.xcodeproj/project.pbxproj 并搜索 XCRemoteSwiftPackageReference 来找到它。获取 ID,因为您需要在构建步骤中对其进行硬编码。

注意:如果您删除并重新添加该软件包,则需要更新此内容。

接下来使用 PlistBuddy 将分支更新为拉取请求的合并引用。

    echo "Updating project file to point to merge commit at: refs/pull/$TRAVIS_PULL_REQUEST/merge"
/usr/libexec/PlistBuddy \
-c "set :objects:F4CEA53E23C29C9E0086EB16:requirement:branch refs/pull/$TRAVIS_PULL_REQUEST/merge" \
YourProject.xcodeproj/project.pbxproj

# Redirecting to /dev/null because we only care about errors here and the full output drowns Travis
xcodebuild build -scheme YourScheme \
-sdk iphonesimulator > /dev/null
}

关于swift - Travis CI - Swift 包管理 - 结账已经存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58682452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com