我为我创建的框架定义了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_dir
,ss.header_mapping_dir
,s.xcconfig
与USER_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文件夹必须始终可供框架中的所有模块使用。我该怎么做?
答案 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