【问题标题】:#if canImport() not working properly with CocoaPods. Serious issue#if canImport() 无法与 CocoaPods 一起正常工作。严重的问题
【发布时间】:2019-03-08 20:57:41
【问题描述】:

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

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

问题是,然后我们用CocoaPods分发我们的主框架,即使客户端集成了额外的Subspec,我们的代码不能引用额外的框架..所以它没有导入框架并且不调用可选方法。所以它不能完全工作并产生大量问题......我们根本不明白,为什么IOS开发不允许这样的特性和这样的架构? ​

模块化框架要好得多,而不是创建巨大的框架,这只会增加规模和复杂性..

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

​

我们真的对整个情况有点不确定,这对我们的整个项目至关重要。 ​

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

【问题讨论】:

  • 这个我没试过!会再试一次。不过,我现在应该在我们的主框架 podfile 中包含这个可选的 Pod 吗?那么,我应该将这个可选框架指定为弱框架,对吗? :)
  • @SachinVas 不工作。因此,它甚至没有通过验证。
  • 能否上传验证失败的日志?

标签: ios swift cocoapods ios-frameworks podspec


【解决方案1】:

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

在你的框架中安装可选的 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”

把你复制的东西放在任何地方比如说note file

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

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

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

他们在哪里,完成 现在,如果您将框架添加到另一个项目并在该项目的 podFile 中安装 optionalFramwork,那么一切都会正常

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

希望能解决你的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多