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

如下所示,在文件> Swift Packages下没有选项用于从该项目的Swift Package Manager中删除一个打包器。

我已经尝试从project.xcworkspace/xcshareddata/swiftpm/ package的数组中删除包。解决文件。但它仍然没有从Xcode中删除它,下次我更新到最新的包版本时,它会读取包的条目。解决文件。

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


当前回答

打开Xcode 选择您的项目 看上面的中间部分 选择Swift Package Manager菜单

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

其他回答

请按照以下步骤顺利地从Xcode项目中移除特定的包。

嵌套的Swift包依赖关系

背景

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

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

未使用的导入

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

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

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

一般的想法

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

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

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

规则:

Import only the Swift Package Manager Products you actually need when importing for the whole project. Import only the wrapper subspec if that is all you use. The Host Application Target doesn't need to import UI testing libraries. We can safely delete these libraries from the Target General tab in Frameworks, Libraries, and Embedded Content. This will automatically unlink the Product from the Build Phases tab for this Target. Our UI Testing Target can import the Package Products it needs via Build Phases -> Link Binary with Libraries. If a dependency is only used in UI Tests, delete it from the Host Application Target Frameworks, Libraries, and Embedded Content. The Unit Testing Target can't link to libraries that are not embedded in the Host Application. Thus, we need to add products used in Unit Tests to the Host Application Target in the General settings tab for Frameworks, Libraries, and Embedded Content. We DON'T need to add any Products to Link Binary with Libraries for the Unit Tests Target.

以我的经验为例

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

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

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

打开Xcode 选择您的项目 看上面的中间部分 选择Swift Package Manager菜单

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

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