Как сделать динамический фреймворк (Swift) на основе двух статических библиотек с помощью Cocoapods

Я хочу создать динамическую структуру, которая включает в себя две сторонние среды со статическими библиотеками, а затем добавить ее в качестве модуля в свой проект. Вот их файлы podspec

Я попытался добавить их как s.dependency в свой файл podspec, но получил следующую ошибку Pods error - target has transitive dependencies that include static binaries

Попытался включить их как s.vendored_frameworks, но получил следующее: https://github.com/CocoaPods/CocoaPods/issues/6409 и не может найти обходной путь с данным решением.

Не могли бы вы помочь с направлением, как я могу с этим справиться, а позже я опубликую тестовый проект, чтобы рассмотреть проблему поближе. Сейчас у меня просто так много разных тестовых проектов, которые не работают, что я даже не знаю, что выложить на Github, чтобы показать.

В большинстве моих попыток я не смог использовать Import IndoorsSDK/IndoorAtlas в файлах Swift моего фреймворка из-за ошибки Нет такого модуля.

Цените любую помощь.


person Sander    schedule 25.04.2017    source источник


Ответы (1)


Наконец, я нашел решение. Итак, если кто-то столкнется с подобной проблемой, я публикую ее здесь.

Мой файл podspec, кроме других строк, содержит следующее

#// one library added as dependency, another as vendored_frameworks
#// because it lacks modulemap, so it was added manually to IndooRS framework
spec.dependency 'IndoorAtlas'
spec.vendored_frameworks = 'SKNavigation/Frameworks/IndoorsSDK.framework'

#// following lines fix linking issues so our pod would see dependency modules
spec.pod_target_xcconfig = {
    'FRAMEWORK_SEARCH_PATHS' => '$(inherited) $(SRCROOT)/**',
    'OTHER_LDFLAGS' => '$(inherited) -undefined dynamic_lookup'
  }

И modulemap, который был добавлен к фреймворку, в котором его не было.

module IndoorsSDK [system] {
    header "Headers/IndoorsSDK.h"
    header "Headers/Indoors.h"
    export *
    link framework "CoreMotion"
    link framework "CoreBluetooth"
    link "c++"
}

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

pre_install do |installer|
    def installer.verify_no_static_framework_transitive_dependencies; end
end

И это, пожалуй, все.

person Sander    schedule 22.05.2017