Cocoapods - Swift Framework с внутренней зависимостью от stati c - PullRequest
3 голосов
/ 14 февраля 2020

Я реализую iOS фреймворк, написанный на Swift. Эта структура имеет внутреннюю зависимость от библиотеки C на основе * stati c. Чтобы заставить его работать и на основе некоторых уроков, я создал карту модулей, похожую на эту:

framework module Module {
    umbrella header "Module.h"

    explicit module ModuleDep {
        private header "header1.h"
    }

    export *
}

На основании этого я могу включить C код в Swift, например:

import Module.ModuleDep

При экспорте фреймворка вручную все работает нормально. Это верная вещь, я хочу иметь поддержку Cocoapods для моей платформы с видимостью кода (проще для отладки). Подспе c, которое заставляет его работать, было следующим (некоторые части опущены):

Pod::Spec.new do |s|
  s.platform = :ios
  s.ios.deployment_target = '12.0'

  s.module_map = "Module.modulemap"
  s.source_files = "Module/*.{h,swift}", "ModuleDep/*.h"
  s.vendored_libraries  = "ModuleDep/*.a"

  s.swift_version = "5.1"
end

Насколько я понимаю, vendored_libraries используется, когда это артефакт, который вы предоставляете своим пользователям, и что Вот почему мне не нравится это решение.

Я также попробовал этот вариант spe c:

Pod::Spec.new do |s|
  s.platform = :ios
  s.ios.deployment_target = '12.0'

  s.module_map = "Module.modulemap"
  s.source_files = "Module/*.{h,swift}", "ModuleDep/*.h", "ModuleDep/*.a"  
  s.swift_version = "5.1"
end

, но он не компилируется.

Так каков правильный способ сделать это? Или что я сделал не так?

1 Ответ

2 голосов
/ 19 февраля 2020

Поскольку вы используете библиотеку stati c в качестве зависимости, вы должны указать ее как библиотеку в файле podspe c. Вот почему ваш второй подход не работает, потому что это библиотека, а не исходный файл.

Как уже упоминалось в документах vendored_libraries, для библиотек, поставляемых с Pod. Также в вашем случае библиотека stati c на основе C является зависимостью, которая должна поставляться вместе с Pod. Таким образом, использование vendored_libraries должно быть хорошо в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...