如何删除Swift Package Dependency in Xcode 11?

How to delete Swift Package Dependency in Xcode 11?

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

如下所示,File > Swift Packages 下没有用于从该项目的 Swift 包管理器中删除打包程序的选项。

我已经尝试从 project.xcworkspace/xcshareddata/swiftpm/Package.resolved 文件的数组中删除包。但它仍然没有从 Xcode 中删除它,下次我 Update to Latest Package Versions 它会重新添加 Package.resolved 文件的条目。

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

  1. 打开Xcode
  2. Select 你的项目
  3. 看上中部
  4. Select Swift 包管理器 菜单

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

除了 Pierre 的回答,这让我发疯,我有一个正在编辑的子项目,我忘记了(它在子文件夹中)。即使我在 "Swift Packages" 窗格中将其删除,它仍会再次出现。删除该子文件夹引用可确保 PM 依赖项消失。

首先我从 Package.swift 中的依赖项和目标中删除了它,然后我用 swift package generate-xcodeproj

重新生成了我的项目文件

我删除了 swift 包,但它的依赖项仍然显示在项目中。 我看到 swift 包仍在左窗格底部的 Frameworks 文件夹中,

我从那里删除了它,依赖项也消失了。

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,您可以使用 repositoryURL

编辑 .pbxproj

删除依赖

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


[iOS Dependency manager]

嵌套Swift 包依赖

背景

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

的包的进一步优化

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

未使用的导入

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

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

在我的例子中,我导入了一个通过多个嵌套库导出的 Swift 包:上例中的 OHHTTPStubsOHHTTPStubsSwift

总体思路

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

Unit/UI 测试的嵌套依赖关系

Each target should only import the libraries it uses.

规则:

  1. 在为整个项目导入时,仅导入您实际需要的Swift 包管理器产品。如果您仅使用包装器子规范,则只导入它。
  2. 主机应用程序目标不需要导入 UI 测试库。我们可以从 Frameworks、Libraries 和 Embedded Content 的 Target General 选项卡中安全地删除这些库。这将自动从该目标的 构建阶段 选项卡中取消link 产品。
  3. 我们的 UI 测试目标可以通过 Build Phases -> Link Binary with Libraries[= 导入它需要的包产品69=]。如果依赖项仅用于 UI 测试,请将其从主机应用程序目标 框架、库和嵌入式内容 .
  4. 中删除
  5. 单元测试目标无法 link 到未嵌入到主机应用程序中的库。因此,我们需要在 Frameworks、Libraries 和 Embedded Content 的常规设置选项卡中将单元测试中使用的产品添加到主机应用程序目标。我们不需要 需要将任何产品添加到Link 带有库的二进制文件 用于单元测试目标。

我的经验示例

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

我从主机目标中删除了包产品,因为我只在 UI 测试中使用它。然后我只通过 Build Phases 导入了 OHHTTPStubsSwift

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