【发布时间】:2015-05-14 10:15:42
【问题描述】:
我的项目中包含两个库。由于我的项目是一个静态库,我决定通过 git 子模块而不是可可豆荚来包含这些库。
LibraryA 依赖于 LibraryB 并通过 #import <> 导入它,这给了我一个找不到文件的错误。
我在目标的框架和标头搜索路径中都添加了/path/to/folder/with/my/submodules,但我能够解决错误的唯一方法是将LibraryA 更改为使用#import ""。
是否有不涉及分叉 LibraryA 和自己更改导入语句的正确方法来解决此问题?
【问题讨论】:
-
这些库是否创建为
Frameworks?需要将它们复制到Frameworks作为构建阶段。 -
它们不是框架,这正是我遇到这个问题的原因。我正在使用
JVFloatLabeledTextField,而这又需要HTAutocompleteTextField。我手动将相关的源文件添加到我的项目中。 -
您可以创建自己的
Frameworks;这就是我的意思。如果您以这种方式添加它们,那么使用#import < >格式非常容易。您也不必在框架路径或标题搜索路径中设置任何内容。我只在链接动态库时使用< >,任何静态的我都使用""。 -
这通常是一个很好的观点。但是过去当我尝试按照您建议的方式将框架捆绑到静态库中时,我遇到了问题。如果使用我的静态库的任何 3rd 方应用程序也使用
JVFloatLabeledTextField或HTAutocompleteTextField,也可能导致命名空间冲突的 AFAIK,还是我弄错了? -
只要事情处理得当,静态库命名空间冲突就不会发生。也许说起来容易做起来难,因为静态库在很多层面上都很难处理。在构建 lib (see here) 或声明外部依赖项并让用户处理它们时使用前缀符号。 Apple 有一些以明智的方式做事的好技巧和最佳实践,所以你可能想看看。至少您现在可以选择使用静态库还是动态库。
标签: ios objective-c xcode git cocoapods