在cocoapods podspec文件中定义标题搜索路径

时间:2014-01-15 08:36:15

标签: xcode header cocoapods specifications

我为我创建的框架定义了podspec文件存在问题。我有以下文件结构:

/
|-- module1/<source files>
|-- module2/<source files>
...
|-- moduleN/<source files>
|-- core-api/
|    |-- module1/<header files>
|    |-- module2/<header files>
|    ...
|    +-- moduleN/<header files>
|-- framework.podspec
+-- framework.xcodeproj

在XCode中,我将$(SRCROOT)/core-api添加到USER_HEADER_SEARCH_PATHS,以便Xcode可以正确找到公共头文件。

我的podspec文件如下所示:

s.default_subspec = 'module1'

s.subspec 'module1' do |ss|
  ss.source_files               = "module1/**/*.{h,m}"
end

s.subspec 'module2' do |ss|
  ss.source_files               = "module2/**/*.{h,m}"
end

...

s.subspec 'moduleN' do |ss|
  ss.source_files               = "moduleN/**/*.{h,m}"
end

目前,没有指令定义core-api的标头位置。当我pod lib lint时,我收到错误,找不到相应的core-api标头。

我正在使用ss.header_dirss.header_mapping_dirs.xcconfigUSER_HEADER_SEARCH_PATH混在一起,但这些都不适合我。

如何正确定义podspec文件中头文件的位置?

EDIT1:

我从头开始重新创建spec文件并发现,似乎有必要在每个子规范中添加core-api头文件。

我的spec文件现在看起来像这样:

s.default_subspec = 'module1'

s.subspec 'module1' do |ss|
  ss.public_header_files        = "core-api/module1/*.h"
  ss.source_files               = "module1/**/*.{h,m}"
end

s.subspec 'module2' do |ss|
  ss.public_header_files        = "core-api/module1/*.h"
  ss.source_files               = "module2/**/*.{h,m}"
end

...

s.subspec 'moduleN' do |ss|
  ss.public_header_files        = "core-api/module1/*.h"
  ss.source_files               = "moduleN/**/*.{h,m}"
end

但是,在这种情况下,如果我想使用subspec,则只添加模块的标题。如果我只想使用module1和2,则缺少其他模块的标头。 core-api headers文件夹必须始终可供框架中的所有模块使用。我该怎么做?

2 个答案:

答案 0 :(得分:2)

https://stackoverflow.com/a/33359337/4063462

正确的podspec文件应如下所示:

s.default_subspec = 'module1'

s.subspec 'module1' do |ss|
  ss.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/core-api/module1/*.h"' }
  ss.source_files               = "module1/**/*.{h,m}"
end

s.subspec 'module2' do |ss|
  ss.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/core-api/module1/*.h"' }
  ss.source_files               = "module2/**/*.{h,m}"
end

...

s.subspec 'moduleN' do |ss|
  ss.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/core-api/module1/*.h"' }
  ss.source_files               = "moduleN/**/*.{h,m}"
end

答案 1 :(得分:0)

您可以将子规范定义为另一个子规范的依赖关系:

Pod::Spec.new do |s|
  s.name = 'RestKit'

  s.subspec 'Core' do |cs|
    cs.dependency 'RestKit/ObjectMapping'
    cs.dependency 'RestKit/Network'
    cs.dependency 'RestKit/CoreData'
  end

  s.subspec 'ObjectMapping' do |os|
  end
end

来源:Podspec syntax reference