Включить немодульный заголовок внутри ошибки фреймворка — как заставить транзитивные зависимости работать с кокоаподами?

Я создал библиотеку с открытым исходным кодом (https://github.com/linkedin/LayoutTest-iOS), который имеет внутри два Cocoapods — LayoutTest и LayoutTestBase. LayoutTest зависит от LayoutTestBase, и один из файлов .h должен что-то импортировать из LayoutTestBase. В настоящее время я делаю это, используя:

@import LayoutTestBase;

Однако это работает только в том случае, если приложение использует use_frameworks! в своем подфайле. Некоторые приложения не хотят использовать эту опцию Cocopods. Без use_frameworks! это работает, если я использую:

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

Однако при использовании этого с use_frameworks! выдается ошибка: «Включить немодульный заголовок внутри модуля фреймворка« LayoutTest.LYTLayoutTestCase »»

Очевидно, должен быть способ сделать этот импорт независимо от того, использует пользователь use_frameworks! или нет в своем подфайле. Как я могу заставить эту библиотеку скомпилироваться и работать правильно?

Исследования

Я просмотрел stackoverflow, и это, кажется, самый похожий вопрос: Структура CocoaPods с зависимостями - включение немодульного заголовка внутри модуля фреймворка. В нем упоминается, что это проблема с библиотекой Parse, но не упоминается, как ее нужно исправить. Поскольку я владею зависимостью, я могу это исправить. Я также пытался установить для параметра Разрешить немодульные фреймворки значение YES во всех настройках (проекты, модульные тесты, все модули и т. д.), и это, похоже, ничего не дает.

Для воспроизведения

Создайте новый проект. Добавьте этот подфайл:

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

Выполнить pod install. Попробуйте запустить модульные тесты в приложении. Это не удастся. Теперь попробуйте изменить LYTLayoutTestCase.h, чтобы использовать #import <LayoutTestBase/LYTLayoutPropertyTester.h>. Теперь это работает. Однако, если вы добавите use_frameworks! в подфайл, он больше не будет работать.


person plivesey    schedule 17.02.2016    source источник


Ответы (1)


Я не думаю, что это оптимальное решение, но обходной путь, который я нашел, заключался в том, чтобы сделать #if __has_include и выполнить оба решения в зависимости от того, было ли оно построено с use_frameworks!

Вот ссылка на проблему github с более подробной информацией: https://github.com/linkedin/LayoutTest-iOS/issues/8

Если кто-нибудь знает, как такие библиотеки, как parse-SDK, обходятся без этих обходных путей, мне все равно интересно.

person plivesey    schedule 23.02.2016