我创建了一个开源库(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,它将不再有效。
答案 0 :(得分:0)
我不认为这是最佳解决方案,但我发现的工作是#if __has_include
做两个解决方案,具体取决于它是否是use_frameworks!
构建的
这是指向github问题的链接,其中包含更多详细信息:https://github.com/linkedin/LayoutTest-iOS/issues/8
如果有人知道像parse-SDK这样的库如何在没有这些解决方法的情况下做到这一点,我仍然感兴趣。