#if canImport()无法与CocoaPods一起使用。严重的问题

时间:2019-03-08 20:57:42

标签: ios swift cocoapods ios-frameworks podspec

我们遇到了一个非常奇怪的问题,这在我们的生产代码中造成了问题。基本上,我们创建了一个框架,该框架几乎没有单独的可选框架。现在,我们使用以下逻辑从框架访问代码:

#if canImport(optionalFramework)
firstMethodFromTheFramework()
secondMethodFromTheFramework()
#endif

问题在于,然后,我们将主框架与CocoaPods一起分发,即使客户集成了其他Subspec,我们的代码也无法引用其他框架。导入框架,并且不调用可选方法。因此它不能完全正常工作并会产生很多问题……我们根本不明白,为什么IOS开发不允许这种功能和架构?

最好模块化框架,而不是创建巨大的框架,这只会增加大小和复杂性。

如果客户端将其集成,也许还有其他方法可以从可选框架访问框架

我们对于整个情况确实感到不确定,这对于我们的整个项目至关重要。

我将再澄清一次:我们的主框架根本不包括可选框架。它仅使用#if canImport()标志。客户应负责添加Pod,然后框架应自动开始执行代码

1 个答案:

答案 0 :(得分:0)

我有同样的问题,它可以通过以下方法为我解决:

在框架中安装可选的pod-让它说是Alamofire-(您将在最后删除),以便可以在两个文件中找到该路径

  1. yourFramwork.debug.xcconfig
  2. yourFramwork.release.xcconfig

FRAMEWORK_SEARCH_PATHS 复制此“ $ {PODS_CONFIGURATION_BUILD_DIR} / Alamofire”

并从 HEADER_SEARCH_PATHS 中复制此“ $ {PODS_CONFIGURATION_BUILD_DIR} /Alamofire/Alamofire.framework/Headers”

将您复制的内容放到任何地方,例如便笺文件

现在从框架podFile中删除pod(Alamofire),然后再次运行 pod install

手动超过在两个文件中复制的内容:

  1. yourFramwork.debug.xcconfig
  2. yourFramwork.release.xcconfig

完成后, 现在,如果您将框架添加到另一个项目中,然后在该项目的podFile中安装optionalFramwork,一切都会很好

#if canImport(optionalFramework)。应该可以根据需要工作

希望能解决您的问题