[英]Include of non-modular header inside framework error - how do you make transitive dependencies work with 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!
使用它時use_frameworks!
,它給出了錯誤:“在框架模塊'LayoutTest.LYTLayoutTestCase'中包含非模塊化頭文件”
顯然,無論用戶是否使用use_frameworks!
,都應該有一種方法來執行此導入use_frameworks!
或不在他們的Podfile中。 如何讓這個庫編譯並正確運行?
研究
我看過stackoverflow,這似乎是最相似的問題: CocoaPods框架與依賴 - 包括框架模塊內的非模塊化頭 。 它提到它是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,它不再有效。
我不認為這是最佳解決方案,但我發現的工作是做一個#if __has_include
並根據它是否是用use_frameworks!
構建來做兩個解決方案use_frameworks!
這是github問題的鏈接,包含更多詳細信息: https : //github.com/linkedin/LayoutTest-iOS/issues/8
如果有人知道像parse-SDK這樣的庫如何在沒有這些變通方法的情況下做到這一點,我仍然感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.