【问题标题】:How to use #import <> on a git submodule如何在 git 子模块上使用#import <>
【发布时间】:2015-05-14 10:15:42
【问题描述】:

我的项目中包含两个库。由于我的项目是一个静态库,我决定通过 git 子模块而不是可可豆荚来包含这些库。

LibraryA 依赖于 LibraryB 并通过 #import &lt;&gt; 导入它,这给了我一个找不到文件的错误。

我在目标的框架和标头搜索路径中都添加了/path/to/folder/with/my/submodules,但我能够解决错误的唯一方法是将LibraryA 更改为使用#import ""

是否有不涉及分叉 LibraryA 和自己更改导入语句的正确方法来解决此问题?

【问题讨论】:

  • 这些库是否创建为Frameworks?需要将它们复制到 Frameworks 作为构建阶段。
  • 它们不是框架,这正是我遇到这个问题的原因。我正在使用JVFloatLabeledTextField,而这又需要HTAutocompleteTextField。我手动将相关的源文件添加到我的项目中。
  • 您可以创建自己的Frameworks;这就是我的意思。如果您以这种方式添加它们,那么使用#import &lt; &gt; 格式非常容易。您也不必在框架路径或标题搜索路径中设置任何内容。我只在链接动态库时使用&lt; &gt;,任何静态的我都使用""
  • 这通常是一个很好的观点。但是过去当我尝试按照您建议的方式将框架捆绑到静态库中时,我遇到了问题。如果使用我的静态库的任何 3rd 方应用程序也使用 JVFloatLabeledTextFieldHTAutocompleteTextField,也可能导致命名空间冲突的 AFAIK,还是我弄错了?
  • 只要事情处理得当,静态库命名空间冲突就不会发生。也许说起来容易做起来难,因为静态库在很多层面上都很难处理。在构建 lib (see here) 或声明外部依赖项并让用户处理它们时使用前缀符号。 Apple 有一些以明智的方式做事的好技巧和最佳实践,所以你可能想看看。至少您现在可以选择使用静态库还是动态库。

标签: ios objective-c xcode git cocoapods


【解决方案1】:

如果您的应用名称是 MyApp 并且您的子模块是 MySubmodule 然后进入应用目标的构建设置并将其放入“标题搜索路径”:

MyApp/MySubmodule

希望在您的子模块中您有另一个与 MySubmodule 名称匹配的目录,但在这里我只会说它是 SDKName:

#include <SDKName/UmbrellaHeader.h>

现在它会搜索 MySubmodule 路径的根目录,因为 SDKName 是一个子文件夹,现在您可以使用 语法。

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 2012-05-10
    • 1970-01-01
    • 2013-04-07
    • 2021-03-07
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多