如何删除 use_frameworks!并继续在 Objective-C 项目中使用 swift pod?

Posted

技术标签:

【中文标题】如何删除 use_frameworks!并继续在 Objective-C 项目中使用 swift pod?【英文标题】:How to remove use_frameworks! AND keep using swift pods on an objective-c project? 【发布时间】:2018-10-20 23:41:51 【问题描述】:

我们的项目是一个Objective-c项目。

既然我们在 cocoapods 中使用 react-native-firebase 我们 can't use use_frameworks!

问题是我们有一个 swift pod 依赖项 (PromiseKit),据我所知,要使用 swift 依赖项,我们必须使用 use_frameworks!

我想做的是两全其美,也就是:

删除 use_frameworks! 以便 react-native-firebase 工作并且 保持PromiseKit swift 依赖。

当前 Podfile:

platform :ios, '10.0'

target 'TestApp' do

    use_frameworks!

    # swift pod
    pod 'PromiseKit'

    # react-native-firebase
    pod 'Firebase/Core', '~> 5.3.0'
    pod 'Firebase/DynamicLinks', '~> 5.3.0'
    pod 'Firebase/Messaging', '~> 5.3.0'

end

我注意到有这个命令 :modular_headers => trueuse_modular_headers 我觉得可能与我正在寻找的解决方案相关,也可能不相关,因为 Cocoapods 1.5 但我似乎无法将这些点联系起来。

编辑:

如果我删除 use_frameworks!(即使我将其替换为 use_modular_headers!)我会收到此错误:

有什么帮助吗?

【问题讨论】:

我遇到了同样的问题 react-native-firebase,根据 firebase 文档,这是 Cocoapods 的限制,以及它如何与 Firebase 等动态框架交互。 2)没有use_frameworks!标志已启用,但我们需要使用 react-native-augment 库,并且明确需要 use_frameworks!它基于 swift,所以如果启用 react-native-augment 有效,但 react-native-firebase (FirebaseCore/FirebaseCore.h' 文件未找到) 则无效,反之亦然,:( 【参考方案1】:

将 Podfile 中的 use_frameworks! 替换为 use_modular_headers!

来自CocoaPods 1.5 release note 引用:

使用 CocoaPods 1.5.0,开发人员不再受限于 指定 use_frameworks!在他们的 Podfile 中以安装 pod 使用 Swift。与 Objective-C 的互操作应该可以正常工作。然而,如果 你的 Swift pod 依赖于一个 Objective-C,你需要启用 pod 该 Objective-C pod 的“模块化标题”(见下文)。

使用 CocoaPods 1.9.0,现在可以静态和动态地构建框架。使用use_frameworks! :linkage => :static

【讨论】:

我已经尝试过了,但它不起作用,我仍然遇到构建错误,缺少 swift 基本库。我也不认为 promise kit 依赖于一个客观的 c pod 也许 - ***.com/questions/50096025/… 我会试试然后回帖 不,它不起作用,这是错误d2ddoduugvun08.cloudfront.net/items/291W1l1f2D133t3P2f1S/… 嗯,好像还没有找到标准的 Swift 库【参考方案2】:

我也遇到过这个问题。并为此找到完美的解决方案。

https://github.com/joncardasis/cocoapods-user-defined-build-types

这是一个 cocoapods 插件,我们可以通过它指定在特定 pod 上使用“动态框架”(即“use_framework”的作用)。 cocoapods 目前不支持此功能,这就是为什么使用此插件来解决您的问题。

【讨论】:

谢谢!我尝试了所有解决方案,这是唯一对我有用的解决方案。【参考方案3】:

上周我遇到了类似的问题,所以我创建了一个基本项目,我使用的是 Swift、Firebase 但不是 use_frameworks!,而是使用桥接头。

不知道人们是否仍然对此有疑问,如果有帮助,请告诉我。 https://github.com/jenshandersson/React-Native-Swift

【讨论】:

以上是关于如何删除 use_frameworks!并继续在 Objective-C 项目中使用 swift pod?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 1.9 中删除 django-admin 中的保存并继续编辑按钮,使其不存在?

为啥我们使用 use_frameworks!在 CocoaPods 中?

如何从 grub2 中删除“按任意键继续”消息

iOS 中的 use_framework 错误

没有 use_frameworks 就无法安装 Swift cocoapod!找不到模块 swift.h 文件

使用 use_frameworks!在一个反应​​原生项目上