2014-01-15 71 views
7

我对我创建的框架的podspec文件的定义存在问题。我有以下文件结构:在cocoapods 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-apiUSER_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 

目前,没有任何指令,在此定义了核心API的报头位置。当我做pod lib lint我得到错误,找不到相应的core-api标题。

我正在搞ss.header_dir,ss.header_mapping_dir,s.xcconfigUSER_HEADER_SEARCH_PATH,但他们都没有为我工作。

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

EDIT1:

我从头开始重新创建规范文件,发现,它似乎有必要添加在每个子规范的核心API的头文件。

我的规格文件现在看起来是这样的:

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头文件夹必须始终可用于框架中的所有模块。我怎么做?

回答

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 
0

您可以定义一个subspec作为另一个subspec的依赖性:

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

相关问题