使用 SPM 在 XCode11 中添加本地依赖项
Posted
技术标签:
【中文标题】使用 SPM 在 XCode11 中添加本地依赖项【英文标题】:Adding Local dependencies in XCode11 using SPM 【发布时间】:2019-08-09 22:17:06 【问题描述】:是否可以在 xcode 11 中将本地依赖项与 SPM 集成, 文件 > Swift 包 > 添加包依赖项... 它似乎只是填充并让我选择托管在 bitbucket 上的 git repos
我只是不确定我是否以正确的方式解决问题,也许我应该改用 Package.swift 文件?我在 Cocoapods 方面有很多经验,但我想扩展并尝试其他工具,特别是如果它们将在 xcode 中得到支持,因为它会接缝 SPM(我使用 xcode11 beta 5)
【问题讨论】:
也许这个 WWDC 2019 视频会有所帮助:developer.apple.com/videos/play/wwdc2019/410 【参考方案1】:我就是这样做的:
将您的包文件夹(在我的示例中为“DataStructures”)从 finder 直接拖放到目标的 Frameworks 组中。您会看到拖放的项目采用棕色文件夹颜色(您可以使用箭头“进入”)。 转到您的项目目标页面,在“框架和库”中单击“+”按钮。您的包应作为库显示在“工作区”区域中。【讨论】:
想添加一个注释,添加的包没有箭头来扩展其内容,以防它在Xcode的另一个窗口中打开,就像它与子项目一样.这让我第一次感到困惑。 不仅如此,如果您的包的项目是打开的,您将不会在“框架、库和嵌入式内容”的“工作区”下看到您的包。 @AirXygène 我这样做了,对我来说效果很好。当我将包拖到我的项目中时。但我必须再走一步。我想将我的一个包裹放入另一个包裹中。两者都在本地路径。知道如何做到这一点,因为将一个包拖放到另一个包对我不起作用,而且我还尝试在依赖项处设置本地路径,它会删除我的目标和所有内容。任何帮助将不胜感激。 @Sagar 你不能有嵌套包。但是您可以拥有依赖于其他包的包,因此您可以将所有包添加到同一级别。您在客户端包清单文件中声明依赖项。【参考方案2】:Xcode 12
如果您的项目中已经有您的软件包的远程版本并且想要在本地工作。还有一些额外的步骤...
1.确保本地包的版本高于远程版本
如果你不这样做,它会继续获取远程包
-
在 Project Navigator 中选择您的项目
在主窗口中选择 Swift Packages
选择要替换为本地的包并将其删除
转到文件 > Swift 包 > 添加包依赖项...
将本地包文件夹拖到包搜索栏,添加前缀
file://
点击下一步
确认最低版本高于远程版本。
【讨论】:
我需要使用本地 Package.swift 并且本指南中“通过拖放导入依赖项”的建议对我有用medium.com/@bartekzabicki/… 请注意,从技术上讲,您需要在 URL 中使用三个斜杠:file:///Users/name/...【参考方案3】:是的,Xcode 使这项基本任务变得不必要的困难。
不过,诀窍很简单:在您选择“添加包依赖项...”时弹出的工作表中,您可以在 URL 字段中输入 file:// URL。例如将包的文件夹拖到该字段中,这将在其中放置路径 - 例如'/Users/me/Documents/myShinyPackage/',然后在前面加上'file://',就可以继续了。
附录:正如一些人在下面的 cmets 中指出的那样,如果您与他人共享项目,这会出现问题,除非您对路径进行标准化。不过,个人使用也没问题。
【讨论】:
此方案与版本控制系统完全不兼容。 这应该是接受的答案!如果你在本地 git clone 仓库,这个解决方案可以完美运行。 您不能在“file://”URL 中指定相对路径。我尝试了“./dir”和“$(PROJECT_DIR)/dir”,但没有运气。所以,你不能把它提交到一个 repo 并期望它适用于他们的工作目录路径不同的人。【参考方案4】:本地 Swift 包管理器 (SPM)
[Dependency manager]
重点是:file://
+ git
可以在URL
字段中使用
file://<path>
//e.g.
file:///Users/alex/Desktop/MyProject
注意事项:
它适用于 git 存储库,因此请确保您事先提交了更改 当你添加一个 SPM 依赖File -> Swift Packages -> Add Package Dependency
它被添加到 project -> Swift Packages
和 implicit dependency
[About] 被添加到 Frameworks, Libraries, and Embedded Content
当您向框架提交新的更改时,不要忘记File -> Swift Packages -> Update to Latest Package Versions
产品文件夹
<path_derived_data>/<randomizer>/Build/Products/Debug
//e.g.
/Users/alex/Library/Developer/Xcode/DerivedData/SPMExperiments-bmmqumztjedpekaajffnaegxzwzg/Build/Products/Debug
[Local CocoaPods][Local Carthage]
【讨论】:
尝试从本地存储库(裸 git)获取,它一直抱怨它无法解决......不确定它是否可能。为什么遥控器必须在线?以上是关于使用 SPM 在 XCode11 中添加本地依赖项的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 5.1 将另一个包作为 SPM 中的依赖项导入另一个包