196

我在 Xcode 11 中有一个项目,我添加了 Swift 包管理器依赖项。我现在意识到我不再需要以前添加到项目中的包依赖项之一。

正如您在下面看到的,没有File > Swift Packages用于从 Swift 包管理器中删除此项目的打包器的选项。

Swift 包菜单选项

我尝试从project.xcworkspace/xcshareddata/swiftpm/Package.resolved文件中的数组中删除包。但它仍然没有从 Xcode 中删除它,下次我读取文件Update to Latest Package Versions的条目时Package.resolved

如何删除项目中的 Swift 包管理器依赖项?

4

7 回答 7

478
  1. 打开 Xcode
  2. 选择您的项目
  3. 看顶部中间
  4. 选择Swift 包管理器菜单

您将能够管理您的包(添加/删除)

在此处输入图像描述

于 2019-06-22T22:44:13.017 回答
11

Swift 包管理器(SPM)依赖

添加依赖

1. Project Settings contains information about dependencies. 
2. File -> Swift Packages -> Add Package Dependency...
3. Target -> General -> Frameworks, Libraries, and Embedded Content -> Add Items -> Add Other... -> Add Package Dependency...

目标设置包括依赖项的产品

编辑依赖

要编辑 URL,您可以.pbxproj使用repositoryURL

删除依赖

Project -> Packages -> <Select dependency> -> -

[本地 Swift 包管理器(SPM)]
[iOS 依赖管理器]

于 2021-03-31T16:15:41.157 回答
2

除了皮埃尔的回答,这让我发疯,我有一个正在编辑的子项目,我忘记了(它在一个子文件夹中)。即使我在“Swift Packages”窗格中删除了它,它仍然会回来。删除该子文件夹引用可确保 PM 依赖项消失。

于 2019-07-11T01:46:57.043 回答
2

我删除了 swift 包,但它的依赖项仍在项目中显示。我看到 swift 包仍在左窗格底部的 Frameworks 文件夹中, 在此处输入图像描述

我从那里删除了它,依赖关系消失了。

于 2021-01-07T05:56:20.833 回答
1

嵌套的 Swift 包依赖项

背景

File正如其他答案所提到的,我们可以通过-> Swift Packages->工作流程非常容易地将 Swift 包导入项目Add Package Dependency,这适用于大多数应用程序。我已添加此答案作为对具有嵌套依赖项的包的进一步优化。

Swift 包不仅可以通过 Git 源代码签出导入,还可以通过一个或多个Package Products导入。就我而言,我想保留 Package,因为我在一个目标中使用了它,但没有在另一个目标中使用它。有时一个包包含多个我们不需要的依赖项,这是修剪未使用的依赖项的好机会。

未使用的进口

我最近犯了一个错误,我自动导入了 Swift Package 依赖项引用的所有模块,即使是那些我不需要的模块。这很常见,因为包可以有多个产品,每个产品都为不同的应用程序公开不同的 API。

如果您不确定是否需要导入,请检查并删除它。例如,一个包可以包含一个添加额外的不必要导入的 Objective-C 模块。

构建阶段的图像

OHHTTPStubs就我而言,我导入了一个通过多个嵌套库导出的Swift 包:OHHTTPStubsSwift在上面的示例中。

大概的概念

我们可以通过构建阶段或目标常规设置选项卡删除嵌套的 Swift 包依赖项,而无需删除包本身。删除不必要的依赖项是节省应用程序内存占用并简化构建时间的好习惯。

用于单元/UI 测试的嵌套依赖项

每个目标应该只导入它使用的库。

规则:

  1. 在为整个项目导入时,只导入您实际需要的 Swift 包管理器产品。如果您只使用包装子规范,请仅导入该子规范。
  2. Host Application Target 不需要导入 UI 测试库。我们可以从 中的 Target General 选项卡中安全地删除这些库Frameworks, Libraries, and Embedded Content。这将自动取消产品与Build Phases此目标选项卡的链接。
  3. 我们的 UI 测试目标可以通过Build Phases->导入它需要的 Package Products Link Binary with Libraries。如果依赖项仅在 UI 测试中使用,请将其从 Host Application Target 中删除Frameworks, Libraries, and Embedded Content
  4. 单元测试目标无法链接到未嵌入在主机应用程序中的库。因此,我们需要将单元测试中使用的产品添加到Frameworks, Libraries, and Embedded Content. 我们不需要Link Binary with Libraries为单元测试目标添加任何产品。

以我的经验为例

OHHTTPStubsSwift是等效的 Swift CocoaPods 子规范,它在 ObjC API 上添加了更好的 API 包装器,但已经导入了 ObjC API ( OHHTTPStubs)。

我从主机目标中删除了 Package Products,因为我只在 UI 测试中使用它。然后我只导入了OHHTTPStubsSwift通过构建阶段。

于 2021-08-28T14:38:38.810 回答
1

首先,我从 Package.swift 中的依赖项和目标中删除了它,然后我重新生成了我的项目文件swift package generate-xcodeproj

于 2019-11-01T12:00:53.037 回答
0

步骤 1. 导航到您的项目目录。步骤 2. 查找 'your-project.xcodeproj' 步骤 3. 在文本编辑器中打开它,而不是 Xcode(您必须使用 finder 并通过打开所有应用程序 -> 文本编辑器来使用任何文本编辑器步骤 4. 搜索所有实例有问题的包,例如......我有一个包'UIKit'导致问题,我刚刚删除了它的所有实例并确保不打扰文件的其余部分。步骤4。打开/重新使用 xcode 打开 xcode 项目并享受。

于 2021-12-21T07:16:28.197 回答