Попытка обернуть структуру поставщика в Cocoapod, но компилятор не может найти заголовки

Надеясь, что кто-то уже решил это; Я пытаюсь обернуть стороннюю библиотеку (Airwatch) в какаопод для лучшего управления нашими приложениями. Однако я чертовски мучаюсь, пытаясь заставить это работать. Я создал модуль вокруг статической библиотеки, но это динамический фреймворк, и у меня чертовски много времени на его компиляцию. Заголовки из фреймворка просто недоступны в содержащем приложении....

Вот что я уже пробовал:

  • Когда я устанавливаю vendored_libraries в podspec, я не могу получить доступ к заголовкам ни с кавычками, ни с ‹>. Xcode просто жалуется как «Не найдено»
  • Затем я попытался добавить путь к заголовкам в фреймворке как исходные_файлы, например так

    s.source_files = 'Pod/Classes/**/*','Pod/Framework/AWSDK.framework/Versions/A/Headers/*.h'
    

Это позволяет xcode найти заголовок для импорта, например:

    import "AWSDKCore.h"  //Documented as the framework's main header

Но это вызывает ошибку для существующего импорта в исходной структуре:

введите описание изображения здесь

Я подумал, что это плохая идея, но я решил попробовать назвать свой cocopod тем же именем, что и Framework (который должен сохранить путь импорта). Итак, это выдает кучу ошибок, говорящих о том, что некоторые перечисления либо не объявлены, либо объявлены дважды.

Если у кого-то есть мысли, буду бесконечно благодарен...

Просто для справки вот мой podspec:

Pod::Spec.new do |s|
 s.name             = "AirwatchSDK"
 s.version          = "0.1.0"
 s.summary          = "A short description of AirwatchSDK."

 s.homepage         = "https://github.com/<GITHUB_USERNAME>/AirwatchSDK"
 s.license          = 'MIT'
 s.author           = { "xxxxx" => "xxxx" }
 s.source           = { :git => "https://github.com/<GITHUB_USERNAME>/AirwatchSDK.git", :tag => s.version.to_s }

 s.platform     = :ios, '8.0'
 s.requires_arc = true
 #s.module_name = 'AWSDK'
 s.source_files = 'Pod/Classes/**/*','Pod/Framework/AWSDK.framework/Versions/A/Headers/*.h'

 s.vendored_frameworks = 'Pod/Framework/AWSDK.framework'
 s.frameworks = 'CFNetwork','CoreData','CoreFoundation','CoreGraphics','CoreLocation','CoreTelephony','CoreText'
 s.libraries = 'stdc++','z','sqlite3','c++'
end

person jessehensold    schedule 23.10.2015    source источник


Ответы (1)


Поскольку я придумал свой собственный ответ, я решил опубликовать его здесь для следующего парня...

Ключ, как оказалось, заключался в том, чтобы не иметь 'source_files' (или закомментировать его). Я не уверен, является ли это ошибкой или нет, но в моей последней спецификации podspec был установлен vendored_framework, а source_files не установлен следующим образом:

#can't have source files if you want to access vendor framework
#s.source_files = 'Pod/Classes/**/*'

# airwatch framework.
s.vendored_frameworks = 'AWSDK.framework'
person jessehensold    schedule 27.10.2015
comment
Я был удивлен, столкнувшись с этим, и действительно, это единственный способ заставить работать точно такой же сценарий. Как следующий парень, я очень ценю, что вы опубликовали свой собственный ответ. - person beno; 17.07.2016
comment
Это был большой шаг к решению моих собственных проблем с включением бинарной библиотеки в качестве какао-бобов. В настоящее время я застрял на том, что s.source требуется, но на самом деле нет полезного источника для использования. - person David Berry; 26.07.2016
comment
@DavidBerry, тебе нужно сохранить s.source. Вам нужно удалить s.source_files - person 0x6A75616E; 10.01.2017
comment
Итак, как вы ее решили, как вам удалось включить исходные_файлы в модуль? - person Zaraki; 11.05.2020