Swift软件包管理器依赖过时的源代码

ocebsuys  于 2022-12-10  发布在  Swift
关注(0)|答案(1)|浏览(142)

我有一个SwiftPM的问题,这是让我发疯。
假设我有一个swift包项目(不涉及Xcode项目)。从这里开始我们称它为SDK。SDK位于它自己的git仓库中。所以我想通过将SDK添加为依赖项来为该SDK构建一个Showcase应用程序,通过Xcode而不是Package.swift文件管理swift软件包。该展示部署到我们的QA团队,他们应该能够始终使用该展示测试SDK的最新开发版本。
因此,我自然会通过定义分支develop. x1c 0d1x来配置Xcode中的包依赖关系
现在,当我在SDK中更改某项内容,将其推到develop分支上,并希望在展示区中使用该更改时,我只需右键单击展示区中的包,然后单击Update Package,这样做效果很好。
问题来了:这种方法在我们的Jenkins CI上不起作用。我不知道我在这里做错了什么,但是xcodebuild命令行工具不会注意到SDK的develop分支上的某些更改,并且会 checkout 旧版本。
到目前为止,我尝试了:

  • 我从git索引中删除了Package.resolved,并将其添加到.gitignore中,因此在git克隆/ checkout 之后应该没有Package.resolved文件
  • 我在构建之前删除了~/Library/Cache/org.swift.swiftpm~/Library/org.swift.swiftpm
  • 我在每次构建之前删除Jenkins构建作业的任何先前创建的工作空间
  • 我们使用的是Fastlane,因此我还将克隆的源包路径显式设置为工作区中的某个路径,以确保在通过cloned_source_packages_path: "SourcePackages"清理工作区时删除克隆的源

Fastlane生成的xcodebuild命令如下所示:$ xcodebuild -resolvePackageDependencies -scheme ScannerShowcase -project ScannerShowcase.xcodeproj -configuration Release -clonedSourcePackagesDirPath SourcePackage
Fastlane健身房摘要如下所示:

我希望如果我删除所有缓存的包,并且没有任何Package.resolved文件存在,xcodebuild会将swift包解析为可用的最新版本。相反,似乎仍然有一些东西缓存在某处,并且xcodebuild正在使用该缓存。
到目前为止没有任何效果。有没有人经历过同样的问题,能够提供任何建议和/或帮助?

lmvvr0a8

lmvvr0a81#

事实证明,现在似乎有办法用xcodebuild命令行工具达到与Xcode的Update PackageUpdate to Latest Versions相同的结果。
命令行工具在更新包时依赖于存储在派生数据中的数据。由于Gregory Higley的回答here,我能够通过删除特定构建作业的派生数据来解决这个问题

  • Showcase.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved排除在git索引之外,
  • Package.resolved加到.gitignore以保持这种方式,
  • 以及将以下阶段添加到Jenkins文件内的声明性流水线:
stage('Clean up') {
    steps {
        script { env.DERIVED_DATA_PATH=sh(returnStdout: true, script: "xcodebuild -showBuildSettings | grep -m 1 BUILD_DIR | grep -oE \"/.*\" | sed 's|/Build/Products||'") }
        echo "Derived data path is: ${env.DERIVED_DATA_PATH}"
        // The above will return a folder with a name like /Users/you/Library/Developer/Xcode/DerivedData/MyProject-ehdkocavaenextdcrsaszjdmyssx
        sh script: "rm -rf ${env.DERIVED_DATA_PATH}", label: "Removing derived project data ..."
    }
}

我在提问时提到的任何其他步骤都不是实现我的目标所必需的:

  • 无需删除~/Library/Cache/org.swift.swiftpm~/Library/org.swift.swiftpm
  • 不需要删除之前在构建节点上创建的任何工作区
  • 无需使用. cloned_source_packages_path: "SourcePackages"通过Fastlane明确指定SPM克隆的源包路径

再次大吼一声,以Gregory Higley为自己的进场。

相关问题