混合Swift和Objective-C cocoapods

我在将快速编写的pod添加到也使用Objective-C pod的项目中之后,最近遇到了一个cocoapods问题。 添加swift依赖关系需要添加use_frameworks!Podfile 。 一旦进行了更改,其中一个object-c pod的依赖就变得异常严重:

FMDB (事件跟踪器)使用FMDB (SQLite周围的Objective-C包装器),它利用了非模块化标头包含( #import "sqlite3.h"而不是#import )。 在框架内,这是不正确的。 Cocoapods允许这样做,直到最近进行了更改。

Xcode抱怨以下错误:

FMDB pod的作者解决此问题之前,需要一种解决方法。 可以将Podfile配置为回退到以前的行为,再次允许框架模块中包含非模块化包含:

  post_install做|安装程序| 
installer.pods_project.build_configuration_list.build_configurations.each |配置|
configuration.build_settings ['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] ='是'
结束
结束

这为每个pod设置了一个编译器标志,该标志允许框架模块中的非模块化包含。 也可以为项目文件中的每个pod手动添加该标志。

现在将建立该项目。 除非您尝试将使用不正确导入样式的任何头文件导入到桥接头或任何其他Objective-c头文件或源文件中。 为了让Xcode知道在哪里寻找这些标题,请将标题位置添加到项目文件中“ 构建设置”下项目的“ 标题搜索路径 ”中

对于Pods/目录的相对路径,请使用前缀${PODS_ROOT}/SnowplowTracker0.6.2)0.6.2)使用了错误的标题。 为了让Xcode查找所有相关的SnowplowTracker标头,请添加:

  “ $ {PODS_ROOT} / SnowplowTracker / Snowplow” 

包括引号。 对于SnowplowTracker ,现在将编译以下内容:

如果不这样做(我们的CI环境不喜欢这样),请为导入路径 (而不是标题搜索路径 )添加一个条目: