iOS产品可能包含双重直接代码

时间:2018-03-03 14:53:58

标签: ios swift frameworks swift-package-manager xcode-project

我们的工作项目依赖于一个名为“LibraryAlpha”的动态库。此外,我们的工作项目依赖于一个名为“LibraryBeta”的动态库。而且,恰好是“LibraryBeta”也依赖于“LibraryAlpha”。

我们的项目嵌入了.framework由不同的构建,即嵌入来自单独的.xcodeproj的目标。

在以下情况下,以这种或另一种方式将“LibraryAlpha”的符号和实现(函数和类)以两次方式嵌入到项目包中的可能性是多少:

  • “LibraryAlpha”的项目目标嵌入到项目的包中,“LibraryAlpha”的项目目标嵌入到“LibraryBeta”的包中。
  • “LibraryAlpha”的项目目标嵌入到项目的包中,“LibraryAlpha”的源代码与“LibraryBeta”的源代码静态链接
  • “LibraryAlpha”的项目目标嵌入到项目的包中,“LibraryBeta”仅链接而不嵌入“LibraryAlpha”

此外,对于使用SPM生成的.xcodeproj,通常需要将依赖项模块作为项目中的单独目标,这些目标链接并嵌入到main(声明其依赖项的模块)bundle中。所以问题是,如果在我们的项目中我链接并嵌入“LibraryAlpha”而不是项目“LibraryAlpha”中的目标会发生什么,但是那个在“LibraryBeta”项目中为“LibraryAlpha”的文件生成了目标?< / p>

1 个答案:

答案 0 :(得分:1)

管理.xcodeprojs&#39;的复杂依赖关系的正确方法在问题的数字中,目标是根本不管理

  • 存档 - &gt;导出 - &gt;安装&#34; LibraryAlpha&#34;
  • 存档 - &gt;导出 - &gt;安装&#34; LibraryBeta&#34;,链接已安装&#34; LibraryAlpha&#34;
  • 存档 - &gt;导出 - &gt;安装任意数量的其他动态链接的库&#34; LibraryAlpha&#34;
  • 嵌入并链接已安装的&#34; LibraryAlpha&#34;,&#34; LibraryBeta&#34;和朋友们。

为了简化Apple目标项目中依赖项的管理,强烈建议您使用依赖项管理器,例如CarthageCocoaPods。它们不仅可以使部署成为自动化的天堂,还有助于消除将框架全局安装到托管操作系统中的需要。

旧的,错误的答案:

  • 拥有&#34; LibraryAlpha&#34;作为一个单独的.xcodeproj,它有自己的目标来构建自己
  • 拥有&#34; LibraryBeta&#34;动态链接特定的&#34; LibraryAlpha&#34;没有嵌入的目标
  • 让我们的项目动态链接到&#34; LibraryBeta&#34;特别是&#34; LibraryAlpha&#34;目标,显然,嵌入两者。

这不是Swift Package Manager在解决依赖关系和生成.xcodeproj时所做的事情。 SPM通常会将所有源代码放在一个项目中并为&#34; LibraryAlpha&#34;创建目标。在它。

这样就不会多次包含任何代码,而且一切都在运行时很好地解决了。

这当然没有回答这个问题,问题只是出于问题。但要记住这一点很重要。