在框架内部包含非模块化标头错误 - 如何使传递依赖项与cocoapods一起使用?

时间:2016-02-17 21:50:21

标签: ios objective-c cocoapods dependency-management ios-frameworks

我创建了一个开源库(https://github.com/linkedin/LayoutTest-iOS),里面有两个Cocoapods - LayoutTest和LayoutTestBase。 LayoutTest依赖于LayoutTestBase,其中一个.h文件需要从LayoutTestBase导入一些东西。目前,我这样做是使用:

@import LayoutTestBase;

但是,这仅在应用程序在其Podfile中使用use_frameworks!时才有效。有些应用不想使用此cocoapods选项。没有use_frameworks!,如果我使用:

#import <LayoutTestBase/LYTLayoutPropertyTester.h> // OR
#import "LYTLayoutPropertyTester.h"

但是,当与use_frameworks!一起使用时,它会给出错误:&#34;在框架模块中包含非模块化标头&#39; LayoutTest.LYTLayoutTestCase&#39;&#34;

显然,无论用户是否在其Podfile中使用use_frameworks!,都应该有一种方法可以执行此导入。如何让这个库编译并正确运行?

研究

我查看了stackoverflow,这似乎是最相似的问题: CocoaPods framework with dependencies - include of non-modular header inside framework module。它提到它是Parse库的一个问题,但没有提到它是如何修复的。由于我拥有依赖项,我可以解决这个问题。 我还尝试在所有设置(项目,单元测试,所有pod等)中将Allow non-modular frameworks设置为YES,这似乎没有做任何事情。

重现

创建一个新项目。添加此Podfile:

target :'{MyAppTarget}Tests' do
pod 'LayoutTest'
end

运行pod install。尝试在应用程序上运行单元测试。它会失败。现在,尝试更改LYTLayoutTestCase.h以使用#import <LayoutTestBase/LYTLayoutPropertyTester.h>。它现在有效。但是,如果您将use_frameworks!添加到Podfile,它将不再有效。

1 个答案:

答案 0 :(得分:0)

我不认为这是最佳解决方案,但我发现的工作是#if __has_include做两个解决方案,具体取决于它是否是use_frameworks!构建的

这是指向github问题的链接,其中包含更多详细信息:https://github.com/linkedin/LayoutTest-iOS/issues/8

如果有人知道像parse-SDK这样的库如何在没有这些解决方法的情况下做到这一点,我仍然感兴趣。