Включение каталога в качестве пути поиска во время компиляции с CocoaPods - PullRequest
3 голосов
/ 04 ноября 2019

Я пытаюсь создать проект iOS, который включает в себя код на C, который используется на других платформах (Android). Некоторые из сторонних библиотек, которые я собираю, полагаются на включение определенных каталогов в качестве путей поиска. Однако, что бы я ни пытался, я не смог в файле CocoaPods .podspec включить данный каталог в путь поиска компиляции. Я использую CocoaPods 1.8.4.

. Хотя это плагин Flutter, я понимаю, что это проблема с CocoaPods / Xcode, поскольку Flutter просто настроил файлы проекта. Тем не менее, стоит отметить, что Flutter устанавливает пример рабочего пространства, которое я не хочу изменять. Я хочу, чтобы сам плагин был изменен для компиляции в необходимом коде, а не в примере рабочей области / проекта. Другими словами, я хочу, чтобы изменялся только файл ios/repro_cocoapods_issue.podspec.

В случае, если это имеет значение, я использовал следующую команду Flutter для создания проекта:

flutter create -t plugin -i objc -a java repro_cocoapods_issue

У меня есть полное воспроизведение на GitHub здесь . Чтобы воспроизвести, откройте рабочую область в example/ios/Runner.xcworkspace в XCode и попробуйте собрать.

Это то, что я пробовал в файле ios/repro_cocoapods_issue.podspec:

  • s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.user_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.user_target_xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.pod_target_xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.compiler_flags = '-Iexternal/'
  • s.preserve_paths = 'external/**'
  • s.preserve_paths = '${PROJECT_DIR}/external/**'

Во всех случаях я получаю:

'external_dir.c' file not found

Если я изменяюкод #include ../external/external_dir.c, тогда он работает, но это не помогает с моим фактическим вариантом использования.

Как настроить мой podspec таким образом, чтобы указанный каталог был включен в путь поиска во время компиляции?

Выход pod env

Стек

   CocoaPods : 1.8.4
        Ruby : ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
    RubyGems : 2.5.2.3
        Host : Mac OS X 10.14.6 (18G95)
       Xcode : 11.1 (11A1027)
         Git : git version 2.23.0
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib
Repositories : master - git - https://github.com/CocoaPods/Specs.git @ d13a0869021d940f32f0543a03500755b39be998

Источник установки

Executable Path: /usr/local/bin/pod

Плагины

cocoapods-deintegrate : 1.0.4
cocoapods-plugins     : 1.0.0
cocoapods-search      : 1.0.0
cocoapods-stats       : 1.1.0
cocoapods-trunk       : 1.4.1
cocoapods-try         : 1.1.0

Ответы [ 2 ]

0 голосов
/ 16 ноября 2019

Убедитесь, что каждое редактирование файла podspec также увеличивает его версию.

Предполагается, что версии podspecs CocoaPods являются неизменяемыми и кэшируются как таковые. См pod cache list и pod cache clean.

0 голосов
/ 16 ноября 2019

Отвечая на мой собственный вопрос после того, как наконец выяснил это.

Что-то агрессивно кэширует "вывод" .podspec файлов. Проблема была в том, что я менял .podspec и убирал + восстанавливал, ожидая, что этого будет достаточно, чтобы забрать мои изменения, но это не так. Если я вместо этого сделаю git clean -xdf и , а затем , мои изменения будут приняты.

В итоге я использовал свойства, которые, как я ожидал, должны работать (с небольшими изменениями, приведенными выше. чтобы выяснить, когда использовались опции на самом деле ):

    s.source_files          = [
        'Classes/**/*',
        'shared_c/**/*'
    ]
    s.public_header_files   = [
        'Classes/**/*.h',
        'shared_c/*.h'
    ]
    s.xcconfig              = {
        'HEADER_SEARCH_PATHS' => [
            '"${PODS_TARGET_SRCROOT}/shared_c/"'
        ],
        'GCC_PREPROCESSOR_DEFINITIONS' => 'SOME_SYMBOL_FOR_THIRD_PARTY_CODE=1 SOME_OTHER_SYMBOL=1'
    }
    s.dependency 'Flutter'

    s.ios.deployment_target = '9.0'

Что касается того, почему файлы так агрессивно кэшируются, мне нужно разобраться с командой Flutter (иЯ ожидаю, что они скажут, что это проблема CocoaPods / XCode).

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