Ken*_*art 5 xcode ios cocoapods
我正在尝试创建一个 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
Run Code Online (Sandbox Code Playgroud)
我在 GitHub上有完整的重现。要重现,请在 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
Run Code Online (Sandbox Code Playgroud)
如果我将代码更改为#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
Run Code Online (Sandbox Code Playgroud)
Executable Path: /usr/local/bin/pod
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
最终弄清楚后回答我自己的问题。
有些东西正在积极缓存文件的“输出” .podspec。导致问题的原因是我正在更改.podspec和清理+重建,希望这足以接受我的更改,但事实并非如此。如果我改为执行 agit 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'
Run Code Online (Sandbox Code Playgroud)
至于为什么文件被如此积极地缓存,我需要向 Flutter 团队追查(我希望他们说这是 CocoaPods/XCode 的问题)。
| 归档时间: |
|
| 查看次数: |
2854 次 |
| 最近记录: |