我正在尝试创建一个 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/