如何在Xcode 11中删除Swift包依赖?

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

正如你可以在下面看到的,在File > Swift Packages下没有从这个项目的Swift包管理器中删除打包器的选项。

Swift Packages Menu Options .

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

如何在我的项目中删除Swift Package Manager依赖?

94567 次浏览
  1. 打开Xcode
  2. 选择您的项目
  3. 看上面的中间部分
  4. 选择Swift Package Manager菜单

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

enter image description here

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

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

我删除了swift包,但它的依赖关系仍然显示在项目中。 我看到swift包仍然在左侧窗格底部的Frameworks文件夹中, enter image description here < / p >

我把它从那里移走了,依赖性消失了。

Swift Package Manager(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> -> -
< p > [本地Swift包管理器(SPM)]
[iOS依赖管理器] < / p >

嵌套的Swift包依赖关系

背景

正如其他答案所提到的,我们可以通过文件 ->斯威夫特包添加包依赖工作流,这适用于大多数应用程序。我添加了这个答案,作为对嵌套依赖关系包的进一步优化。

Swift包的导入不仅仅是通过Git源代码签出,还包括一个或多个包装产品。在我的例子中,我想要保留Package,因为我在一个目标中使用了它,而不是在另一个目标中。有时一个包包含多个我们不需要的依赖项,这是一个删除未使用的依赖项的好机会。

未使用的导入

我最近犯了一个错误,我自动导入了Swift包依赖引用的所有模块,甚至那些我不需要的模块。这很常见,因为包可以有多个product,每个product为不同的应用程序公开不同的api。

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

image of build phases .

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

一般的想法

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

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

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

规则:

  1. 在为整个项目导入时,只导入你实际需要的Swift Package Manager Products。如果只使用包装器子规范,则只导入包装器子规范。
  2. 主机应用程序目标不需要导入UI测试库。我们可以安全地从框架、库和嵌入式内容中的Target General选项卡中删除这些库。这将自动从目标的构建阶段选项卡中断开Product的链接。
  3. 我们的UI测试目标可以通过构建阶段 ->导入它需要的Package Products;用库链接二进制文件。如果依赖项仅在UI测试中使用,请从主机应用程序目标框架、库和嵌入式内容中删除它。
  4. 单元测试目标不能链接到未嵌入在主机应用程序中的库。因此,我们需要在框架、库和嵌入式内容的常规设置选项卡中将单元测试中使用的产品添加到主机应用程序目标。我们需要为单元测试目标向用库链接二进制文件添加任何产品。

以我的经验为例

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

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

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

我的发现没有答案。如果git链接已断开,则*.xcodeproj/project。Pbxproj必须更改为适当的链接。Xcode会自动捕获修改并更新。