【发布时间】:2019-11-04 08:59:30
【问题描述】:
我正在尝试创建一个包含跨其他平台 (Android) 共享的 C 代码的 iOS 项目。我正在编译的一些第三方库依赖于将某些目录包含为搜索路径。但是,无论我尝试了什么,我都无法在 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,那么它可以工作,但这对我的实际用例没有帮助。
如何配置我的 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
【问题讨论】:
-
您不希望将本地包含目录放入 podspec 中,因为它仅适用于您。如果编辑 Xcode 项目并将目录添加到目标的 Header Search Paths 会发生什么?
-
@trojanfoe 不确定您的意思。 “外部”代码将与我的其余代码一起签入,因此它将适用于获取我的 repo 并编译它的任何人。
-
我假设 Xcode 项目将使用 git 进行跟踪,因此您可以在那里添加目录以及任何必要的构建设置?
-
@trojanfoe 另外,编辑 Xcode 项目正是我需要避免的,因为它是示例项目,而不是插件本身。因此,编辑项目意味着所有正在使用的项目都需要对他们的项目文件进行相同的编辑,重复工作并使其更易编译。