Travis CI - Swift 包管理 - 结帐已经存在?
Travis CI - Swift Package Manage - checkout already exists?
正在尝试在配置为使用 Swift 包管理器的项目中设置示例项目并出现奇怪的错误。
项目结构:
MyProject/
- Package.swift
MyProject/
- etc...
Samples/
- MySampleProject/
Swift 包存储库设置:
MySampleProject
设置为使用 travis 作业中应该存在的本地 Swift 包:
file:///Users/travis/build/MyProject/MyProject
<- 指向分支:HEAD
Travis 构建命令:
travis 脚本 cd 进入 Sample/MySampleProject 和 运行s:
xcodebuild clean build -target MySampleProject -sdk iphonesimulator
错误:
在 运行 期间,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 的任何内容。
要实现的两件事:
该错误消息非常具有误导性。如果实际上没有要拉取的提交,您将收到此错误消息。
一位同事指出,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
}
谢谢,以上确实对我有帮助。这是我所做的。
我去掉了using项目中的包依赖,然后删除了../Xcode/DerivedData/usingProject目录。然后,我打开 Xcode 中的 swift 包并对最新版本(标记为 1.0.11)进行了 git 检查。最后,在 Xcode 中,我选择了 using project -> Swift Packages 并将本地 URL 添加(+)到包的文件夹中:
文件:///Users/me/repository/mySwiftPackageFolder
构建终于在 using 项目上运行了。
请注意,简单地删除派生数据或提到的结帐目录并不能修复错误。我需要一个干净的派生数据、一个好的包检查和一个包文件夹 URL.
正在尝试在配置为使用 Swift 包管理器的项目中设置示例项目并出现奇怪的错误。
项目结构:
MyProject/
- Package.swift
MyProject/
- etc...
Samples/
- MySampleProject/
Swift 包存储库设置:
MySampleProject
设置为使用 travis 作业中应该存在的本地 Swift 包:
file:///Users/travis/build/MyProject/MyProject
<- 指向分支:HEAD
Travis 构建命令:
travis 脚本 cd 进入 Sample/MySampleProject 和 运行s:
xcodebuild clean build -target MySampleProject -sdk iphonesimulator
错误:
在 运行 期间,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 的任何内容。
要实现的两件事:
该错误消息非常具有误导性。如果实际上没有要拉取的提交,您将收到此错误消息。
一位同事指出,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
}
谢谢,以上确实对我有帮助。这是我所做的。
我去掉了using项目中的包依赖,然后删除了../Xcode/DerivedData/usingProject目录。然后,我打开 Xcode 中的 swift 包并对最新版本(标记为 1.0.11)进行了 git 检查。最后,在 Xcode 中,我选择了 using project -> Swift Packages 并将本地 URL 添加(+)到包的文件夹中:
文件:///Users/me/repository/mySwiftPackageFolder
构建终于在 using 项目上运行了。
请注意,简单地删除派生数据或提到的结帐目录并不能修复错误。我需要一个干净的派生数据、一个好的包检查和一个包文件夹 URL.