如何删除 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 => true
或 use_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 中?