Как установить карту модуля для проекта cocoapods? - PullRequest
3 голосов
/ 24 апреля 2020

Я пытался использовать модуль, написанный на Obj- C, и мой проект только для Swift. Я получил эту ошибку include of a non-modular header inside framework module в операторе импорта зависимости внутри файла .h фреймворка.

Модуль p * c библиотеки :

Pod::Spec.new do |s|
  s.name             = 'flutter_vlc_player'
  s.version          = '0.0.3'
  s.summary          = 'A new Flutter project.'
  s.description      = <<-DESC
A new Flutter project.
                       DESC
  s.homepage         = 'http://example.com'
  s.license          = { :file => '../LICENSE' }
  s.author           = { 'Your Company' => 'email@example.com' }
  s.source           = { :path => '.' }
  s.source_files = 'Classes/**/*'
  s.public_header_files = 'Classes/**/*.h'
  s.dependency 'Flutter'

  s.dependency 'MobileVLCKit', '~> 3.3.10'
  s.static_framework = true

  s.ios.deployment_target = '9.0'
end

Зависимость MobileVLCKit.

Я нашел несколько сообщений о похожих проблемах:

Кажется, что отсутствует Карта модулей проекта, я хочу сделать PR, чтобы исправить это в библиотеке, и это позволяет работать с Свифт проекты. Тем не менее, я не знаю, как мне настроить подспе c библиотеки. Я видел такие вещи, как в подспе c:

s.script_phase = {  
    :name => 'CommonCrypto',    
    :script => 'COMMON_CRYPTO_DIR="${SDKROOT}/usr/include/CommonCrypto" 
    if [ -f "${COMMON_CRYPTO_DIR}/module.modulemap" ]   
        then    
        echo "CommonCrypto already exists, skipping"    
        else    
        # This if-statement means we will only run the main script if the   
        # CommonCrypto.framework directory doesn not exist because otherwise    
        # the rest of the script causes a full recompile for anything   
        # where CommonCrypto is a dependency    
        # Do a "Clean Build Folder" to remove this directory and trigger    
        # the rest of the script to run 
        FRAMEWORK_DIR="${BUILT_PRODUCTS_DIR}/CommonCrypto.framework"    
        if [ -d "${FRAMEWORK_DIR}" ]; then  
            echo "${FRAMEWORK_DIR} already exists, so skipping the rest of the script." 
            exit 0  
        fi  
        mkdir -p "${FRAMEWORK_DIR}/Modules" 
        echo "module CommonCrypto [system] {    
            header \"${SDKROOT}/usr/include/CommonCrypto/CommonCrypto.h\"   
            export *    
        }" >> "${FRAMEWORK_DIR}/Modules/module.modulemap"   
        ln -sf "${SDKROOT}/usr/include/CommonCrypto" "${FRAMEWORK_DIR}/Headers" 
    fi',    
    :execution_position => :before_compile  
  }

Однако я не знаю, как правильно это сделать. Должен ли я создать файл с именем ModuleMap.h в папке library / Classes? И затем поместите что-то вроде ниже?

каркасный модуль MixModuleFramework {зонтик заголовка "MixModuleFramework.h" export * module * {export *}}

Я не хочу использовать Разрешить не- модульная Включает в Framework Модули внутри проекта. Я хочу, чтобы библиотека работала с другими проектами.

Когда я пытаюсь запустить pod lib lint --no-clean

error: include of non-modular header inside framework module 'flutter_vlc_player.FlutterVlcPlayerPlugin': 'MobileVLCKit/MobileVLCKit.framework/Headers/MobileVLCKit.h' [-Werror,-Wnon-modular-include-in-framework-module]

От ошибок Xcode:

Include of non-modular header inside framework module 'flutter_vlc_player.FlutterVlcPlayerPlugin': '/var/folders/k7/1ptshnq15zn3nz6bgp7sj8h88w6vb6/T/CocoaPods-Lint-20200423-87288-nosd33-flutter_vlc_player/Pods/MobileVLCKit/MobileVLCKit.framework/Headers/MobileVLCKit.h'

Это кажется, что cocoapods автоматически генерирует какую-то карту модулей

framework module flutter_vlc_player {
  umbrella header "flutter_vlc_player-umbrella.h"

  export *
  module * { export * }
}

Тем не менее, я супер нуб по этому вопросу карты модулей, и он не позволяет проектам, использующим swift, создать приложение. Итак, как я могу создать приложение для собственного модуля и сообщить об этом подспе c? Или есть какая-то другая конфигурация, которую необходимо выполнить?

...