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 的任何内容。

要实现的两件事:

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

  2. 一位同事指出,Travis 实际上是在使用 refs/pull/$TRAVIS_PULL_REQUEST/merge 作为 $TRAVIS_COMMIT

  3. 的值

完整解决方案:

在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.