我正在尝试创建一个 iOS 项目,其中包含跨其他平台 (Android) 共享的 C 代码。我正在编译的一些第三方库依赖于将某些目录包含为搜索路径。但是,无论我尝试过什么,我都无法在 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 here 上有一个完整的重现。要重现,请在 Xcode 中的 example/ios/Runner.xcworkspace 处打开工作区并尝试构建。

这些是我在 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 则它可以工作,但这对我的实际用例没有帮助。


    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
    

    最佳答案

    在终于弄清楚之后回答我自己的问题。

    有些东西正在积极缓存 .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 问题)。

    关于ios - 使用 CocoaPods 编译时包含一个目录作为搜索路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58690010/

    10-10 21:09