SPM 缓存在 github 操作上不起作用,有什么想法吗?

Ale*_*cha 8 github swift swift-package-manager github-actions

我正在尝试使用缓存操作在 GitHub Actions 上缓存 SPM 包,我遵循以下示例:

  - uses: actions/cache@v2
  with:
    path: Myproject.xcworkspace/xcshareddata/swiftpm/Package.resolved
    key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
    restore-keys: |
      ${{ runner.os }}-spm-
Run Code Online (Sandbox Code Playgroud)

我觉得当你使用 Xcode 添加 SPM 包时不可能使用缓存

有人成功地将缓存添加到您的项目中,甚至通过 Xcode 管理 SPM 吗?或者我的 .yml 文件可能有问题,但不幸的是我无法使其工作。

Cas*_*sey 14

您使用的path参数不正确。

路径 - 要缓存和恢复的文件、目录和通配符模式的列表。有关支持的模式,请参阅@actions/glob

它不应该设置path为解析文件,而应该指向您希望缓存的任何文件/文件夹。

的文档actions/cache实际上准确地展示了如何将其用于 SPM:

- uses: actions/cache@v2
  with:
    path: .build
    key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
    restore-keys: |
      ${{ runner.os }}-spm-
Run Code Online (Sandbox Code Playgroud)

由于您让 Xcode 管理 Swift 包,因此文件最终存储在与使用swift package.

此变体应该找到文件(但 Xcode 可以随时更改存储它们的位置):

- uses: actions/cache@v2
  with:
    path: /Users/runner/Library/Developer/Xcode/DerivedData/**/SourcePackages/checkouts 
    key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
    restore-keys: |
      ${{ runner.os }}-spm-
Run Code Online (Sandbox Code Playgroud)

由于您使用的是 CI + SPM,我建议您停止通过 Xcode 管理 SPM,而是手动使用swift package. 这将使您能够更可预测.buildSPM 包的位置 ( )。