尝试在配置为使用 Swift Package Manager 的项目中设置示例项目并收到奇怪的错误。
项目结构:
MyProject/
- Package.swift
MyProject/
- etc...
Samples/
- MySampleProject/
Swift 包存储库设置:
MySampleProject
设置为使用 travis 作业中应存在的本地 Swift 包:
file:///Users/travis/build/MyProject/MyProject
HEAD
特拉维斯构建命令:
travis 脚本 cd 到 Sample/MySampleProject 并运行:
xcodebuild clean build -target MySampleProject -sdk iphonesimulator
Error:
在运行过程中,travis 声称包的签出已经存在。
从日志中:
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)
这在本地有效。为什么签出已经存在于 travis 构建的派生数据中?我没有运行任何特殊命令来修改有关 SPM 的任何内容。
需要意识到两件事:
该错误消息非常具有误导性。如果实际上没有要拉取的提交,您将收到此错误消息。
一位同事指出特拉维斯实际上正在使用refs/pull/$TRAVIS_PULL_REQUEST/merge
的价值$TRAVIS_COMMIT
完整解决方案:
在plist中找到对应的对象XCRemoteSwiftPackageReference
你可以通过打开找到这个YourProject.xcodeproj/project.pbxproj
在文本编辑器中并搜索XCRemoteSwiftPackageReference
。获取 ID,因为您需要在构建步骤中对其进行硬编码。
Note:如果删除并重新添加该软件包,则需要更新此内容。
接下来使用 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)