如何在 Xcode 中更新 Swift 依赖项

问题描述 投票:0回答:7

创建一个带有依赖项的新 swift 包后,我调用

swift package generate-xcodeproj
。如果我的依赖项有新版本,我会调用
swift package update
。我的依赖项的新版本已下载并构建,但 Xcode 现在对旧版本的依赖项的引用不正确。我可以再次调用
swift package generate-xcodeproj
,但这将删除我设置的任何自定义目标。

如何在不删除自定义目标的情况下更新我的 swift 依赖项和 Xcode 项目?

swift xcode swift-package-manager
7个回答
86
投票

我偶然发现了这个问题,发现“如何在 Xcode 中更新 swift 依赖项”的解决方案可能已经改变,因为 Swift Packages 已经存在了几年了。

对我来说,解决方案就是简单地转到

File
->
Swift Packages
->
Update to Latest Package Versions


68
投票

许多软件包不更新的问题是因为 swift 软件包版本规则限制软件包自动更新仅限于当前主要版本,即软件包的 v3.3.1 会更新到 v3.4.0,但不会自动更新到 v4。 0.1。因此,使用 Xcode 中的更新选项并不一定能获得包的最新主要版本。

要解决此问题,请从项目面板打开项目,选择项目(而不是目标),然后选择“Swift Packages”选项卡。双击您要更新的软件包并将最低版本更改为下一个主要版本。


22
投票

- 使用 Xcode 更新单个依赖项

此方法将节省大量资源和时间。因为它不会强制其他包重新下载。

双击您提到的选项卡中的软件包,然后将版本更改为其他版本。然后它将重新检查远程存储库。这样做的好处是只更新选定的包。 (另外,最好在包中设置当前使用的版本。)


- 使用 Xcode 更新所有依赖项

从文件 -> Swift 包 -> 更新到最新的包版本


🤨 带 GUI 的单个包(Xcode 12 及以上)

右键单击左侧导航窗格中的包,然后选择更新包

Xcode 13

请注意,您将看到 Xcode 说更新所有包,但它只会更新选定的包


14
投票

您可以像 CocoaPods 一样在单独的项目中管理依赖项,而不是尝试保留对生成项目的更改。

开始新项目时:

  1. 为您的应用程序创建 Xcode 项目
    MyApp.xcodeproj
  2. 另存为工作空间
    MyApp.xcworkspace
  3. 为您的依赖项创建包
mkdir MyDeps && cd MyDeps
swift package init --type library
  1. 将依赖项添加到
    Package.swift
  2. 为依赖包生成Xcode项目
swift package generate-xcodeproj
  1. 将生成的项目
    MyDeps.xcodeproj
    添加到您的工作区
    MyApp.xcworkspace
  2. 将目标
    MyDeps.framework
    添加到应用程序的链接框架
    MyApp.xcodeproj

通过此设置,您可以自由更新 Package.swift 中的依赖项并根据需要重新生成依赖项目。


4
投票

我在使用 Xcode 12.5 时遇到了 CryptoSwift 问题。我的版本是1.3.1,问题在1.4.0中得到修复。 我试过了:

  1. 通过文件更新 -> Swift Packages -> 更新到最新的包版本。
  2. xcodebuild -resolvePackageDependency

但是两者都不起作用。

我手动去更改了目标 -> Swift 包 -> 版本规则 Xcode 自动安装了较新的版本,我就摆脱了错误。


0
投票

如果该库被特定目标使用,该库将不会更新到最新版本,至少在我的情况下(Xcode 14.2)。

我使用的是 OneSignal,它需要添加一个目标(OneSignalNotificationServiceExtension),该目标依赖于“框架和库”中的 OneSignal 库。

所以:

  1. 从扩展中的依赖项中删除所需的 lib 语音,
  2. 右键单击->“更新包”更新库
  3. 在“框架和库”中将更新的库重新添加到扩展

要删除哪一行以使库正确更新的屏幕截图(记得稍后阅读)。


0
投票

也许这会对某人有所帮助。

Project Explorer -> 根文件夹 -> 项目名称 -> 包依赖项 -> 更新所需的包版本

XCode screenshot

© www.soinside.com 2019 - 2024. All rights reserved.