簡體   English   中英

在框架內部包含非模塊化標頭錯誤 - 如何使傳遞依賴項與cocoapods一起使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM