Создайте podspe c для библиотеки C ++ - PullRequest
0 голосов
/ 04 марта 2020

У меня возникли некоторые проблемы при создании файла podspe c для извлечения библиотеки C ++ из приложения iOS.

На самом деле моей главной проблемой являются заголовки, мой C ++ библиотека зависит от fast json, который включен в репозиторий библиотеки в каталоге ext_in c (файлы выглядят как $ {PROJECT_SOURCE_PATH} / ext_inc / rapidjson / * h).

Если я включу его в исходных файлах, таких как:

s.source_files = utils/*{cpp,h}', 'handler/*{cpp,h}','ext_inc/**/*h'

Когда я пытаюсь скомпилировать библиотеку с:

pod lib lint --verbose report-base.podspe c

Я получаю следующие ошибки:

 ../utils/json_serializer.h:8:10: fatal error: 'rapidjson/prettywriter.h' file not found

Ошибки вызваны тем, что заголовки включены как:

#include "rapidjson/prettywriter.h"

Компиляция продолжается, если я изменяю это на:

#include "prettywriter.h"

... но это неправильный способ включить внешнюю библиотеку, такую ​​как fast json, и она вообще не переносима (эта же библиотека также является ядром приложения android, поэтому я должен остаться кроссплатформенный насколько это возможно).

Я пытался избежать этой проблемы Лем, используя подфайл private_header_path и добавив xcconfig с ключом:

'HEADER_SEARCH_PATHS' => 'ext_inc'

... но ничего не работает.

Для того, что я понял, кокоаподы строят xcode проект из файла podspe c и использует сопоставление модулей для сопоставления всех исходных и заголовочных файлов, как будто они все находятся в одном каталоге, и в этом контексте тот факт, что мои заголовки включают разрыв пути все ... есть способ "сохранить" в карте модуля заголовок с путем?

1 Ответ

0 голосов
/ 06 марта 2020

После нескольких дней борьбы с этим топи c Я нашел решение.

Решение требует нескольких шагов.

  • Вы должны указать внутри podspe c файл, который вы хотите сохранить путь
  • , затем вы должны указать в пути поиска заголовка, используемом при проверке pod (pod lint / pod repo pu sh), где найти заголовки.
  • , затем вы должны указать в пути поиска заголовка конечного приложения, в котором расположены заголовки.
  • pod lib lint / pod repo pu sh следует запустить с параметром - skip-import-validation

Итак, если вы хотите получить доступ к rapidjson / prettywriter.h, который находится внутри ext_in c внутри вашего репозиторий проекта pod вот что мне нужно было сделать:

note: spe c - это объект внутри ruby myproject.podspe c

   spec.preserve_paths = 'ext_inc/**'
   spec.pod_target_xcconfig = {
       'HEADER_SEARCH_PATHS' => "\"" + __dir__ + "/ext_inc\""
   }
   spec.xcconfig = {
       'HEADER_SEARCH_PATHS' => "\"${PODS_ROOT}/report-base/ext_inc\""
   }

Странно то, что мне нужно собрать с помощью ruby трюка с использованием __ dir __ поскольку это был единственный способ работать с обоими при использовании pod lib lint (локальный репозиторий), в котором использовалось pod repo pu sh (клонировано в репозитории fly).

...