我有一个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
正在使用该缓存。
到目前为止没有任何效果。有没有人经历过同样的问题,能够提供任何建议和/或帮助?
1条答案
按热度按时间lmvvr0a81#
事实证明,现在似乎有办法用
xcodebuild
命令行工具达到与Xcode的Update Package
或Update to Latest Versions
相同的结果。命令行工具在更新包时依赖于存储在派生数据中的数据。由于Gregory Higley的回答here,我能够通过删除特定构建作业的派生数据来解决这个问题
Showcase.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
排除在git索引之外,Package.resolved
加到.gitignore
以保持这种方式,Jenkins
文件内的声明性流水线:我在提问时提到的任何其他步骤都不是实现我的目标所必需的:
~/Library/Cache/org.swift.swiftpm
或~/Library/org.swift.swiftpm
cloned_source_packages_path: "SourcePackages"
通过Fastlane明确指定SPM克隆的源包路径再次大吼一声,以Gregory Higley为自己的进场。