【问题标题】:Adding Local dependencies in XCode11 using SPM使用 SPM 在 XCode11 中添加本地依赖项
【发布时间】:2019-08-09 22:17:06
【问题描述】:

是否可以在 xcode 11 中将本地依赖项与 SPM 集成, 文件 > Swift 包 > 添加包依赖项... 它似乎只是填充并让我选择托管在 bitbucket 上的 git repos

我只是不确定我是否以正确的方式解决问题,也许我应该改用 Package.swift 文件?我在 Cocoapods 方面有很多经验,但我想扩展并尝试其他工具,特别是如果它们将在 xcode 中得到支持,因为它会接缝 SPM(我使用 xcode11 beta 5)

【问题讨论】:

标签: swift package-managers xcode11


【解决方案1】:

我就是这样做的:

  • 将您的包文件夹(在我的示例中为“DataStructures”)从 finder 直接拖放到目标的 Frameworks 组中。您会看到拖放的项目采用棕色文件夹颜色(您可以使用箭头“进入”)。
  • 转到您的项目目标页面,在“框架和库”中单击“+”按钮。您的包应作为库显示在“工作区”区域中。

【讨论】:

  • 想添加一个注释,添加的包没有箭头来扩展其内容,以防它在Xcode的另一个窗口中打开,就像它与子项目一样.这让我第一次感到困惑。
  • 不仅如此,如果您的包的项目是打开的,您将不会在“框架、库和嵌入式内容”的“工作区”下看到您的包。
  • @AirXygène 我这样做了,对我来说效果很好。当我将包拖到我的项目中时。但我必须再走一步。我想将我的一个包裹放入另一个包裹中。两者都在本地路径。知道如何做到这一点,因为将一个包拖放到另一个包对我不起作用,而且我还尝试在依赖项处设置本地路径,它会删除我的目标和所有内容。任何帮助将不胜感激。
  • @Sagar 你不能有嵌套包。但是您可以拥有依赖于其他包的包,因此您可以将所有包添加到同一级别。您在客户端包清单文件中声明依赖项。
【解决方案2】:

Xcode 12

如果您的项目中已经有您的软件包的远程版本并且想要在本地工作。还有一些额外的步骤...

1.确保本地包的版本高于远程版本

如果你不这样做,它会继续获取远程包

  1. 在 Project Navigator 中选择您的项目
  2. 在主窗口中选择 Swift Packages
  3. 选择要替换为本地的包并将其删除
  4. 转到文件 > Swift 包 > 添加包依赖项...
  5. 将本地包文件夹拖到包搜索栏,添加前缀file://
  6. 点击下一步

确认最低版本高于远程版本。

【讨论】:

  • 我需要使用本地 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 -&gt; Swift Packages -&gt; Add Package Dependency 它被添加到 project -&gt; Swift Packagesimplicit dependency[About] 被添加到 Frameworks, Libraries, and Embedded Content
  • 当您向框架提交新的更改时,不要忘记File -&gt; Swift Packages -&gt; 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)获取,它一直抱怨它无法解决......不确定它是否可能。为什么遥控器必须在线?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2013-12-20
  • 2022-10-21
  • 2016-02-22
  • 2018-09-16
  • 2011-05-22
相关资源
最近更新 更多