CocoaPods不会生成xcworkspace
运行gem install cocoapods 更新cocoapods工具,然后再执行pod install
问题解决
解决CocoaPods慢的方案
https://www.jianshu.com/p/c84c9a61e9fe
Spec相关
podspec文件解析
文章介绍了一些普通项目的配置方式,这里补充两个小tip:
- 使用use_frameworks!造成的引用错误?
如果在Podfile中使用了use_frameworks!,那么cocopods会帮我们自动生成头文件xxx-umbrella.h,这里面导入了所有我们在podspec中配置的所有公共头文件(类似于pch文件),只要我们引用了这个文件中导入的头文件(无论是什么类型的头文件),就会引用整个模块,这就导致了如果私有库中使用了C++的代码,那么只要引用到相关的代码,就会提示找不到文件。(如果调用方不使用use_frameworks就没有这个问题,但我们不能强求别人对吧)
因此我们就需要将C++的文件配置成私有的头文件,使用下面的代码:
s.private_header_files = [
'.../**/*.{cpp,hpp,c}'
]
这样就不会报错了。
但是这样会导致无法使用C++文件,按照常规的操作,就需要修改到配置文件了,如何用spec修改配置文件,请看下面:
- 如何修改项目配置?
上面的例子中,我们想要修改Targets中的Header Search Paths来解决C++文件的使用问题,因此需要用到下面的代码:
s.pod_target_xcconfig = { ///< 修改本模块Target配置
'KEY' => 'Value',
}
s.user_target_xcconfig = { ///< 修改主工程Target配置
'KEY' => 'Value',
}
其中,KEY
就是setting里的对应key的全大写+空格改为下划线,如Header Search Paths
> 'HEADER_SEARCH_PATHS' ,对应的添加(使用时应自行修改为对应配置):
search_paths = [
#Podfile不使用use_frameworks搜索路径
'$(PODS_ROOT)/Headers/Public/...',
'$(PODS_ROOT)/Headers/Private/...',
#Podfile使用use_frameworks库内搜索路径
'$(PODS_ROOT)/.../Headers',
'$(PODS_ROOT)/.../PrivateHeaders',
//...
]
private_header_path = [
'${PODS_CONFIGURATION_BUILD_DIR}/.../xxx.framework/PrivateHeaders',
'$(PODS_ROOT)/Headers/Private/...',
]
s.pod_target_xcconfig = {
'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES' ,
'HEADER_SEARCH_PATHS' => search_paths.join(' '),
}
s.user_target_xcconfig = {
'HEADER_SEARCH_PATHS' => private_header_path.join(' '),
}
网友评论