42

在我创建一个带有依赖项的新 swift 包后,我调用swift package generate-xcodeproj. 如果我的依赖项有新版本,我会调用swift package update. 我的依赖项的新版本被下载并构建,但 Xcode 现在对旧版本的依赖项有一个错误的引用。我可以swift package generate-xcodeproj再次调用,但这将删除我设置的任何自定义目标。

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

4

5 回答 5

54

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

对我来说,解决方案是简单地转到File-> Swift Packages-> Update to Latest Package Versions

在此处输入图像描述

于 2020-07-14T18:53:22.193 回答
18

很多包不更新的问题是因为s​​wift包版本规则限制自动包更新到当前主要版本,即包的v3.3.1会更新到v3.4.0,但不会自动更新到v4.0.1 . 因此,在 Xcode 中使用更新选项不一定会获得最新的主要版本的包。

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

在此处输入图像描述

于 2021-05-19T19:33:31.540 回答
12

您可以在单独的项目中管理依赖项,而不是尝试保留对生成项目的更改,就像 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 中的依赖项并根据需要重新生成依赖项目。

于 2017-02-18T18:28:48.830 回答
5

- 使用 Xcode 更新单个依赖项

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

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


- 使用 Xcode 更新所有依赖项

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

党卫军


带 GUI 的单个包(Xcode 12 及更高版本)

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

Xcode 13

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

于 2021-08-19T15:46:34.583 回答
3

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

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

但两者都没有工作。

我手动去更改了目标-> Swift 包-> 版本规则,Xcode 自动安装了较新的版本,我没有出错。

于 2021-05-03T10:08:55.043 回答