Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS库项目中包含库_Ios_Xcode_Cocoapods - Fatal编程技术网

在iOS库项目中包含库

在iOS库项目中包含库,ios,xcode,cocoapods,Ios,Xcode,Cocoapods,我正在编写一个iOS库,它依赖于其他一些开源库。显然,不可能有两个同名的类,因此库可能会编译,而可能使用它的项目也会编译,但它们不能很好地协同工作(在链接阶段) 该库面向大量读者,因此我无法假设这些开发人员是否将导入相同的库,或者是否使用相同库的不同、不兼容版本 我一直在四处寻找,但找不到任何解决我问题的明确方法(可能没有)。到目前为止,我正在考虑以下选择: 通知用户X库已经包含在项目中,因此他们也不包含它们。这意味着他们不能使用不同版本的X库 作为第一个版本的改进版本,使用CocoaPods

我正在编写一个iOS库,它依赖于其他一些开源库。显然,不可能有两个同名的类,因此库可能会编译,而可能使用它的项目也会编译,但它们不能很好地协同工作(在链接阶段)

该库面向大量读者,因此我无法假设这些开发人员是否将导入相同的库,或者是否使用相同库的不同、不兼容版本

我一直在四处寻找,但找不到任何解决我问题的明确方法(可能没有)。到目前为止,我正在考虑以下选择:

  • 通知用户X库已经包含在项目中,因此他们也不包含它们。这意味着他们不能使用不同版本的X库
  • 作为第一个版本的改进版本,使用CocoaPods,因此依赖关系会自动解决。仍然有两个版本的库不能共存的缺点
  • 导入并重命名我的库所依赖的所有类,并为它们添加前缀,这样名称就不会与原始名称冲突。这是一项乏味的工作,但更重要的是,它的缺点是我无法将代码从原始库中拉/推送到原始库中,因为代码会发生太多变化。在我看来,从用户的角度来看,这仍然是最好的选择
你能想出更好的主意吗?我是图书馆项目的新手,所以可能有一些明显的东西我遗漏了


我们还没有决定是以二进制还是源代码的形式发布。如果有理由选择一个或另一个,我也想听听你的意见。

当我面临这个问题时,我选择了你的第三个选项,并在我的库中的依赖类前面加上前缀。您可能想考虑这样做的原因,而不是依赖用户导入其他内容,这是因为您可以保证兼容性,并且不必担心您所依赖的版本。p> 第一点-

通知用户X库已包含在项目中, 所以他们也不包括他们

因此,您有一个静态库傻瓜库.a,它有一个第三方依赖项Barlib.a,为了让傻瓜库能够构建,傻瓜库的
头搜索路径必须设置为Barlib的公共头的路径。没有了

如果您正在分发源代码,您可以使用CocoaPods(这是一个很好的方法),或者您可以将Barlib的存储库添加为存储库的git子模块(或您选择的VCS),并将
标题搜索路径
硬编码到该路径,或者,您可以要求您的用户获取自己的Barlib并手动编辑
标题搜索路径
到正确的路径(如果您选择CoCoapod或子模块路径,用户也可以轻松地执行此操作,因此有更多选项)

您的项目中没有任何来自Barlib的内容。

另一方面,如果您正在为用户分发二进制文件以链接到他们的应用程序,则必须在说明中指定傻瓜库要求将Barlib链接到应用程序。关于如何获得Barlib的说明会很好

Barlib中的任何内容都不在您的项目中或编译到您的库中。

第二点-

使用CocoaPods,这样依赖关系就会自动解决。还有 该库的两个版本不能共存的缺点

在一个应用程序中使用同一个库的两个版本是不可能的,但是最终用户已经需要Barlib 3.0,想要使用您的傻瓜库,但是傻瓜库需要Barlib 4.0的情况永远不会出现-这取决于您开发人员。您可以慷慨大方,支持多个版本的Barlib(也就是说,傻瓜需要使用的是链接到应用程序中的Barlib1.0、Barlib2.0、Barlib3.0或Barlib4.0,类似于编写支持iOS5和iOS6的应用程序),或者,您可以固执己见,需要特定版本,如果用户已经需要不同版本的Barlib,不幸的是,如果他们想使用您的库,他们将不得不更改代码

第三点-

导入并重命名我的库所依赖的所有类,并为它们添加前缀, 因此名称与原始名称不冲突

这太可怕了,我现在不能考虑。对不起


Barlib中的任何内容都不会“在”您的项目中或编译到您的库中。您不分发任何Barlib副本-链接到您的二进制文件或作为源代码。

您是否考虑分发源文件或二进制文件?我在描述中添加了这一点,谢谢。我最终完成了这项工作,谢谢。我仍然想知道是否有更好的选择,但看起来没有。