ios – 在框架错误中包含非模块化头文件 – 如何使传递依赖关系与cocoapods一起使用?

前端之家收集整理的这篇文章主要介绍了ios – 在框架错误中包含非模块化头文件 – 如何使传递依赖关系与cocoapods一起使用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个开源库( https://github.com/linkedin/LayoutTest-iOS),里面有两个Cocoapods – LayoutTest和LayoutTestBase. LayoutTest依赖于LayoutTestBase,其中一个.h文件需要从LayoutTestBase导入一些东西.目前,我这样做使用:

@import LayoutTestBase;

但是,这仅在应用程序使用use_frameworks时才有效!在他们的Podfile中.有些应用不想使用此cocoapods选项.没有use_frameworks !,如果我使用它,它可以工作:

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

但是,当使用use_frameworks!时,它会给出错误:“在框架模块中包含非模块化头文件’LayoutTest.LYTLayoutTestCase’”

显然,无论用户是否使用use_frameworks,都应该有一种方法来执行此导入!或不在他们的Podfile中.如何让这个库编译并正确运行?

研究

我查看了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安装.尝试在应用程序上运行单元测试.它会失败.现在,尝试更改LYTLayoutTestCase.h以使用#import< LayoutTestBase / LYTLayoutPropertyTester.h>.它现在有效.但是,如果你添加use_frameworks!到Podfile,它不再有效.

解决方法

我不认为这是最佳解决方案,但我发现的工作是做一个#if __has_include并根据它是否是用use_frameworks构建来做两个解决方案!

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

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

猜你在找的iOS相关文章