2017-07-14 232 views
0

我正在为开源库构建pod,并且必须保留公共头文件的目录结构不变。 简化的例子是这样的:pod lib lint关于header_mappings_dir之外的头文件的投诉

include/header1.h 
include/foo/header2.h 
src/file.c 
src/internal.h 

include目录包含公共标头。

我podspec包含:

s.public_header_files = 'Foo/Classes/include/**/*' 
s.private_header_files = 'Foo/Classes/src/internal.h' 
s.header_mappings_dir = 'Foo/Classes/include' 

Example项目编译罚款和​​目录包含相同的结构与原始include目录。

不过pod lib lint Foo.podspec --use-libraries给了我这个错误:

- ERROR | [iOS] header_mappings_dir: There are header files outside of the header_mappings_dir (Foo/Classes/src/internal.h) 

嘛。是。确实。但为什么这是一个错误?我对情况完全没问题。

我自己找到了解决方案,但我不确定,如果是正确的。

s.exclude_files = 'Foo/Classes/src/internal.h' 

这使得linter快乐,项目仍然编译。但感觉不对,因为该文件是该项目的一部分。

谢谢!

回答

0

我会自己回答。

当将podspec推送到git服务器时,exclude_files解决方法无法正常工作。

问题实际上是一个误解:不要使用其他路径规范来排除您在source_files行中指定的文件!

解决方法是明确地只将文件添加到source_files行,它们是公共头文件的一部分,或者应该在Xcode中获得编译规则。

任何其他文件(应包括在内,但对自己没有编译header_mappings_dir和.c文件以外的头)加入通过

s.preserve_paths = 'Foo/Classes/src/**/*' 

现在一切正常。