2014-01-15 68 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

相關問題